KiCad PCB EDA Suite
CADSTAR_ARCHIVE_PARSER Class Reference

Helper functions and common structures for CADSTAR PCB and Schematic archive files. More...

#include <cadstar_archive_parser.h>

Inheritance diagram for CADSTAR_ARCHIVE_PARSER:
CADSTAR_PCB_ARCHIVE_PARSER CADSTAR_SCH_ARCHIVE_PARSER CADSTAR_PCB_ARCHIVE_LOADER CADSTAR_SCH_ARCHIVE_LOADER

Classes

struct  ATTRCOL
 
struct  ATTRCOLORS
 
struct  ATTRIBUTE_LOCATION
 
struct  ATTRIBUTE_VALUE
 
struct  ATTRNAME
 NOTE from CADSTAR help: To convert a Part Definition Attribute into a hyperlink, prefix the attribute name with "Link ". More...
 
struct  CADSTAR_NETCLASS
 
struct  CODEDEFS
 
struct  CUTOUT
 Represents a cutout in a closed shape (e.g. More...
 
struct  DFLTSETTINGS
 
struct  DOCUMENTATION_SYMBOL
 
struct  EVALUE
 Represents a floating value in E notation. More...
 
struct  FIGURE
 
struct  FONT
 
struct  FORMAT
 
struct  GRID
 
struct  GRIDS
 
struct  GROUP
 
struct  HATCH
 
struct  HATCHCODE
 
struct  HEADER
 
struct  LINECODE
 
struct  LONGPOINT
 
struct  NET
 
struct  PARSER
 
struct  PARSER_CONTEXT
 
struct  PART
 
struct  PARTNAMECOL
 
struct  PARTS
 
struct  POINT
 Represents a point in x,y coordinates. More...
 
struct  REUSEBLOCK
 
struct  REUSEBLOCKREF
 References an element from a design reuse block. More...
 
struct  ROUTECODE
 
struct  ROUTEREASSIGN
 
struct  SETTINGS
 
struct  SHAPE
 
struct  SPCCLASSNAME
 
struct  SYMDEF
 
struct  TEXT
 
struct  TEXT_LOCATION
 Corresponds to CADSTAR "origin". More...
 
struct  TEXTCODE
 
struct  TIMESTAMP
 
struct  TRANSFORM
 
struct  VARIANT
 < Nodename = "VARIANT" or "VMASTER" (master variant More...
 
struct  VARIANT_HIERARCHY
 
struct  VERTEX
 Represents a vertex in a shape. More...
 

Public Types

enum class  TEXT_FIELD_NAME {
  DESIGN_TITLE , SHORT_JOBNAME , LONG_JOBNAME , NUM_OF_SHEETS ,
  SHEET_NUMBER , SHEET_NAME , VARIANT_NAME , VARIANT_DESCRIPTION ,
  REG_USER , COMPANY_NAME , CURRENT_USER , DATE ,
  TIME , MACHINE_NAME , FROM_FILE , DISTANCE ,
  UNITS_SHORT , UNITS_ABBREV , UNITS_FULL , HYPERLINK ,
  NONE
}
 These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NAME][FIELD_VALUE]>. More...
 
enum class  RESOLUTION { HUNDREDTH_MICRON }
 
enum class  LINESTYLE {
  SOLID , DASH , DASHDOT , DASHDOTDOT ,
  DOT
}
 
enum class  VERTEX_TYPE {
  POINT , CLOCKWISE_ARC , CLOCKWISE_SEMICIRCLE , ANTICLOCKWISE_ARC ,
  ANTICLOCKWISE_SEMICIRCLE
}
 
enum class  SHAPE_TYPE { OPENSHAPE , OUTLINE , SOLID , HATCHED }
 
enum class  UNITS {
  DESIGN , THOU , INCH , MICROMETRE ,
  MM , CENTIMETER , METER
}
 
enum class  ANGUNITS { DEGREES , RADIANS }
 
enum class  GRID_TYPE { FRACTIONALGRID , STEPGRID }
 
enum class  ALIGNMENT {
  NO_ALIGNMENT , TOPLEFT , TOPCENTER , TOPRIGHT ,
  CENTERLEFT , CENTERCENTER , CENTERRIGHT , BOTTOMLEFT ,
  BOTTOMCENTER , BOTTOMRIGHT
}
 From CADSTAR Help: "Text Alignment enables you to define the position of an alignment origin for all text items in CADSTAR. More...
 
enum class  JUSTIFICATION { LEFT , CENTER , RIGHT }
 From CADSTAR Help: "Multi Line Text can also be justified as Left, Centre or Right. More...
 
enum class  READABILITY { BOTTOM_TO_TOP , TOP_TO_BOTTOM }
 Sets the readability direction of text. More...
 
enum class  ATTROWNER {
  ALL_ITEMS , AREA , BOARD , COMPONENT ,
  CONNECTION , COPPER , DOCSYMBOL , FIGURE ,
  NET , NETCLASS , PART , PART_DEFINITION ,
  PIN , SIGNALREF , SYMBOL , SYMDEF ,
  TEMPLATE , TESTPOINT
}
 
enum class  ATTRUSAGE {
  BOTH , COMPONENT , PART_DEFINITION , PART_LIBRARY ,
  SYMBOL , UNDEFINED
}
 
enum class  SWAP_RULE { NO_SWAP , USE_SWAP_LAYER , BOTH }
 Corresponds to "Display when" Item property. More...
 
typedef wxString LINECODE_ID
 
typedef wxString HATCHCODE_ID
 
typedef wxString ROUTECODE_ID
 
typedef wxString NETCLASS_ID
 
typedef wxString SPACING_CLASS_ID
 
typedef wxString TEXTCODE_ID
 
typedef wxString LAYER_ID
 ID of a Sheet (if schematic) or board Layer (if PCB) More...
 
typedef wxString VARIANT_ID
 
typedef wxString ATTRIBUTE_ID
 
typedef wxString SYMDEF_ID
 
typedef wxString PART_ID
 
typedef wxString GATE_ID
 
typedef long TERMINAL_ID
 Terminal is the pin identifier in the schematic. More...
 
typedef long PART_DEFINITION_PIN_ID
 Pin identifier in the part definition. More...
 
typedef long PART_PIN_ID
 Pin identifier in the part. More...
 
typedef wxString TEXT_ID
 
typedef wxString FIGURE_ID
 
typedef wxString GROUP_ID
 
typedef wxString REUSEBLOCK_ID
 
typedef wxString NET_ID
 
typedef wxString NETELEMENT_ID
 
typedef wxString DOCUMENTATION_SYMBOL_ID
 
typedef wxString COLOR_ID
 

Public Member Functions

 CADSTAR_ARCHIVE_PARSER ()
 

Static Public Member Functions

static wxString ParseTextFields (const wxString &aTextString, PARSER_CONTEXT *aParserContext)
 Replaces CADSTAR fields for the equivalent in KiCad and stores the field values in aParserContext. More...
 
static UNITS ParseUnits (XNODE *aNode)
 
static ANGUNITS ParseAngunits (XNODE *aNode)
 
static ALIGNMENT ParseAlignment (XNODE *aNode)
 
static JUSTIFICATION ParseJustification (XNODE *aNode)
 
static READABILITY ParseReadability (XNODE *aNode)
 
static SWAP_RULE ParseSwapRule (XNODE *aNode)
 
static void InsertAttributeAtEnd (XNODE *aNode, wxString aValue)
 
static XNODELoadArchiveFile (const wxString &aFileName, const wxString &aFileTypeIdentifier, PROGRESS_REPORTER *aProgressReporter=nullptr)
 Reads a CADSTAR Archive file (S-parameter format) More...
 
static bool IsValidAttribute (wxXmlAttribute *aAttribute)
 
static wxString GetXmlAttributeIDString (XNODE *aNode, unsigned int aID, bool aIsRequired=true)
 
static long GetXmlAttributeIDLong (XNODE *aNode, unsigned int aID, bool aIsRequired=true)
 
static void CheckNoChildNodes (XNODE *aNode)
 
static void CheckNoNextNodes (XNODE *aNode)
 
static void ParseChildEValue (XNODE *aNode, PARSER_CONTEXT *aContext, EVALUE &aValueToParse)
 
static std::vector< POINTParseAllChildPoints (XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false, int aExpectedNumPoints=UNDEFINED_VALUE)
 if no children are present, it just returns an empty vector (without throwing an exception) More...
 
static std::vector< VERTEXParseAllChildVertices (XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false)
 if no children are present, it just returns an empty vector (without throwing an exception) More...
 
static std::vector< CUTOUTParseAllChildCutouts (XNODE *aNode, PARSER_CONTEXT *aContext, bool aTestAllChildNodes=false)
 if no children are present, it just returns an empty vector (without throwing an exception) More...
 
static long GetNumberOfChildNodes (XNODE *aNode)
 
static long GetNumberOfStepsForReporting (XNODE *aRootNode, std::vector< wxString > aSubNodeChildrenToCount)
 
static wxString HandleTextOverbar (wxString aCadstarString)
 Convert a string with CADSTAR overbar characters to equivalent in KiCad. More...
 
static void FixTextPositionNoAlignment (EDA_TEXT *aKiCadTextItem)
 Corrects the position of a text element that had NO_ALIGNMENT in CADSTAR. More...
 
static wxString generateLibName (const wxString &aRefName, const wxString &aAlternateName)
 

Static Public Attributes

static const long UNDEFINED_VALUE = -1
 
static const double TXT_HEIGHT_RATIO = ( 24.0 - 5.0 ) / 24.0
 CADSTAR fonts are drawn on a 24x24 integer matrix, where the each axis goes from 0 to 24. More...
 
static const std::map< TEXT_FIELD_NAME, wxString > CADSTAR_TO_KICAD_FIELDS
 Map between CADSTAR fields and KiCad text variables. More...
 
static const long FONT_NORMAL = 400
 
static const long FONT_BOLD = 700
 

Protected Member Functions

void checkPoint ()
 Updates m_progressReporter or throws if user cancelled. More...
 

Protected Attributes

PARSER_CONTEXT m_context
 
PROGRESS_REPORTERm_progressReporter
 

Detailed Description

Helper functions and common structures for CADSTAR PCB and Schematic archive files.

Definition at line 90 of file cadstar_archive_parser.h.

Member Typedef Documentation

◆ ATTRIBUTE_ID

Definition at line 104 of file cadstar_archive_parser.h.

◆ COLOR_ID

Definition at line 118 of file cadstar_archive_parser.h.

◆ DOCUMENTATION_SYMBOL_ID

◆ FIGURE_ID

Definition at line 112 of file cadstar_archive_parser.h.

◆ GATE_ID

Definition at line 107 of file cadstar_archive_parser.h.

◆ GROUP_ID

Definition at line 113 of file cadstar_archive_parser.h.

◆ HATCHCODE_ID

Definition at line 97 of file cadstar_archive_parser.h.

◆ LAYER_ID

ID of a Sheet (if schematic) or board Layer (if PCB)

Definition at line 102 of file cadstar_archive_parser.h.

◆ LINECODE_ID

Definition at line 96 of file cadstar_archive_parser.h.

◆ NET_ID

Definition at line 115 of file cadstar_archive_parser.h.

◆ NETCLASS_ID

Definition at line 99 of file cadstar_archive_parser.h.

◆ NETELEMENT_ID

Definition at line 116 of file cadstar_archive_parser.h.

◆ PART_DEFINITION_PIN_ID

Pin identifier in the part definition.

Definition at line 109 of file cadstar_archive_parser.h.

◆ PART_ID

Definition at line 106 of file cadstar_archive_parser.h.

◆ PART_PIN_ID

Pin identifier in the part.

Definition at line 110 of file cadstar_archive_parser.h.

◆ REUSEBLOCK_ID

Definition at line 114 of file cadstar_archive_parser.h.

◆ ROUTECODE_ID

Definition at line 98 of file cadstar_archive_parser.h.

◆ SPACING_CLASS_ID

Definition at line 100 of file cadstar_archive_parser.h.

◆ SYMDEF_ID

Definition at line 105 of file cadstar_archive_parser.h.

◆ TERMINAL_ID

Terminal is the pin identifier in the schematic.

Definition at line 108 of file cadstar_archive_parser.h.

◆ TEXT_ID

Definition at line 111 of file cadstar_archive_parser.h.

◆ TEXTCODE_ID

Definition at line 101 of file cadstar_archive_parser.h.

◆ VARIANT_ID

Definition at line 103 of file cadstar_archive_parser.h.

Member Enumeration Documentation

◆ ALIGNMENT

From CADSTAR Help: "Text Alignment enables you to define the position of an alignment origin for all text items in CADSTAR.

The alignment origin is a point on or within the text boundary and defines how the text is displayed.

For example, with an alignment of bottom-right the origin will be positioned at the bottom right of the text boundary. This makes it easier to right-align several text items regardless of the length of text displayed.

Text Alignment applies to all CADSTAR text. [...]

Note: Unaligned text operates in the way CADSTAR text always has. In most cases this behaves as Bottom Left alignment, but there are a few exceptions, e.g. pin names. Also unaligned multiline text has an origin Bottom Left of the first line."

See also JUSTIFICATION

Enumerator
NO_ALIGNMENT 

NO_ALIGNMENT has different meaning depending on the object type.

TOPLEFT 
TOPCENTER 
TOPRIGHT 
CENTERLEFT 
CENTERCENTER 
CENTERRIGHT 
BOTTOMLEFT 
BOTTOMCENTER 
BOTTOMRIGHT 

Definition at line 601 of file cadstar_archive_parser.h.

602 {
603 NO_ALIGNMENT,
604 TOPLEFT,
605 TOPCENTER,
606 TOPRIGHT,
607 CENTERLEFT,
608 CENTERCENTER,
609 CENTERRIGHT,
610 BOTTOMLEFT,
611 BOTTOMCENTER,
612 BOTTOMRIGHT
613 };

◆ ANGUNITS

Enumerator
DEGREES 
RADIANS 

Definition at line 511 of file cadstar_archive_parser.h.

512 {
513 DEGREES,
514 RADIANS
515 };

◆ ATTROWNER

Enumerator
ALL_ITEMS 
AREA 
BOARD 
COMPONENT 
CONNECTION 
COPPER 
DOCSYMBOL 
FIGURE 
NET 
NETCLASS 
PART 

Only library Attributes.

PART_DEFINITION 

Only library Attributes.

PIN 
SIGNALREF 
SYMBOL 
SYMDEF 
TEMPLATE 
TESTPOINT 

Definition at line 655 of file cadstar_archive_parser.h.

656 {
657 ALL_ITEMS,
658 AREA,
659 BOARD,
660 COMPONENT,
661 CONNECTION,
662 COPPER,
663 DOCSYMBOL,
664 FIGURE,
665 NET,
666 NETCLASS,
667 PART,
668 PART_DEFINITION,
669 PIN,
670 SIGNALREF,
671 SYMBOL,
672 SYMDEF,
673 TEMPLATE,
675 };
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:265
Store all of the related footprint information found in a netlist.
Definition: pcb_netlist.h:85
A collection of nets and the parameters used to route or test these nets.
Definition: netclass.h:47
@ TESTPOINT
a test point pad
@ NET
This item represents a net.

◆ ATTRUSAGE

Enumerator
BOTH 

From CADSTAR Help: Assigned to both Schematic symbols and PCB components, and displayed on Schematic and PCB designs.

COMPONENT 

From CADSTAR Help: Assigned to PCB components and displayed on PCB designs.

PART_DEFINITION 

From CADSTAR Help: Assigned to Parts library Definitions and displayed by the Library searcher.

PART_LIBRARY 

From CADSTAR Help: Only used by non-Cadstar applications.

SYMBOL 

From CADSTAR Help: Assigned to Schematic Symbols and displayed on Schematic Designs.

UNDEFINED 

Note: It seems that some attribute have no "ATTRUSAGE" defined.

It appears that the attributes that fall under this category are the ones associated with the design itself (i.e. not inherited from the library)

Definition at line 678 of file cadstar_archive_parser.h.

679 {
680 BOTH,
682 COMPONENT,
683 PART_DEFINITION,
685 PART_LIBRARY,
686 SYMBOL,
688 UNDEFINED
691 };

◆ GRID_TYPE

Enumerator
FRACTIONALGRID 

Param1 = Units, Param2 = Divisor.

The grid is equal in X and Y dimensions with a step size equal to Param1/Param2

STEPGRID 

Param1 = X Step, Param2 = Y Step. A standard x,y grid.

Definition at line 521 of file cadstar_archive_parser.h.

522 {
523 FRACTIONALGRID,
525 STEPGRID
526 };

◆ JUSTIFICATION

From CADSTAR Help: "Multi Line Text can also be justified as Left, Centre or Right.

This does not affect the text alignment. Note: Justification of single line text has no effect."

This only affects multiline text

See also ALIGNMENT

Enumerator
LEFT 
CENTER 
RIGHT 

Definition at line 627 of file cadstar_archive_parser.h.

◆ LINESTYLE

Enumerator
SOLID 
DASH 
DASHDOT 
DASHDOTDOT 
DOT 

Definition at line 284 of file cadstar_archive_parser.h.

◆ READABILITY

Sets the readability direction of text.

From CADSTAR Help: "Horizontal text will always be displayed from left to right (i.e. never upside down). Vertical text can be set as readable from either the left or right edge of the design."

I.e. Vertical text can either be rotated 90 degrees clockwise or 90 degrees anticlockwise from horizontal. This does not impact vertical text

Enumerator
BOTTOM_TO_TOP 

When text is vertical, show it rotated 90 degrees anticlockwise.

TOP_TO_BOTTOM 

When text is vertical, show it rotated 90 degrees clockwise.

Definition at line 645 of file cadstar_archive_parser.h.

646 {
647 BOTTOM_TO_TOP,
648 TOP_TO_BOTTOM
649 };

◆ RESOLUTION

Enumerator
HUNDREDTH_MICRON 

Definition at line 246 of file cadstar_archive_parser.h.

247 {
248 HUNDREDTH_MICRON
249 };

◆ SHAPE_TYPE

Enumerator
OPENSHAPE 

Unfilled open shape. Cannot have cutouts.

OUTLINE 

Unfilled closed shape.

SOLID 

Filled closed shape (solid fill).

HATCHED 

Filled closed shape (hatch fill).

Definition at line 467 of file cadstar_archive_parser.h.

468 {
469 OPENSHAPE,
470 OUTLINE,
471 SOLID,
472 HATCHED
473 };

◆ SWAP_RULE

Corresponds to "Display when" Item property.

From CADSTAR Help: "This parameter enables you to make the visibility of a component outline/area (or an area of component copper, or a string of component text) dependent on the current mirror status of the component. For example, you may require a string of component text to be displayed only when the component is mirrored."

Enumerator
NO_SWAP 

Display when Unmirrored.

USE_SWAP_LAYER 

Display when Mirrored.

BOTH 

Always display (Mirrored and Unmirrored)

Definition at line 835 of file cadstar_archive_parser.h.

836 {
837 NO_SWAP,
838 USE_SWAP_LAYER,
839 BOTH
840 };

◆ TEXT_FIELD_NAME

These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NAME][FIELD_VALUE]>.

For example: "<@DESIGN TITLEProject [email protected]>"

Enumerator
DESIGN_TITLE 
SHORT_JOBNAME 
LONG_JOBNAME 
NUM_OF_SHEETS 
SHEET_NUMBER 
SHEET_NAME 
VARIANT_NAME 
VARIANT_DESCRIPTION 
REG_USER 
COMPANY_NAME 
CURRENT_USER 
DATE 
TIME 
MACHINE_NAME 
FROM_FILE 
DISTANCE 
UNITS_SHORT 
UNITS_ABBREV 
UNITS_FULL 
HYPERLINK 
NONE 

Synthetic for flagging.

Definition at line 139 of file cadstar_archive_parser.h.

140 {
141 DESIGN_TITLE,
142 SHORT_JOBNAME,
143 LONG_JOBNAME,
144 NUM_OF_SHEETS,
145 SHEET_NUMBER,
147 VARIANT_NAME,
148 VARIANT_DESCRIPTION,
149 REG_USER,
150 COMPANY_NAME,
151 CURRENT_USER,
152 DATE,
153 TIME,
154 MACHINE_NAME,
155 FROM_FILE,
156 DISTANCE,
157 UNITS_SHORT,
158 UNITS_ABBREV,
159 UNITS_FULL,
160 HYPERLINK,
161 NONE
162 };
@ NONE
Definition: kibis.h:53

◆ UNITS

enum class CADSTAR_ARCHIVE_PARSER::UNITS
strong
Enumerator
DESIGN 

Inherits from design units (assumed Assignments->Technology->Units)

THOU 
INCH 
MICROMETRE 
MM 
CENTIMETER 
METER 

Definition at line 496 of file cadstar_archive_parser.h.

497 {
498 DESIGN,
499 THOU,
500 INCH,
501 MICROMETRE,
502 MM,
504 METER
505 };
@ INCH
Definition: rs274x.cpp:64

◆ VERTEX_TYPE

Enumerator
POINT 
CLOCKWISE_ARC 
CLOCKWISE_SEMICIRCLE 
ANTICLOCKWISE_ARC 
ANTICLOCKWISE_SEMICIRCLE 

Definition at line 425 of file cadstar_archive_parser.h.

426 {
427 POINT,
428 CLOCKWISE_ARC,
429 CLOCKWISE_SEMICIRCLE,
430 ANTICLOCKWISE_ARC,
431 ANTICLOCKWISE_SEMICIRCLE
432 };

Constructor & Destructor Documentation

◆ CADSTAR_ARCHIVE_PARSER()

CADSTAR_ARCHIVE_PARSER::CADSTAR_ARCHIVE_PARSER ( )
inline

Definition at line 93 of file cadstar_archive_parser.h.

93{ m_progressReporter = nullptr; }
PROGRESS_REPORTER * m_progressReporter

References m_progressReporter.

Member Function Documentation

◆ CheckNoChildNodes()

◆ CheckNoNextNodes()

void CADSTAR_ARCHIVE_PARSER::CheckNoNextNodes ( XNODE aNode)
static

◆ checkPoint()

void CADSTAR_ARCHIVE_PARSER::checkPoint ( )
protected

Updates m_progressReporter or throws if user cancelled.

Definition at line 2744 of file cadstar_archive_parser.cpp.

2745{
2746 if( m_progressReporter )
2747 {
2749
2751 THROW_IO_ERROR( _( "File import cancelled by user." ) );
2752 }
2753}
virtual bool KeepRefreshing(bool aWait=false)=0
Update the UI (if any).
virtual void AdvanceProgress()=0
Increment the progress bar length (inside the current virtual zone).
#define _(s)
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38

References _, PROGRESS_REPORTER::AdvanceProgress(), PROGRESS_REPORTER::KeepRefreshing(), m_progressReporter, and THROW_IO_ERROR.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::calculateZonePriorities(), CADSTAR_SCH_ARCHIVE_LOADER::Load(), CADSTAR_PCB_ARCHIVE_LOADER::loadCoppers(), CADSTAR_SCH_ARCHIVE_LOADER::loadPartsLibrary(), CADSTAR_SCH_ARCHIVE_PARSER::Parse(), and CADSTAR_PCB_ARCHIVE_PARSER::Parse().

◆ FixTextPositionNoAlignment()

void CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment ( EDA_TEXT aKiCadTextItem)
static

Corrects the position of a text element that had NO_ALIGNMENT in CADSTAR.

Assumes that the provided text element has been initialised with a position and orientation.

Parameters
aKiCadTextItema Kicad item to correct

Definition at line 2717 of file cadstar_archive_parser.cpp.

2718{
2719 if( !aKiCadTextItem->GetText().IsEmpty() )
2720 {
2721 VECTOR2I positionOffset( 0, aKiCadTextItem->GetInterline() );
2722 RotatePoint( positionOffset, aKiCadTextItem->GetTextAngle() );
2723
2724 EDA_ITEM* textEdaItem = dynamic_cast<EDA_ITEM*>( aKiCadTextItem );
2725
2726 if( textEdaItem &&
2727 ( textEdaItem->Type() == LIB_TEXT_T || textEdaItem->Type() == LIB_FIELD_T ) )
2728 {
2729 // Y coordinate increases upwards in the symbol editor
2730 positionOffset.y = -positionOffset.y;
2731 }
2732
2733 //Count num of additional lines
2734 wxString text = aKiCadTextItem->GetText();
2735 int numExtraLines = text.Replace( "\n", "\n" );
2736 numExtraLines -= text.at( text.size() - 1 ) == '\n'; // Ignore new line character at end
2737 positionOffset.x *= numExtraLines;
2738 positionOffset.y *= numExtraLines;
2739
2740 aKiCadTextItem->Offset( positionOffset );
2741 }
2742}
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
const EDA_ANGLE & GetTextAngle() const
Definition: eda_text.h:120
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:87
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:497
void Offset(const VECTOR2I &aOffset)
Definition: eda_text.cpp:389
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Definition: trigo.cpp:183
@ LIB_TEXT_T
Definition: typeinfo.h:200
@ LIB_FIELD_T
Definition: typeinfo.h:208

References EDA_TEXT::GetInterline(), EDA_TEXT::GetText(), EDA_TEXT::GetTextAngle(), LIB_FIELD_T, LIB_TEXT_T, EDA_TEXT::Offset(), RotatePoint(), text, EDA_ITEM::Type(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), and CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText().

◆ generateLibName()

static wxString CADSTAR_ARCHIVE_PARSER::generateLibName ( const wxString &  aRefName,
const wxString &  aAlternateName 
)
inlinestatic

Definition at line 1429 of file cadstar_archive_parser.h.

1430 {
1431 return aRefName
1432 + ( ( aAlternateName.size() > 0 ) ? ( wxT( " (" ) + aAlternateName + wxT( ")" ) )
1433 : wxT( "" ) );
1434 }

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary().

◆ GetNumberOfChildNodes()

long CADSTAR_ARCHIVE_PARSER::GetNumberOfChildNodes ( XNODE aNode)
static

Definition at line 2675 of file cadstar_archive_parser.cpp.

2676{
2677 XNODE* childNodes = aNode->GetChildren();
2678 long retval = 0;
2679
2680 for( ; childNodes; childNodes = childNodes->GetNext() )
2681 retval++;
2682
2683 return retval;
2684}
Hold an XML or S-expression element.
Definition: xnode.h:44

References XNODE::GetChildren(), and XNODE::GetNext().

Referenced by GetNumberOfStepsForReporting().

◆ GetNumberOfStepsForReporting()

long CADSTAR_ARCHIVE_PARSER::GetNumberOfStepsForReporting ( XNODE aRootNode,
std::vector< wxString >  aSubNodeChildrenToCount 
)
static

Definition at line 2687 of file cadstar_archive_parser.cpp.

2688{
2689 XNODE* level1Node = aRootNode->GetChildren();
2690 long retval = 0;
2691
2692 for( ; level1Node; level1Node = level1Node->GetNext() )
2693 {
2694 for( wxString childNodeName : aSubNodeChildrenToCount )
2695 {
2696 if( level1Node->GetName() == childNodeName )
2697 retval += GetNumberOfChildNodes( level1Node );
2698 }
2699
2700 retval++;
2701 }
2702
2703 return retval;
2704}
static long GetNumberOfChildNodes(XNODE *aNode)

References XNODE::GetChildren(), XNODE::GetNext(), and GetNumberOfChildNodes().

Referenced by CADSTAR_SCH_ARCHIVE_PARSER::Parse(), and CADSTAR_PCB_ARCHIVE_PARSER::Parse().

◆ GetXmlAttributeIDLong()

long CADSTAR_ARCHIVE_PARSER::GetXmlAttributeIDLong ( XNODE aNode,
unsigned int  aID,
bool  aIsRequired = true 
)
static
Parameters
aNode
aID
aIsRequiredPrevents exception throwing if false.
Returns
returns the value (long) of attribute "attrX" in aNode where 'X' is aID
Exceptions
IO_ERRORif attribute does not exist

Definition at line 2547 of file cadstar_archive_parser.cpp.

2549{
2550 long retVal;
2551 bool success = GetXmlAttributeIDString( aNode, aID, aIsRequired ).ToLong( &retVal );
2552
2553 if( !success )
2554 {
2555 if( aIsRequired )
2556 THROW_PARSING_IO_ERROR( std::to_string( aID ), aNode->GetName() );
2557 else
2558 return UNDEFINED_VALUE;
2559 }
2560
2561 return retVal;
2562}
#define THROW_PARSING_IO_ERROR(param, location)
static const long UNDEFINED_VALUE
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)

References GetXmlAttributeIDString(), THROW_PARSING_IO_ERROR, and UNDEFINED_VALUE.

Referenced by CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::ROUTE_VERTEX::Parse(), CADSTAR_ARCHIVE_PARSER::FORMAT::Parse(), CADSTAR_ARCHIVE_PARSER::HATCH::Parse(), CADSTAR_ARCHIVE_PARSER::FONT::Parse(), CADSTAR_ARCHIVE_PARSER::TEXTCODE::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTEREASSIGN::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTECODE::Parse(), CADSTAR_ARCHIVE_PARSER::POINT::Parse(), CADSTAR_ARCHIVE_PARSER::LONGPOINT::Parse(), CADSTAR_ARCHIVE_PARSER::GRID::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRNAME::COLUMNORDER::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRNAME::COLUMNWIDTH::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT_LOCATION::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCK::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::GATE::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::Parse(), CADSTAR_ARCHIVE_PARSER::PART::PART_PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::Parse(), CADSTAR_ARCHIVE_PARSER::DOCUMENTATION_SYMBOL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINAL_SHAPE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINAL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PIN_NUM_LABEL_LOC::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMATTR::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMPINNAME_LABEL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::PIN_NUM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::SYM_TERM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::BLOCK_TERM::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPERCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::REASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::CADSTAR_PAD_SHAPE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIACODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERPAIR::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPCCLASSSPACE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TECHNOLOGY_SECTION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_PAD::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::ARROW::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::TEXTFORMAT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::EXTENSION_LINE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::LINE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SYMDEF_PCB::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::AREA::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PIN_ATTRIBUTE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADEXCEPTION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::COPPER_TERMINAL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPER::NETREF::COPPER_TERM::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DRILL_TABLE::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), CADSTAR_ARCHIVE_PARSER::SETTINGS::ParseSubNode(), CADSTAR_ARCHIVE_PARSER::ATTRIBUTE_LOCATION::ParseSubNode(), CADSTAR_ARCHIVE_PARSER::SYMDEF::ParseSubNode(), and CADSTAR_ARCHIVE_PARSER::NET::ParseSubNode().

◆ GetXmlAttributeIDString()

wxString CADSTAR_ARCHIVE_PARSER::GetXmlAttributeIDString ( XNODE aNode,
unsigned int  aID,
bool  aIsRequired = true 
)
static
Parameters
aNode
aID
aIsRequiredPrevents exception throwing if false.
Returns
returns the value (wxString) of attribute "attrX" in aNode where 'X' is aID
Exceptions
IO_ERRORif attribute does not exist

Definition at line 2528 of file cadstar_archive_parser.cpp.

2530{
2531 wxString attrName, retVal;
2532 attrName = "attr";
2533 attrName << aID;
2534
2535 if( !aNode->GetAttribute( attrName, &retVal ) )
2536 {
2537 if( aIsRequired )
2538 THROW_MISSING_PARAMETER_IO_ERROR( std::to_string( aID ), aNode->GetName() );
2539 else
2540 return wxEmptyString;
2541 }
2542
2543 return retVal;
2544}
#define THROW_MISSING_PARAMETER_IO_ERROR(param, location)

References THROW_MISSING_PARAMETER_IO_ERROR.

Referenced by CADSTAR_ARCHIVE_PARSER::PART::GetPinType(), GetXmlAttributeIDLong(), CADSTAR_ARCHIVE_PARSER::FORMAT::Parse(), CADSTAR_ARCHIVE_PARSER::TIMESTAMP::Parse(), CADSTAR_ARCHIVE_PARSER::HEADER::Parse(), CADSTAR_ARCHIVE_PARSER::VARIANT::Parse(), CADSTAR_ARCHIVE_PARSER::LINECODE::Parse(), CADSTAR_ARCHIVE_PARSER::HATCHCODE::Parse(), CADSTAR_ARCHIVE_PARSER::FONT::Parse(), CADSTAR_ARCHIVE_PARSER::TEXTCODE::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTEREASSIGN::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTECODE::Parse(), CADSTAR_ARCHIVE_PARSER::EVALUE::Parse(), CADSTAR_ARCHIVE_PARSER::SHAPE::Parse(), CADSTAR_ARCHIVE_PARSER::GRID::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRNAME::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRIBUTE_VALUE::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT_LOCATION::Parse(), CADSTAR_ARCHIVE_PARSER::CADSTAR_NETCLASS::Parse(), CADSTAR_ARCHIVE_PARSER::SPCCLASSNAME::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCK::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCKREF::Parse(), CADSTAR_ARCHIVE_PARSER::GROUP::Parse(), CADSTAR_ARCHIVE_PARSER::FIGURE::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::GATE::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::SWAP_GROUP::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::Parse(), CADSTAR_ARCHIVE_PARSER::PART::PART_PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::Parse(), CADSTAR_ARCHIVE_PARSER::DOCUMENTATION_SYMBOL::Parse(), CADSTAR_ARCHIVE_PARSER::DFLTSETTINGS::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRCOL::Parse(), CADSTAR_ARCHIVE_PARSER::PARTNAMECOL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINALCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINAL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PIN_NUM_LABEL_LOC::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SHEETS::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::COMP::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PARTREF::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMPINNAME_LABEL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOLVARIANT::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SIGNALREFERENCELINK::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SIGLOC::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::BUS::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::BLOCK::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::JUNCTION_SCH::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::SYM_TERM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::BUS_TERM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::BLOCK_TERM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::DANGLER::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::CONNECTION_SCH::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::MATERIAL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERDEFS::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPERCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::REASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIAREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIACODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERPAIR::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPCCLASSSPACE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::RULESET::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_COPPER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_AREA::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_PAD::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::ARROW::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::TEXTFORMAT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::EXTENSION_LINE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::LINE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::CADSTAR_BOARD::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::AREA::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADEXCEPTION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TRUNK::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::JUNCTION_PCB::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::VIA::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::COPPER_TERMINAL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::ROUTE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::CONNECTION_PCB::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPER::NETREF::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DRILL_TABLE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYOUT::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), ParseAlignment(), ParseAngunits(), CADSTAR_ARCHIVE_PARSER::ATTRIBUTE_LOCATION::ParseIdentifiers(), CADSTAR_ARCHIVE_PARSER::SYMDEF::ParseIdentifiers(), CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::ParseIdentifiers(), CADSTAR_ARCHIVE_PARSER::NET::CONNECTION::ParseIdentifiers(), CADSTAR_ARCHIVE_PARSER::NET::ParseIdentifiers(), ParseJustification(), ParseReadability(), CADSTAR_ARCHIVE_PARSER::NET::JUNCTION::ParseSubNode(), CADSTAR_ARCHIVE_PARSER::NET::CONNECTION::ParseSubNode(), CADSTAR_ARCHIVE_PARSER::NET::ParseSubNode(), ParseSwapRule(), CADSTAR_PCB_ARCHIVE_PARSER::ParseTestlandSide(), and ParseUnits().

◆ HandleTextOverbar()

wxString CADSTAR_ARCHIVE_PARSER::HandleTextOverbar ( wxString  aCadstarString)
static

Convert a string with CADSTAR overbar characters to equivalent in KiCad.

Parameters
aCadstarStringInput string
Returns
KiCad string with overbar characters

Definition at line 2707 of file cadstar_archive_parser.cpp.

2708{
2709 wxString escapedText = aCadstarString;
2710
2711 escapedText.Replace( wxT( "'" ), wxT( "~" ) );
2712
2713 return ConvertToNewOverbarNotation( escapedText );
2714}
wxString ConvertToNewOverbarNotation(const wxString &aOldStr)
Convert the old ~...~ overbar notation to the new ~{...} one.

References ConvertToNewOverbarNotation().

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), CADSTAR_SCH_ARCHIVE_LOADER::loadBusses(), CADSTAR_SCH_ARCHIVE_LOADER::loadNets(), CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbol(), and CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary().

◆ InsertAttributeAtEnd()

void CADSTAR_ARCHIVE_PARSER::InsertAttributeAtEnd ( XNODE aNode,
wxString  aValue 
)
static

Definition at line 2397 of file cadstar_archive_parser.cpp.

2398{
2399 wxString result;
2400 int numAttributes = 0;
2401
2402 if( aNode->GetAttribute( wxT( "numAttributes" ), &result ) )
2403 {
2404 numAttributes = wxAtoi( result );
2405 aNode->DeleteAttribute( wxT( "numAttributes" ) );
2406 ++numAttributes;
2407 }
2408
2409 aNode->AddAttribute( wxT( "numAttributes" ), wxString::Format( wxT( "%i" ), numAttributes ) );
2410
2411 wxString paramName = wxT( "attr" );
2412 paramName << numAttributes;
2413
2414 aNode->AddAttribute( paramName, aValue );
2415}
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References Format().

Referenced by LoadArchiveFile().

◆ IsValidAttribute()

◆ LoadArchiveFile()

XNODE * CADSTAR_ARCHIVE_PARSER::LoadArchiveFile ( const wxString &  aFileName,
const wxString &  aFileTypeIdentifier,
PROGRESS_REPORTER aProgressReporter = nullptr 
)
static

Reads a CADSTAR Archive file (S-parameter format)

Parameters
aFileName
aFileTypeIdentifierIdentifier of the first node in the file to check against. E.g. "CADSTARPCB"
aProgressReporterPointer to a Progress Reporter to report progress to.
Returns
XNODE pointing to the top of the tree for further parsing. Each node has the first element as the node's name and subsequent elements as node attributes ("attr0", "attr1", "attr2", etc.). Caller is responsible for deleting to avoid memory leaks.
Exceptions
IO_ERROR

Definition at line 2418 of file cadstar_archive_parser.cpp.

2420{
2421 KEYWORD emptyKeywords[1] = {};
2422 XNODE * iNode = nullptr, *cNode = nullptr;
2423 int tok;
2424 bool cadstarFileCheckDone = false;
2425 wxString str;
2426 wxCSConv win1252( wxT( "windows-1252" ) );
2427 wxMBConv* conv = &win1252; // Initial testing suggests file encoding to be Windows-1252
2428 // More samples required.
2429
2430 // Open the file and get the file size
2431 FILE* fp = wxFopen( aFileName, wxT( "rt" ) );
2432
2433 if( !fp )
2434 THROW_IO_ERROR( wxString::Format( _( "Cannot open file '%s'" ), aFileName ) );
2435
2436 fseek( fp, 0L, SEEK_END );
2437 long fileSize = ftell( fp );
2438 rewind( fp );
2439
2440 DSNLEXER lexer( emptyKeywords, 0, nullptr, fp, aFileName );
2441
2442 auto currentProgress = [&]() -> double
2443 {
2444 return static_cast<double>( ftell( fp ) ) / fileSize;
2445 };
2446
2447 double previousReportedProgress = -1.0;
2448
2449 while( ( tok = lexer.NextTok() ) != DSN_EOF )
2450 {
2451 if( aProgressReporter && ( currentProgress() - previousReportedProgress ) > 0.01 )
2452 {
2453 if( !aProgressReporter->KeepRefreshing() )
2454 THROW_IO_ERROR( _( "File import cancelled by user." ) );
2455
2456 aProgressReporter->SetCurrentProgress( currentProgress() );
2457 previousReportedProgress = currentProgress();
2458 }
2459
2460 if( tok == DSN_RIGHT )
2461 {
2462 cNode = iNode;
2463 if( cNode )
2464 {
2465 iNode = cNode->GetParent();
2466 }
2467 else
2468 {
2469 //too many closing brackets
2470 THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2471 }
2472 }
2473 else if( tok == DSN_LEFT )
2474 {
2475 tok = lexer.NextTok();
2476 str = wxString( lexer.CurText(), *conv );
2477 cNode = new XNODE( wxXML_ELEMENT_NODE, str );
2478
2479 if( iNode )
2480 {
2481 //we will add it as attribute as well as child node
2482 InsertAttributeAtEnd( iNode, str );
2483 iNode->AddChild( cNode );
2484 }
2485 else if( !cadstarFileCheckDone )
2486 {
2487 if( cNode->GetName() != aFileTypeIdentifier )
2488 THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2489
2490 cadstarFileCheckDone = true;
2491 }
2492
2493 iNode = cNode;
2494 }
2495 else if( iNode )
2496 {
2497 str = wxString( lexer.CurText(), *conv );
2498 //Insert even if string is empty
2499 InsertAttributeAtEnd( iNode, str );
2500 }
2501 else
2502 {
2503 //not enough closing brackets
2504 THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2505 }
2506 }
2507
2508 // Not enough closing brackets
2509 if( iNode != nullptr )
2510 THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2511
2512 // Throw if no data was parsed
2513 if( cNode )
2514 return cNode;
2515 else
2516 THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2517
2518 return nullptr;
2519}
static void InsertAttributeAtEnd(XNODE *aNode, wxString aValue)
Implement a lexical analyzer for the SPECCTRA DSN file format.
Definition: dsnlexer.h:79
virtual void SetCurrentProgress(double aProgress)=0
Set the progress value to aProgress (0..1).
@ DSN_LEFT
Definition: dsnlexer.h:67
@ DSN_RIGHT
Definition: dsnlexer.h:66
@ DSN_EOF
Definition: dsnlexer.h:69
Hold a keyword string and its unique integer token.
Definition: dsnlexer.h:40

References _, DSNLEXER::CurText(), DSN_EOF, DSN_LEFT, DSN_RIGHT, Format(), XNODE::GetParent(), InsertAttributeAtEnd(), PROGRESS_REPORTER::KeepRefreshing(), DSNLEXER::NextTok(), PROGRESS_REPORTER::SetCurrentProgress(), and THROW_IO_ERROR.

Referenced by CADSTAR_SCH_ARCHIVE_PARSER::Parse(), and CADSTAR_PCB_ARCHIVE_PARSER::Parse().

◆ ParseAlignment()

CADSTAR_ARCHIVE_PARSER::ALIGNMENT CADSTAR_ARCHIVE_PARSER::ParseAlignment ( XNODE aNode)
static

Definition at line 1033 of file cadstar_archive_parser.cpp.

1034{
1035 wxASSERT( aNode->GetName() == wxT( "ALIGN" ) );
1036
1037 wxString alignmentStr = GetXmlAttributeIDString( aNode, 0 );
1038
1039 if( alignmentStr == wxT( "BOTTOMCENTER" ) )
1041 else if( alignmentStr == wxT( "BOTTOMLEFT" ) )
1042 return ALIGNMENT::BOTTOMLEFT;
1043 else if( alignmentStr == wxT( "BOTTOMRIGHT" ) )
1045 else if( alignmentStr == wxT( "CENTERCENTER" ) )
1047 else if( alignmentStr == wxT( "CENTERLEFT" ) )
1048 return ALIGNMENT::CENTERLEFT;
1049 else if( alignmentStr == wxT( "CENTERRIGHT" ) )
1051 else if( alignmentStr == wxT( "TOPCENTER" ) )
1052 return ALIGNMENT::TOPCENTER;
1053 else if( alignmentStr == wxT( "TOPLEFT" ) )
1054 return ALIGNMENT::TOPLEFT;
1055 else if( alignmentStr == wxT( "TOPRIGHT" ) )
1056 return ALIGNMENT::TOPRIGHT;
1057 else
1058 THROW_UNKNOWN_PARAMETER_IO_ERROR( alignmentStr, wxT( "ALIGN" ) );
1059
1060 //shouldn't be here but avoids compiler warning
1062}
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)
@ NO_ALIGNMENT
NO_ALIGNMENT has different meaning depending on the object type.

References BOTTOMCENTER, BOTTOMLEFT, BOTTOMRIGHT, CENTERCENTER, CENTERLEFT, CENTERRIGHT, GetXmlAttributeIDString(), NO_ALIGNMENT, THROW_UNKNOWN_PARAMETER_IO_ERROR, TOPCENTER, TOPLEFT, and TOPRIGHT.

Referenced by CADSTAR_ARCHIVE_PARSER::TEXT_LOCATION::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), and CADSTAR_ARCHIVE_PARSER::ATTRIBUTE_LOCATION::ParseSubNode().

◆ ParseAllChildCutouts()

std::vector< CADSTAR_ARCHIVE_PARSER::CUTOUT > CADSTAR_ARCHIVE_PARSER::ParseAllChildCutouts ( XNODE aNode,
PARSER_CONTEXT aContext,
bool  aTestAllChildNodes = false 
)
static

if no children are present, it just returns an empty vector (without throwing an exception)

Parameters
aNodecontaining a series of CUTOUT objects
aTestAllChildNodes
aExpectedNumPointsif -1, this is check is disabled
Returns
std::vector containing all CUTOUT objects
Exceptions
IO_ERRORif one of the following:
  • Unable to parse a CUTOUT object
  • aTestAllChildNodes is true and one of the child nodes is not a valid CUTOUT object

Definition at line 2649 of file cadstar_archive_parser.cpp.

2651{
2652 std::vector<CUTOUT> retVal;
2653
2654 XNODE* cNode = aNode->GetChildren();
2655
2656 for( ; cNode; cNode = cNode->GetNext() )
2657 {
2658 if( cNode->GetName() == wxT( "CUTOUT" ) )
2659 {
2660 CUTOUT cutout;
2661 //TODO try.. catch + throw again with more detailed error information
2662 cutout.Parse( cNode, aContext );
2663 retVal.push_back( cutout );
2664 }
2665 else if( aTestAllChildNodes )
2666 {
2667 THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2668 }
2669 }
2670
2671 return retVal;
2672}
@ CUTOUT
Make a cutout to an existing zone.

References XNODE::GetChildren(), XNODE::GetNext(), CADSTAR_ARCHIVE_PARSER::CUTOUT::Parse(), and THROW_UNKNOWN_NODE_IO_ERROR.

Referenced by CADSTAR_ARCHIVE_PARSER::SHAPE::Parse().

◆ ParseAllChildPoints()

std::vector< CADSTAR_ARCHIVE_PARSER::POINT > CADSTAR_ARCHIVE_PARSER::ParseAllChildPoints ( XNODE aNode,
PARSER_CONTEXT aContext,
bool  aTestAllChildNodes = false,
int  aExpectedNumPoints = UNDEFINED_VALUE 
)
static

if no children are present, it just returns an empty vector (without throwing an exception)

Parameters
aNodecontaining a series of POINT objects
aTestAllChildNodes
aExpectedNumPointsif UNDEFINED_VALUE (i.e. -1), this is check is disabled
Returns
std::vector containing all POINT objects
Exceptions
IO_ERRORif one of the following:
  • Unable to parse a POINT object
  • aTestAllChildNodes is true and one of the child nodes is not a valid POINT object
  • aExpectedNumPoints is non-negative and the number of POINT objects found is different

Definition at line 2589 of file cadstar_archive_parser.cpp.

2591{
2592 std::vector<POINT> retVal;
2593
2594 XNODE* cNode = aNode->GetChildren();
2595
2596 for( ; cNode; cNode = cNode->GetNext() )
2597 {
2598 if( cNode->GetName() == wxT( "PT" ) )
2599 {
2600 POINT pt;
2601 //TODO try.. catch + throw again with more detailed error information
2602 pt.Parse( cNode, aContext );
2603 retVal.push_back( pt );
2604 }
2605 else if( aTestAllChildNodes )
2606 {
2607 THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2608 }
2609 }
2610
2611 if( aExpectedNumPoints != UNDEFINED_VALUE
2612 && retVal.size() != static_cast<size_t>( aExpectedNumPoints ) )
2613 {
2615 _( "Unexpected number of points in '%s'. Found %d but expected %d." ),
2616 aNode->GetName(), retVal.size(), aExpectedNumPoints ) );
2617 }
2618
2619 return retVal;
2620}

References _, Format(), XNODE::GetChildren(), XNODE::GetNext(), CADSTAR_ARCHIVE_PARSER::POINT::Parse(), THROW_IO_ERROR, THROW_UNKNOWN_NODE_IO_ERROR, and UNDEFINED_VALUE.

Referenced by CADSTAR_ARCHIVE_PARSER::VERTEX::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::CONNECTION_SCH::Parse(), and CADSTAR_ARCHIVE_PARSER::SETTINGS::ParseSubNode().

◆ ParseAllChildVertices()

std::vector< CADSTAR_ARCHIVE_PARSER::VERTEX > CADSTAR_ARCHIVE_PARSER::ParseAllChildVertices ( XNODE aNode,
PARSER_CONTEXT aContext,
bool  aTestAllChildNodes = false 
)
static

if no children are present, it just returns an empty vector (without throwing an exception)

Parameters
aNodecontaining a series of VERTEX objects
aTestAllChildNodes
aExpectedNumPointsif -1, this is check is disabled
Returns
std::vector containing all VERTEX objects
Exceptions
IO_ERRORif one of the following:
  • Unable to parse a VERTEX object
  • aTestAllChildNodes is true and one of the child nodes is not a valid VERTEX object

Definition at line 2623 of file cadstar_archive_parser.cpp.

2625{
2626 std::vector<VERTEX> retVal;
2627
2628 XNODE* cNode = aNode->GetChildren();
2629
2630 for( ; cNode; cNode = cNode->GetNext() )
2631 {
2632 if( VERTEX::IsVertex( cNode ) )
2633 {
2634 VERTEX vertex;
2635 //TODO try.. catch + throw again with more detailed error information
2636 vertex.Parse( cNode, aContext );
2637 retVal.push_back( vertex );
2638 }
2639 else if( aTestAllChildNodes )
2640 {
2641 THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2642 }
2643 }
2644
2645 return retVal;
2646}

References XNODE::GetChildren(), XNODE::GetNext(), CADSTAR_ARCHIVE_PARSER::VERTEX::IsVertex(), CADSTAR_ARCHIVE_PARSER::VERTEX::Parse(), and THROW_UNKNOWN_NODE_IO_ERROR.

Referenced by CADSTAR_ARCHIVE_PARSER::CUTOUT::Parse(), and CADSTAR_ARCHIVE_PARSER::SHAPE::Parse().

◆ ParseAngunits()

CADSTAR_ARCHIVE_PARSER::ANGUNITS CADSTAR_ARCHIVE_PARSER::ParseAngunits ( XNODE aNode)
static

Definition at line 672 of file cadstar_archive_parser.cpp.

673{
674 wxASSERT( aNode->GetName() == wxT( "ANGUNITS" ) );
675
676 wxString angUnitStr = GetXmlAttributeIDString( aNode, 0 );
677
678 if( angUnitStr == wxT( "DEGREES" ) )
679 return ANGUNITS::DEGREES;
680 else if( angUnitStr == wxT( "RADIANS" ) )
681 return ANGUNITS::RADIANS;
682 else
683 THROW_UNKNOWN_PARAMETER_IO_ERROR( angUnitStr, aNode->GetName() );
684
685 return ANGUNITS();
686}

References DEGREES, GetXmlAttributeIDString(), RADIANS, and THROW_UNKNOWN_PARAMETER_IO_ERROR.

Referenced by CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::Parse().

◆ ParseChildEValue()

void CADSTAR_ARCHIVE_PARSER::ParseChildEValue ( XNODE aNode,
PARSER_CONTEXT aContext,
EVALUE aValueToParse 
)
static
Parameters
aNodewith a child node containing an EVALUE
aValueToParse
Exceptions
IO_ERRORif unable to parse or node is not an EVALUE

Definition at line 2579 of file cadstar_archive_parser.cpp.

2581{
2582 if( aNode->GetChildren()->GetName() == wxT( "E" ) )
2583 aValueToParse.Parse( aNode->GetChildren(), aContext );
2584 else
2585 THROW_UNKNOWN_NODE_IO_ERROR( aNode->GetChildren()->GetName(), aNode->GetName() );
2586}

References XNODE::GetChildren(), CADSTAR_ARCHIVE_PARSER::EVALUE::Parse(), and THROW_UNKNOWN_NODE_IO_ERROR.

Referenced by CADSTAR_PCB_ARCHIVE_PARSER::MATERIAL::Parse().

◆ ParseJustification()

CADSTAR_ARCHIVE_PARSER::JUSTIFICATION CADSTAR_ARCHIVE_PARSER::ParseJustification ( XNODE aNode)
static

Definition at line 1065 of file cadstar_archive_parser.cpp.

1066{
1067 wxASSERT( aNode->GetName() == wxT( "JUSTIFICATION" ) );
1068
1069 wxString justificationStr = GetXmlAttributeIDString( aNode, 0 );
1070
1071 if( justificationStr == wxT( "LEFT" ) )
1072 return JUSTIFICATION::LEFT;
1073 else if( justificationStr == wxT( "RIGHT" ) )
1074 return JUSTIFICATION::RIGHT;
1075 else if( justificationStr == wxT( "CENTER" ) )
1076 return JUSTIFICATION::CENTER;
1077 else
1078 THROW_UNKNOWN_PARAMETER_IO_ERROR( justificationStr, wxT( "JUSTIFICATION" ) );
1079
1080 return JUSTIFICATION::LEFT;
1081}

References CENTER, GetXmlAttributeIDString(), LEFT, RIGHT, and THROW_UNKNOWN_PARAMETER_IO_ERROR.

Referenced by CADSTAR_ARCHIVE_PARSER::TEXT_LOCATION::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), and CADSTAR_ARCHIVE_PARSER::ATTRIBUTE_LOCATION::ParseSubNode().

◆ ParseReadability()

CADSTAR_ARCHIVE_PARSER::READABILITY CADSTAR_ARCHIVE_PARSER::ParseReadability ( XNODE aNode)
static

Definition at line 1084 of file cadstar_archive_parser.cpp.

1085{
1086 wxASSERT( aNode->GetName() == wxT( "READABILITY" ) );
1087
1088 wxString readabilityStr = GetXmlAttributeIDString( aNode, 0 );
1089
1090 if( readabilityStr == wxT( "BOTTOM_TO_TOP" ) )
1092 else if( readabilityStr == wxT( "TOP_TO_BOTTOM" ) )
1094 else
1095 THROW_UNKNOWN_PARAMETER_IO_ERROR( readabilityStr, wxT( "READABILITY" ) );
1096
1098}
@ BOTTOM_TO_TOP
When text is vertical, show it rotated 90 degrees anticlockwise.
@ TOP_TO_BOTTOM
When text is vertical, show it rotated 90 degrees clockwise.

References BOTTOM_TO_TOP, GetXmlAttributeIDString(), THROW_UNKNOWN_PARAMETER_IO_ERROR, and TOP_TO_BOTTOM.

Referenced by CADSTAR_ARCHIVE_PARSER::DOCUMENTATION_SYMBOL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT::Parse(), and CADSTAR_PCB_ARCHIVE_PARSER::DRILL_TABLE::Parse().

◆ ParseSwapRule()

CADSTAR_ARCHIVE_PARSER::SWAP_RULE CADSTAR_ARCHIVE_PARSER::ParseSwapRule ( XNODE aNode)
static

Definition at line 1496 of file cadstar_archive_parser.cpp.

1497{
1498 wxASSERT( aNode->GetName() == wxT( "SWAPRULE" ) );
1499
1500 SWAP_RULE retval;
1501 wxString swapRuleStr = GetXmlAttributeIDString( aNode, 0 );
1502
1503 if( swapRuleStr == wxT( "NO_SWAP" ) )
1504 retval = SWAP_RULE::NO_SWAP;
1505 else if( swapRuleStr == wxT( "USE_SWAP_LAYER" ) )
1507 else
1508 THROW_UNKNOWN_PARAMETER_IO_ERROR( swapRuleStr, wxT( "SWAPRULE" ) );
1509
1510 return retval;
1511}
SWAP_RULE
Corresponds to "Display when" Item property.
@ USE_SWAP_LAYER
Display when Mirrored.
@ NO_SWAP
Display when Unmirrored.

References GetXmlAttributeIDString(), NO_SWAP, THROW_UNKNOWN_PARAMETER_IO_ERROR, and USE_SWAP_LAYER.

Referenced by CADSTAR_ARCHIVE_PARSER::FIGURE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_COPPER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_AREA::Parse(), and CADSTAR_ARCHIVE_PARSER::TEXT::Parse().

◆ ParseTextFields()

wxString CADSTAR_ARCHIVE_PARSER::ParseTextFields ( const wxString &  aTextString,
PARSER_CONTEXT aParserContext 
)
static

Replaces CADSTAR fields for the equivalent in KiCad and stores the field values in aParserContext.

Parameters
aTextStringText string to parse
aParserContextPARSER_CONTEXT in which to store the values of the found fields
Returns

Definition at line 839 of file cadstar_archive_parser.cpp.

841{
842 static const std::map<TEXT_FIELD_NAME, wxString> txtTokens =
843 {
844 { TEXT_FIELD_NAME::DESIGN_TITLE, wxT( "DESIGN TITLE" ) },
845 { TEXT_FIELD_NAME::SHORT_JOBNAME, wxT( "SHORT_JOBNAME" ) },
846 { TEXT_FIELD_NAME::LONG_JOBNAME, wxT( "LONG_JOBNAME" ) },
847 { TEXT_FIELD_NAME::NUM_OF_SHEETS, wxT( "NUM_OF_SHEETS" ) },
848 { TEXT_FIELD_NAME::SHEET_NUMBER, wxT( "SHEET_NUMBER" ) },
849 { TEXT_FIELD_NAME::SHEET_NAME, wxT( "SHEET_NAME" ) },
850 { TEXT_FIELD_NAME::VARIANT_NAME, wxT( "VARIANT_NAME" ) },
851 { TEXT_FIELD_NAME::VARIANT_DESCRIPTION, wxT( "VARIANT_DESCRIPTION" ) },
852 { TEXT_FIELD_NAME::REG_USER, wxT( "REG_USER" ) },
853 { TEXT_FIELD_NAME::COMPANY_NAME, wxT( "COMPANY_NAME" ) },
854 { TEXT_FIELD_NAME::CURRENT_USER, wxT( "CURRENT_USER" ) },
855 { TEXT_FIELD_NAME::DATE, wxT( "DATE" ) },
856 { TEXT_FIELD_NAME::TIME, wxT( "TIME" ) },
857 { TEXT_FIELD_NAME::MACHINE_NAME, wxT( "MACHINE_NAME" ) },
858 { TEXT_FIELD_NAME::FROM_FILE, wxT( "FROM_FILE" ) },
859 { TEXT_FIELD_NAME::DISTANCE, wxT( "DISTANCE" ) },
860 { TEXT_FIELD_NAME::UNITS_SHORT, wxT( "UNITS SHORT" ) },
861 { TEXT_FIELD_NAME::UNITS_ABBREV, wxT( "UNITS ABBREV" ) },
862 { TEXT_FIELD_NAME::UNITS_FULL, wxT( "UNITS FULL" ) },
863 { TEXT_FIELD_NAME::HYPERLINK, wxT( "HYPERLINK" ) }
864 };
865
866 wxString remainingStr = aTextString;
867 wxString returnStr;
868
869 while( remainingStr.size() > 0 )
870 {
871 //Find the start token
872 size_t startpos = remainingStr.Find( wxT( "<@" ) );
873
874 if( static_cast<int>( startpos ) == wxNOT_FOUND )
875 {
876 // No more fields to parse, add to return string
877 returnStr += remainingStr;
878 break;
879 }
880
881 if( startpos > 0 )
882 returnStr += remainingStr.SubString( 0, startpos - 1 );
883
884 if( ( startpos + 2 ) >= remainingStr.size() )
885 break;
886
887 remainingStr = remainingStr.Mid( startpos + 2 );
888
889 //Find the expected token for the field
891
892 for( std::pair<TEXT_FIELD_NAME, wxString> txtF : txtTokens )
893 {
894 if( remainingStr.StartsWith( txtF.second ) )
895 {
896 foundField = txtF.first;
897 break;
898 }
899 }
900
901 if( foundField == TEXT_FIELD_NAME::NONE )
902 {
903 // Not a valid field, lets keep looking
904 returnStr += wxT( "<@" );
905 continue;
906 }
907
908 //Now lets find the end token
909 size_t endpos = remainingStr.Find( wxT( "@>" ) );
910
911 if( static_cast<int>( endpos ) == wxNOT_FOUND )
912 {
913 // The field we found isn't valid as it doesn't have a termination
914 // Lets append the whole thing as plain text
915 returnStr += wxT( "<@" ) + remainingStr;
916 break;
917 }
918
919 size_t valueStart = txtTokens.at( foundField ).size();
920 wxString fieldValue = remainingStr.SubString( valueStart, endpos - 1 );
921 wxString address;
922
923 if( foundField == TEXT_FIELD_NAME::FROM_FILE || foundField == TEXT_FIELD_NAME::HYPERLINK )
924 {
925 // The first character should always be a double quotation mark
926 wxASSERT_MSG( fieldValue.at( 0 ) == '"', "Expected '\"' as the first character" );
927
928 size_t splitPos = fieldValue.find_first_of( '"', 1 );
929 address = fieldValue.SubString( 1, splitPos - 1 );
930
931 if( foundField == TEXT_FIELD_NAME::HYPERLINK )
932 {
933 // Assume the last two characters are "@>"
934 wxASSERT_MSG( remainingStr.EndsWith( wxT( "@>" ) ),
935 "Expected '@>' at the end of a hyperlink" );
936
937 fieldValue = remainingStr.SubString( valueStart + splitPos + 1,
938 remainingStr.Length() - 3 );
939
940 remainingStr = wxEmptyString;
941 }
942 else
943 {
944 fieldValue = fieldValue.Mid( splitPos + 1 );
945 }
946 }
947
948 switch( foundField )
949 {
961
962 if( aContext->TextFieldToValuesMap.find( foundField )
963 != aContext->TextFieldToValuesMap.end() )
964 {
965 aContext->InconsistentTextFields.insert( foundField );
966 }
967 else
968 {
969 aContext->TextFieldToValuesMap.insert( { foundField, fieldValue } );
970 }
971
973
977 returnStr += wxT( "${" ) + CADSTAR_TO_KICAD_FIELDS.at( foundField ) + wxT( "}" );
978 break;
979
984 // Just flatten the text for distances
985 returnStr += fieldValue;
986 break;
987
989 {
990 wxFileName fn( address );
991 wxString fieldFmt = wxT( "FROM_FILE_%s_%s" );
992 wxString fieldName = wxString::Format( fieldFmt, fn.GetName(), fn.GetExt() );
993
994 int version = 1;
995
996 while(
997 aContext->FilenamesToTextMap.find( fieldName )
998 != aContext->FilenamesToTextMap.end()
999 && aContext->FilenamesToTextMap.at( fieldName ) != fieldValue )
1000 {
1001 fieldName = wxString::Format( fieldFmt, fn.GetName(), fn.GetExt() )
1002 + wxString::Format( wxT( "_%d" ), version++ );
1003 }
1004
1005 aContext->FilenamesToTextMap[fieldName] = fieldValue;
1006 returnStr += wxT( "${" ) + fieldName + wxT( "}" );
1007 }
1008 break;
1009
1011 {
1012 aContext->TextToHyperlinksMap[fieldValue] = address;
1013 returnStr += ParseTextFields( fieldValue, aContext );
1014 }
1015 break;
1016
1018 wxFAIL_MSG( "We should have already covered this scenario above" );
1019 break;
1020 }
1021
1022
1023 if( ( endpos + 2 ) >= remainingStr.size() )
1024 break;
1025
1026 remainingStr = remainingStr.Mid( endpos + 2 );
1027 }
1028
1029 return returnStr;
1030}
static const std::map< TEXT_FIELD_NAME, wxString > CADSTAR_TO_KICAD_FIELDS
Map between CADSTAR fields and KiCad text variables.
TEXT_FIELD_NAME
These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NA...
static wxString ParseTextFields(const wxString &aTextString, PARSER_CONTEXT *aParserContext)
Replaces CADSTAR fields for the equivalent in KiCad and stores the field values in aParserContext.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83

References CADSTAR_TO_KICAD_FIELDS, COMPANY_NAME, CURRENT_USER, DATE, DESIGN_TITLE, DISTANCE, CADSTAR_ARCHIVE_PARSER::PARSER_CONTEXT::FilenamesToTextMap, Format(), FROM_FILE, HYPERLINK, CADSTAR_ARCHIVE_PARSER::PARSER_CONTEXT::InconsistentTextFields, KI_FALLTHROUGH, LONG_JOBNAME, MACHINE_NAME, NONE, NUM_OF_SHEETS, ParseTextFields(), REG_USER, SHEET_NAME, SHEET_NUMBER, SHORT_JOBNAME, CADSTAR_ARCHIVE_PARSER::PARSER_CONTEXT::TextFieldToValuesMap, CADSTAR_ARCHIVE_PARSER::PARSER_CONTEXT::TextToHyperlinksMap, TIME, UNITS_ABBREV, UNITS_FULL, UNITS_SHORT, VARIANT_DESCRIPTION, and VARIANT_NAME.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::applyDimensionSettings(), CADSTAR_PCB_ARCHIVE_LOADER::loadDimensions(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), and ParseTextFields().

◆ ParseUnits()

CADSTAR_ARCHIVE_PARSER::UNITS CADSTAR_ARCHIVE_PARSER::ParseUnits ( XNODE aNode)
static

Definition at line 645 of file cadstar_archive_parser.cpp.

646{
647 wxASSERT( aNode->GetName() == wxT( "UNITS" ) );
648
649 wxString unit = GetXmlAttributeIDString( aNode, 0 );
650
651 if( unit == wxT( "CENTIMETER" ) )
652 return UNITS::CENTIMETER;
653 else if( unit == wxT( "INCH" ) )
654 return UNITS::INCH;
655 else if( unit == wxT( "METER" ) )
656 return UNITS::METER;
657 else if( unit == wxT( "MICROMETRE" ) )
658 return UNITS::MICROMETRE;
659 else if( unit == wxT( "MM" ) )
660 return UNITS::MM;
661 else if( unit == wxT( "THOU" ) )
662 return UNITS::THOU;
663 else if( unit == wxT( "DESIGN" ) )
664 return UNITS::DESIGN;
665 else
666 THROW_UNKNOWN_PARAMETER_IO_ERROR( unit, wxT( "UNITS" ) );
667
668 return UNITS();
669}
@ DESIGN
Inherits from design units (assumed Assignments->Technology->Units)

References CENTIMETER, DESIGN, GetXmlAttributeIDString(), INCH, METER, MICROMETRE, MM, THOU, and THROW_UNKNOWN_PARAMETER_IO_ERROR.

Referenced by CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::Parse(), and CADSTAR_ARCHIVE_PARSER::SETTINGS::ParseSubNode().

Member Data Documentation

◆ CADSTAR_TO_KICAD_FIELDS

const std::map< CADSTAR_ARCHIVE_PARSER::TEXT_FIELD_NAME, wxString > CADSTAR_ARCHIVE_PARSER::CADSTAR_TO_KICAD_FIELDS
static
Initial value:
=
{ { TEXT_FIELD_NAME::DESIGN_TITLE, wxT( "DESIGN_TITLE" ) },
{ TEXT_FIELD_NAME::SHORT_JOBNAME, wxT( "SHORT_JOBNAME" ) },
{ TEXT_FIELD_NAME::LONG_JOBNAME, wxT( "LONG_JOBNAME" ) },
{ TEXT_FIELD_NAME::SHEET_NAME, wxT( "SHEETNAME" ) },
{ TEXT_FIELD_NAME::VARIANT_NAME, wxT( "VARIANT_NAME" ) },
{ TEXT_FIELD_NAME::VARIANT_DESCRIPTION, wxT( "VARIANT_DESCRIPTION" ) },
{ TEXT_FIELD_NAME::REG_USER, wxT( "REG_USER" ) },
{ TEXT_FIELD_NAME::COMPANY_NAME, wxT( "COMPANY_NAME" ) },
{ TEXT_FIELD_NAME::CURRENT_USER, wxT( "CURRENT_USER" ) },
{ TEXT_FIELD_NAME::DATE, wxT( "DATE" ) },
{ TEXT_FIELD_NAME::TIME, wxT( "TIME" ) },
{ TEXT_FIELD_NAME::MACHINE_NAME, wxT( "MACHINE_NAME" ) } }

Map between CADSTAR fields and KiCad text variables.

This is used as a lookup table when parsing CADSTAR text fields. Most variables have a similar name in KiCad as in CADSTAR.

Definition at line 168 of file cadstar_archive_parser.h.

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::loadTextVariables(), CADSTAR_PCB_ARCHIVE_LOADER::loadTextVariables(), and ParseTextFields().

◆ FONT_BOLD

const long CADSTAR_ARCHIVE_PARSER::FONT_BOLD = 700
static

◆ FONT_NORMAL

const long CADSTAR_ARCHIVE_PARSER::FONT_NORMAL = 400
static

Definition at line 325 of file cadstar_archive_parser.h.

◆ m_context

◆ m_progressReporter

◆ TXT_HEIGHT_RATIO

const double CADSTAR_ARCHIVE_PARSER::TXT_HEIGHT_RATIO = ( 24.0 - 5.0 ) / 24.0
static

CADSTAR fonts are drawn on a 24x24 integer matrix, where the each axis goes from 0 to 24.

The characters can each specify a width of between 12 and 24, but the height is fixed at 24.

The default CADSTAR font uses y=5 as the starting point for capital letters, leaving space for the tails of letters such as "g", "p", "y", "q", etc.

The font height in CADSTAR corresponds to the full 24 point height. In KiCad it only corresponds to the height above the guide line, meaning the overall text height will be larger in KiCad.

Definition at line 133 of file cadstar_archive_parser.h.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::applyTextCode(), CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), and CADSTAR_SCH_ARCHIVE_LOADER::getTextHeightFromTextCode().

◆ UNDEFINED_VALUE


The documentation for this class was generated from the following files: