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  VARIANT
 < Nodename = "VARIANT" or "VMASTER" (master variant More...
 
struct  VARIANT_HIERARCHY
 
struct  VERTEX
 Represents a vertex in a shape. More...
 

Public Types

enum  TEXT_FIELD_NAME {
  TEXT_FIELD_NAME::DESIGN_TITLE, TEXT_FIELD_NAME::SHORT_JOBNAME, TEXT_FIELD_NAME::LONG_JOBNAME, TEXT_FIELD_NAME::NUM_OF_SHEETS,
  TEXT_FIELD_NAME::SHEET_NUMBER, TEXT_FIELD_NAME::SHEET_NAME, TEXT_FIELD_NAME::VARIANT_NAME, TEXT_FIELD_NAME::VARIANT_DESCRIPTION,
  TEXT_FIELD_NAME::REG_USER, TEXT_FIELD_NAME::COMPANY_NAME, TEXT_FIELD_NAME::CURRENT_USER, TEXT_FIELD_NAME::DATE,
  TEXT_FIELD_NAME::TIME, TEXT_FIELD_NAME::MACHINE_NAME, TEXT_FIELD_NAME::FROM_FILE, TEXT_FIELD_NAME::DISTANCE,
  TEXT_FIELD_NAME::UNITS_SHORT, TEXT_FIELD_NAME::UNITS_ABBREV, TEXT_FIELD_NAME::UNITS_FULL, TEXT_FIELD_NAME::HYPERLINK,
  TEXT_FIELD_NAME::NONE
}
 These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NAME][FIELD_VALUE]>. More...
 
enum  RESOLUTION { RESOLUTION::HUNDREDTH_MICRON }
 
enum  LINESTYLE {
  LINESTYLE::SOLID, LINESTYLE::DASH, LINESTYLE::DASHDOT, LINESTYLE::DASHDOTDOT,
  LINESTYLE::DOT
}
 
enum  VERTEX_TYPE {
  VERTEX_TYPE::POINT, VERTEX_TYPE::CLOCKWISE_ARC, VERTEX_TYPE::CLOCKWISE_SEMICIRCLE, VERTEX_TYPE::ANTICLOCKWISE_ARC,
  VERTEX_TYPE::ANTICLOCKWISE_SEMICIRCLE
}
 
enum  SHAPE_TYPE { SHAPE_TYPE::OPENSHAPE, SHAPE_TYPE::OUTLINE, SHAPE_TYPE::SOLID, SHAPE_TYPE::HATCHED }
 
enum  UNITS {
  UNITS::DESIGN, UNITS::THOU, UNITS::INCH, UNITS::MICROMETRE,
  UNITS::MM, UNITS::CENTIMETER, UNITS::METER
}
 
enum  ANGUNITS { ANGUNITS::DEGREES, ANGUNITS::RADIANS }
 
enum  GRID_TYPE { GRID_TYPE::FRACTIONALGRID, GRID_TYPE::STEPGRID }
 
enum  ALIGNMENT {
  ALIGNMENT::NO_ALIGNMENT, ALIGNMENT::TOPLEFT, ALIGNMENT::TOPCENTER, ALIGNMENT::TOPRIGHT,
  ALIGNMENT::CENTERLEFT, ALIGNMENT::CENTERCENTER, ALIGNMENT::CENTERRIGHT, ALIGNMENT::BOTTOMLEFT,
  ALIGNMENT::BOTTOMCENTER, ALIGNMENT::BOTTOMRIGHT
}
 From CADSTAR Help: "Text Alignment enables you to define the position of an alignment origin for all text items in CADSTAR. More...
 
enum  JUSTIFICATION { JUSTIFICATION::LEFT, JUSTIFICATION::CENTER, JUSTIFICATION::RIGHT }
 From CADSTAR Help: "Multi Line Text can also be justified as Left, Centre or Right. More...
 
enum  READABILITY { READABILITY::BOTTOM_TO_TOP, READABILITY::TOP_TO_BOTTOM }
 Sets the readability direction of text. More...
 
enum  ATTROWNER {
  ATTROWNER::ALL_ITEMS, ATTROWNER::AREA, ATTROWNER::BOARD, ATTROWNER::COMPONENT,
  ATTROWNER::CONNECTION, ATTROWNER::COPPER, ATTROWNER::DOCSYMBOL, ATTROWNER::FIGURE,
  ATTROWNER::NET, ATTROWNER::NETCLASS, ATTROWNER::PART, ATTROWNER::PART_DEFINITION,
  ATTROWNER::PIN, ATTROWNER::SIGNALREF, ATTROWNER::SYMBOL, ATTROWNER::SYMDEF,
  ATTROWNER::TEMPLATE, ATTROWNER::TESTPOINT
}
 
enum  ATTRUSAGE {
  ATTRUSAGE::BOTH, ATTRUSAGE::COMPONENT, ATTRUSAGE::PART_DEFINITION, ATTRUSAGE::PART_LIBRARY,
  ATTRUSAGE::SYMBOL, ATTRUSAGE::UNDEFINED
}
 
enum  SWAP_RULE { SWAP_RULE::NO_SWAP, SWAP_RULE::USE_SWAP_LAYER, SWAP_RULE::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
 

Static Public Member Functions

static wxString ParseTextFields (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)
 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 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 Attributes

PARSER_CONTEXT m_context
 

Detailed Description

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

Definition at line 82 of file cadstar_archive_parser.h.

Member Typedef Documentation

◆ ATTRIBUTE_ID

Definition at line 93 of file cadstar_archive_parser.h.

◆ COLOR_ID

Definition at line 107 of file cadstar_archive_parser.h.

◆ DOCUMENTATION_SYMBOL_ID

◆ FIGURE_ID

Definition at line 101 of file cadstar_archive_parser.h.

◆ GATE_ID

Definition at line 96 of file cadstar_archive_parser.h.

◆ GROUP_ID

Definition at line 102 of file cadstar_archive_parser.h.

◆ HATCHCODE_ID

Definition at line 86 of file cadstar_archive_parser.h.

◆ LAYER_ID

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

Definition at line 91 of file cadstar_archive_parser.h.

◆ LINECODE_ID

Definition at line 85 of file cadstar_archive_parser.h.

◆ NET_ID

Definition at line 104 of file cadstar_archive_parser.h.

◆ NETCLASS_ID

Definition at line 88 of file cadstar_archive_parser.h.

◆ NETELEMENT_ID

Definition at line 105 of file cadstar_archive_parser.h.

◆ PART_DEFINITION_PIN_ID

Pin identifier in the part definition.

Definition at line 98 of file cadstar_archive_parser.h.

◆ PART_ID

Definition at line 95 of file cadstar_archive_parser.h.

◆ PART_PIN_ID

Pin identifier in the part.

Definition at line 99 of file cadstar_archive_parser.h.

◆ REUSEBLOCK_ID

Definition at line 103 of file cadstar_archive_parser.h.

◆ ROUTECODE_ID

Definition at line 87 of file cadstar_archive_parser.h.

◆ SPACING_CLASS_ID

Definition at line 89 of file cadstar_archive_parser.h.

◆ SYMDEF_ID

Definition at line 94 of file cadstar_archive_parser.h.

◆ TERMINAL_ID

Terminal is the pin identifier in the schematic.

Definition at line 97 of file cadstar_archive_parser.h.

◆ TEXT_ID

Definition at line 100 of file cadstar_archive_parser.h.

◆ TEXTCODE_ID

Definition at line 90 of file cadstar_archive_parser.h.

◆ VARIANT_ID

Definition at line 92 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 564 of file cadstar_archive_parser.h.

565  {
566  NO_ALIGNMENT,
567  TOPLEFT,
568  TOPCENTER,
569  TOPRIGHT,
570  CENTERLEFT,
571  CENTERCENTER,
572  CENTERRIGHT,
573  BOTTOMLEFT,
574  BOTTOMCENTER,
575  BOTTOMRIGHT
576  };

◆ ANGUNITS

Enumerator
DEGREES 
RADIANS 

Definition at line 474 of file cadstar_archive_parser.h.

475  {
476  DEGREES,
477  RADIANS
478  };

◆ 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 618 of file cadstar_archive_parser.h.

619  {
620  ALL_ITEMS,
621  AREA,
622  BOARD,
623  COMPONENT,
624  CONNECTION,
625  COPPER,
626  DOCSYMBOL,
627  FIGURE,
628  NET,
629  NETCLASS,
630  PART,
631  PART_DEFINITION,
632  PIN,
633  SIGNALREF,
634  SYMBOL,
635  SYMDEF,
636  TEMPLATE,
637  TESTPOINT
638  };
A collection of nets and the parameters used to route or test these nets.
Definition: netclass.h:46
This item represents a net.
Store all of the related footprint information found in a netlist.
Definition: pcb_netlist.h:83
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190

◆ 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 641 of file cadstar_archive_parser.h.

642  {
643  BOTH,
644  COMPONENT,
646  PART_DEFINITION,
647  PART_LIBRARY,
649  SYMBOL,
650  UNDEFINED
652  };
Store all of the related footprint information found in a netlist.
Definition: pcb_netlist.h:83

◆ 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 484 of file cadstar_archive_parser.h.

485  {
486  FRACTIONALGRID,
487  STEPGRID
489  };

◆ 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 590 of file cadstar_archive_parser.h.

◆ LINESTYLE

Enumerator
SOLID 
DASH 
DASHDOT 
DASHDOTDOT 
DOT 

Definition at line 268 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 608 of file cadstar_archive_parser.h.

609  {
610  BOTTOM_TO_TOP,
611  TOP_TO_BOTTOM
612  };

◆ RESOLUTION

Enumerator
HUNDREDTH_MICRON 

Definition at line 230 of file cadstar_archive_parser.h.

231  {
232  HUNDREDTH_MICRON
233  };

◆ 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 438 of file cadstar_archive_parser.h.

439  {
440  OPENSHAPE,
441  OUTLINE,
442  SOLID,
443  HATCHED
444  };

◆ 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 798 of file cadstar_archive_parser.h.

799  {
800  NO_SWAP,
801  USE_SWAP_LAYER,
802  BOTH
803  };

◆ 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 Title@>"

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 128 of file cadstar_archive_parser.h.

129  {
130  DESIGN_TITLE,
131  SHORT_JOBNAME,
132  LONG_JOBNAME,
133  NUM_OF_SHEETS,
134  SHEET_NUMBER,
135  SHEET_NAME,
136  VARIANT_NAME,
137  VARIANT_DESCRIPTION,
138  REG_USER,
139  COMPANY_NAME,
140  CURRENT_USER,
141  DATE,
142  TIME,
143  MACHINE_NAME,
144  FROM_FILE,
145  DISTANCE,
146  UNITS_SHORT,
147  UNITS_ABBREV,
148  UNITS_FULL,
149  HYPERLINK,
150  NONE
151  };
Display value expressed in distance units (mm/inch)
Definition: property.h:53
No updates are required.
Definition: view_item.h:51

◆ UNITS

Enumerator
DESIGN 

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

THOU 
INCH 
MICROMETRE 
MM 
CENTIMETER 
METER 

Definition at line 459 of file cadstar_archive_parser.h.

460  {
461  DESIGN,
462  THOU,
463  INCH,
464  MICROMETRE,
465  MM,
466  CENTIMETER,
467  METER
468  };
Definition: rs274x.cpp:62

◆ VERTEX_TYPE

Enumerator
POINT 
CLOCKWISE_ARC 
CLOCKWISE_SEMICIRCLE 
ANTICLOCKWISE_ARC 
ANTICLOCKWISE_SEMICIRCLE 

Definition at line 404 of file cadstar_archive_parser.h.

405  {
406  POINT,
407  CLOCKWISE_ARC,
408  CLOCKWISE_SEMICIRCLE,
409  ANTICLOCKWISE_ARC,
410  ANTICLOCKWISE_SEMICIRCLE
411  };

Member Function Documentation

◆ CheckNoChildNodes()

◆ CheckNoNextNodes()

void CADSTAR_ARCHIVE_PARSER::CheckNoNextNodes ( XNODE aNode)
static

◆ 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 2536 of file cadstar_archive_parser.cpp.

2537 {
2538  if( !aKiCadTextItem->GetText().IsEmpty() )
2539  {
2540  int txtAngleDecideg = aKiCadTextItem->GetTextAngleDegrees() * 10.0;
2541  wxPoint positionOffset( 0, aKiCadTextItem->GetInterline() );
2542  RotatePoint( &positionOffset, txtAngleDecideg );
2543 
2544  //Count num of additional lines
2545  wxString text = aKiCadTextItem->GetText();
2546  int numExtraLines = text.Replace( "\n", "\n" );
2547  numExtraLines -= text.at( text.size() - 1 ) == '\n'; // Ignore new line character at end
2548  positionOffset.x *= numExtraLines;
2549  positionOffset.y *= numExtraLines;
2550 
2551  aKiCadTextItem->Offset( positionOffset );
2552  }
2553 }
void Offset(const wxPoint &aOffset)
Definition: eda_text.h:259
int GetInterline() const
Return the distance between two lines of text.
Definition: eda_text.cpp:217
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
double GetTextAngleDegrees() const
Definition: eda_text.h:183
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:133

References EDA_TEXT::GetInterline(), EDA_TEXT::GetText(), EDA_TEXT::GetTextAngleDegrees(), EDA_TEXT::Offset(), RotatePoint(), and text.

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 1376 of file cadstar_archive_parser.h.

1377  {
1378  return aRefName
1379  + ( ( aAlternateName.size() > 0 ) ? ( wxT( " (" ) + aAlternateName + wxT( ")" ) )
1380  : wxT( "" ) );
1381  }

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary().

◆ 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 2408 of file cadstar_archive_parser.cpp.

2410 {
2411  long retVal;
2412  bool success = GetXmlAttributeIDString( aNode, aID, aIsRequired ).ToLong( &retVal );
2413 
2414  if( !success )
2415  {
2416  if( aIsRequired )
2417  THROW_PARSING_IO_ERROR( std::to_string( aID ), aNode->GetName() );
2418  else
2419  return UNDEFINED_VALUE;
2420  }
2421 
2422  return retVal;
2423 }
#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_SCH_ARCHIVE_PARSER::TERMINAL_SHAPE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINAL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PIN_NUM_LABEL_LOC::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPERCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMATTR::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::REASSIGN::Parse(), CADSTAR_ARCHIVE_PARSER::FORMAT::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMPINNAME_LABEL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::PIN_NUM::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PAD_SHAPE::Parse(), CADSTAR_ARCHIVE_PARSER::HATCH::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADCODE::Parse(), CADSTAR_ARCHIVE_PARSER::FONT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIACODE::Parse(), CADSTAR_ARCHIVE_PARSER::TEXTCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERPAIR::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTEREASSIGN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPCCLASSSPACE::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTECODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::SYM_TERM::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::BLOCK_TERM::Parse(), CADSTAR_ARCHIVE_PARSER::POINT::Parse(), CADSTAR_ARCHIVE_PARSER::LONGPOINT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TECHNOLOGY_SECTION::Parse(), CADSTAR_ARCHIVE_PARSER::GRID::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_ARCHIVE_PARSER::ATTRNAME::COLUMNORDER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::LINE::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRNAME::COLUMNWIDTH::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DIMENSION::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT_LOCATION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SYMDEF_PCB::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCK::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::AREA::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PIN_ATTRIBUTE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADEXCEPTION::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::GATE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::COPPER_TERMINAL::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::NET_PCB::ROUTE_VERTEX::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse(), CADSTAR_ARCHIVE_PARSER::PART::PART_PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPER::NETREF::COPPER_TERM::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::DRILL_TABLE::Parse(), CADSTAR_ARCHIVE_PARSER::DOCUMENTATION_SYMBOL::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 2389 of file cadstar_archive_parser.cpp.

2391 {
2392  wxString attrName, retVal;
2393  attrName = "attr";
2394  attrName << aID;
2395 
2396  if( !aNode->GetAttribute( attrName, &retVal ) )
2397  {
2398  if( aIsRequired )
2399  THROW_MISSING_PARAMETER_IO_ERROR( std::to_string( aID ), aNode->GetName() );
2400  else
2401  return wxEmptyString;
2402  }
2403 
2404  return retVal;
2405 }
#define THROW_MISSING_PARAMETER_IO_ERROR(param, location)

References THROW_MISSING_PARAMETER_IO_ERROR.

Referenced by CADSTAR_ARCHIVE_PARSER::PART::GetPinType(), GetXmlAttributeIDLong(), CADSTAR_PCB_ARCHIVE_PARSER::MATERIAL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINALCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::TERMINAL::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PIN_NUM_LABEL_LOC::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYER::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SHEETS::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERDEFS::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::COMP::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPREASSIGN::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::PARTREF::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COPPERCODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::REASSIGN::Parse(), CADSTAR_ARCHIVE_PARSER::FORMAT::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMPINNAME_LABEL::Parse(), CADSTAR_ARCHIVE_PARSER::TIMESTAMP::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOLVARIANT::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SIGNALREFERENCELINK::Parse(), CADSTAR_ARCHIVE_PARSER::HEADER::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPACINGCODE::Parse(), CADSTAR_ARCHIVE_PARSER::VARIANT::Parse(), CADSTAR_ARCHIVE_PARSER::LINECODE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADREASSIGN::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SYMBOL::Parse(), CADSTAR_ARCHIVE_PARSER::HATCHCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::SIGLOC::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::BUS::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIAREASSIGN::Parse(), CADSTAR_ARCHIVE_PARSER::FONT::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::VIACODE::Parse(), CADSTAR_ARCHIVE_PARSER::TEXTCODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::BLOCK::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::LAYERPAIR::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTEREASSIGN::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::JUNCTION_SCH::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::SPCCLASSSPACE::Parse(), CADSTAR_ARCHIVE_PARSER::ROUTECODE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::SYM_TERM::Parse(), CADSTAR_ARCHIVE_PARSER::EVALUE::Parse(), CADSTAR_SCH_ARCHIVE_PARSER::NET_SCH::BUS_TERM::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::RULESET::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::COMPONENT_COPPER::Parse(), CADSTAR_ARCHIVE_PARSER::SHAPE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::COMPONENT_AREA::Parse(), CADSTAR_ARCHIVE_PARSER::GRID::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_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_PCB_ARCHIVE_PARSER::CADSTAR_BOARD::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCK::Parse(), CADSTAR_ARCHIVE_PARSER::REUSEBLOCKREF::Parse(), CADSTAR_ARCHIVE_PARSER::GROUP::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::AREA::Parse(), CADSTAR_ARCHIVE_PARSER::FIGURE::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::PADEXCEPTION::Parse(), CADSTAR_ARCHIVE_PARSER::TEXT::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_ARCHIVE_PARSER::PART::DEFINITION::GATE::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_ARCHIVE_PARSER::PART::DEFINITION::PIN::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::SWAP_GROUP::Parse(), CADSTAR_ARCHIVE_PARSER::PART::DEFINITION::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::POURING::Parse(), CADSTAR_ARCHIVE_PARSER::PART::PART_PIN::Parse(), CADSTAR_PCB_ARCHIVE_PARSER::TEMPLATE::Parse(), CADSTAR_ARCHIVE_PARSER::PART::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::DOCUMENTATION_SYMBOL::Parse(), CADSTAR_ARCHIVE_PARSER::DFLTSETTINGS::Parse(), CADSTAR_ARCHIVE_PARSER::ATTRCOL::Parse(), CADSTAR_ARCHIVE_PARSER::PARTNAMECOL::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().

◆ InsertAttributeAtEnd()

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

Definition at line 2280 of file cadstar_archive_parser.cpp.

2281 {
2282  wxString result;
2283  int numAttributes = 0;
2284 
2285  if( aNode->GetAttribute( wxT( "numAttributes" ), &result ) )
2286  {
2287  numAttributes = wxAtoi( result );
2288  aNode->DeleteAttribute( wxT( "numAttributes" ) );
2289  ++numAttributes;
2290  }
2291 
2292  aNode->AddAttribute( wxT( "numAttributes" ), wxString::Format( wxT( "%i" ), numAttributes ) );
2293 
2294  wxString paramName = wxT( "attr" );
2295  paramName << numAttributes;
2296 
2297  aNode->AddAttribute( paramName, aValue );
2298 }
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 
)
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"
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 2301 of file cadstar_archive_parser.cpp.

2303 {
2304  KEYWORD emptyKeywords[1] = {};
2305  XNODE * iNode = NULL, *cNode = NULL;
2306  int tok;
2307  bool cadstarFileCheckDone = false;
2308  wxString str;
2309  wxCSConv win1252( wxT( "windows-1252" ) );
2310  wxMBConv* conv = &win1252; // Initial testing suggests file encoding to be Windows-1252
2311  // More samples required.
2312  FILE* fp = wxFopen( aFileName, wxT( "rt" ) );
2313 
2314  if( !fp )
2315  THROW_IO_ERROR( wxString::Format( _( "Cannot open file '%s'" ), aFileName ) );
2316 
2317  DSNLEXER lexer( emptyKeywords, 0, fp, aFileName );
2318 
2319  while( ( tok = lexer.NextTok() ) != DSN_EOF )
2320  {
2321  if( tok == DSN_RIGHT )
2322  {
2323  cNode = iNode;
2324  if( cNode )
2325  {
2326  iNode = cNode->GetParent();
2327  }
2328  else
2329  {
2330  //too many closing brackets
2331  THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2332  }
2333  }
2334  else if( tok == DSN_LEFT )
2335  {
2336  tok = lexer.NextTok();
2337  str = wxString( lexer.CurText(), *conv );
2338  cNode = new XNODE( wxXML_ELEMENT_NODE, str );
2339 
2340  if( iNode )
2341  {
2342  //we will add it as attribute as well as child node
2343  InsertAttributeAtEnd( iNode, str );
2344  iNode->AddChild( cNode );
2345  }
2346  else if( !cadstarFileCheckDone )
2347  {
2348  if( cNode->GetName() != aFileTypeIdentifier )
2349  THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2350 
2351  cadstarFileCheckDone = true;
2352  }
2353 
2354  iNode = cNode;
2355  }
2356  else if( iNode )
2357  {
2358  str = wxString( lexer.CurText(), *conv );
2359  //Insert even if string is empty
2360  InsertAttributeAtEnd( iNode, str );
2361  }
2362  else
2363  {
2364  //not enough closing brackets
2365  THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2366  }
2367  }
2368 
2369  // Not enough closing brackets
2370  if( iNode != NULL )
2371  THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2372 
2373  // Throw if no data was parsed
2374  if( cNode )
2375  return cNode;
2376  else
2377  THROW_IO_ERROR( _( "The selected file is not valid or might be corrupt!" ) );
2378 
2379  return NULL;
2380 }
#define NULL
XNODE * GetParent() const
Definition: xnode.h:72
Hold an XML or S-expression element.
Definition: xnode.h:43
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
#define _(s)
Definition: 3d_actions.cpp:33
static void InsertAttributeAtEnd(XNODE *aNode, wxString aValue)
Hold a keyword string and its unique integer token.
Definition: dsnlexer.h:39
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38
Implement a lexical analyzer for the SPECCTRA DSN file format.
Definition: dsnlexer.h:78

References _, DSNLEXER::CurText(), DSN_EOF, DSN_LEFT, DSN_RIGHT, Format(), XNODE::GetParent(), InsertAttributeAtEnd(), DSNLEXER::NextTok(), NULL, 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 931 of file cadstar_archive_parser.cpp.

932 {
933  wxASSERT( aNode->GetName() == wxT( "ALIGN" ) );
934 
935  wxString alignmentStr = GetXmlAttributeIDString( aNode, 0 );
936 
937  if( alignmentStr == wxT( "BOTTOMCENTER" ) )
939  else if( alignmentStr == wxT( "BOTTOMLEFT" ) )
940  return ALIGNMENT::BOTTOMLEFT;
941  else if( alignmentStr == wxT( "BOTTOMRIGHT" ) )
942  return ALIGNMENT::BOTTOMRIGHT;
943  else if( alignmentStr == wxT( "CENTERCENTER" ) )
945  else if( alignmentStr == wxT( "CENTERLEFT" ) )
946  return ALIGNMENT::CENTERLEFT;
947  else if( alignmentStr == wxT( "CENTERRIGHT" ) )
948  return ALIGNMENT::CENTERRIGHT;
949  else if( alignmentStr == wxT( "TOPCENTER" ) )
950  return ALIGNMENT::TOPCENTER;
951  else if( alignmentStr == wxT( "TOPLEFT" ) )
952  return ALIGNMENT::TOPLEFT;
953  else if( alignmentStr == wxT( "TOPRIGHT" ) )
954  return ALIGNMENT::TOPRIGHT;
955  else
956  THROW_UNKNOWN_PARAMETER_IO_ERROR( alignmentStr, wxT( "ALIGN" ) );
957 
958  //shouldn't be here but avoids compiler warning
960 }
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
NO_ALIGNMENT has different meaning depending on the object type.
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)

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 2510 of file cadstar_archive_parser.cpp.

2512 {
2513  std::vector<CUTOUT> retVal;
2514 
2515  XNODE* cNode = aNode->GetChildren();
2516 
2517  for( ; cNode; cNode = cNode->GetNext() )
2518  {
2519  if( cNode->GetName() == wxT( "CUTOUT" ) )
2520  {
2521  CUTOUT cutout;
2522  //TODO try.. catch + throw again with more detailed error information
2523  cutout.Parse( cNode, aContext );
2524  retVal.push_back( cutout );
2525  }
2526  else if( aTestAllChildNodes )
2527  {
2528  THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2529  }
2530  }
2531 
2532  return retVal;
2533 }
XNODE * GetChildren() const
Definition: xnode.h:62
Make a cutout to an existing zone.
Hold an XML or S-expression element.
Definition: xnode.h:43
XNODE * GetNext() const
Definition: xnode.h:67
#define THROW_UNKNOWN_NODE_IO_ERROR(nodename, location)

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 2450 of file cadstar_archive_parser.cpp.

2452 {
2453  std::vector<POINT> retVal;
2454 
2455  XNODE* cNode = aNode->GetChildren();
2456 
2457  for( ; cNode; cNode = cNode->GetNext() )
2458  {
2459  if( cNode->GetName() == wxT( "PT" ) )
2460  {
2461  POINT pt;
2462  //TODO try.. catch + throw again with more detailed error information
2463  pt.Parse( cNode, aContext );
2464  retVal.push_back( pt );
2465  }
2466  else if( aTestAllChildNodes )
2467  {
2468  THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2469  }
2470  }
2471 
2472  if( aExpectedNumPoints != UNDEFINED_VALUE
2473  && retVal.size() != static_cast<size_t>( aExpectedNumPoints ) )
2474  {
2476  _( "Unexpected number of points in '%s'. Found %d but expected %d." ),
2477  aNode->GetName(), retVal.size(), aExpectedNumPoints ) );
2478  }
2479 
2480  return retVal;
2481 }
XNODE * GetChildren() const
Definition: xnode.h:62
static const long UNDEFINED_VALUE
Hold an XML or S-expression element.
Definition: xnode.h:43
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
XNODE * GetNext() const
Definition: xnode.h:67
#define _(s)
Definition: 3d_actions.cpp:33
#define THROW_UNKNOWN_NODE_IO_ERROR(nodename, location)
#define THROW_IO_ERROR(msg)
Definition: ki_exception.h:38

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_SCH_ARCHIVE_PARSER::NET_SCH::CONNECTION_SCH::Parse(), CADSTAR_ARCHIVE_PARSER::VERTEX::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 2484 of file cadstar_archive_parser.cpp.

2486 {
2487  std::vector<VERTEX> retVal;
2488 
2489  XNODE* cNode = aNode->GetChildren();
2490 
2491  for( ; cNode; cNode = cNode->GetNext() )
2492  {
2493  if( VERTEX::IsVertex( cNode ) )
2494  {
2495  VERTEX vertex;
2496  //TODO try.. catch + throw again with more detailed error information
2497  vertex.Parse( cNode, aContext );
2498  retVal.push_back( vertex );
2499  }
2500  else if( aTestAllChildNodes )
2501  {
2502  THROW_UNKNOWN_NODE_IO_ERROR( cNode->GetName(), aNode->GetName() );
2503  }
2504  }
2505 
2506  return retVal;
2507 }
XNODE * GetChildren() const
Definition: xnode.h:62
Hold an XML or S-expression element.
Definition: xnode.h:43
XNODE * GetNext() const
Definition: xnode.h:67
#define THROW_UNKNOWN_NODE_IO_ERROR(nodename, location)

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 570 of file cadstar_archive_parser.cpp.

571 {
572  wxASSERT( aNode->GetName() == wxT( "ANGUNITS" ) );
573 
574  wxString angUnitStr = GetXmlAttributeIDString( aNode, 0 );
575 
576  if( angUnitStr == wxT( "DEGREES" ) )
577  return ANGUNITS::DEGREES;
578  else if( angUnitStr == wxT( "RADIANS" ) )
579  return ANGUNITS::RADIANS;
580  else
581  THROW_UNKNOWN_PARAMETER_IO_ERROR( angUnitStr, aNode->GetName() );
582 
583  return ANGUNITS();
584 }
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)

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 2440 of file cadstar_archive_parser.cpp.

2442 {
2443  if( aNode->GetChildren()->GetName() == wxT( "E" ) )
2444  aValueToParse.Parse( aNode->GetChildren(), aContext );
2445  else
2446  THROW_UNKNOWN_NODE_IO_ERROR( aNode->GetChildren()->GetName(), aNode->GetName() );
2447 }
XNODE * GetChildren() const
Definition: xnode.h:62
#define THROW_UNKNOWN_NODE_IO_ERROR(nodename, location)

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 963 of file cadstar_archive_parser.cpp.

964 {
965  wxASSERT( aNode->GetName() == wxT( "JUSTIFICATION" ) );
966 
967  wxString justificationStr = GetXmlAttributeIDString( aNode, 0 );
968 
969  if( justificationStr == wxT( "LEFT" ) )
970  return JUSTIFICATION::LEFT;
971  else if( justificationStr == wxT( "RIGHT" ) )
972  return JUSTIFICATION::RIGHT;
973  else if( justificationStr == wxT( "CENTER" ) )
974  return JUSTIFICATION::CENTER;
975  else
976  THROW_UNKNOWN_PARAMETER_IO_ERROR( justificationStr, wxT( "JUSTIFICATION" ) );
977 
978  return JUSTIFICATION::LEFT;
979 }
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)

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 982 of file cadstar_archive_parser.cpp.

983 {
984  wxASSERT( aNode->GetName() == wxT( "READABILITY" ) );
985 
986  wxString readabilityStr = GetXmlAttributeIDString( aNode, 0 );
987 
988  if( readabilityStr == wxT( "BOTTOM_TO_TOP" ) )
990  else if( readabilityStr == wxT( "TOP_TO_BOTTOM" ) )
992  else
993  THROW_UNKNOWN_PARAMETER_IO_ERROR( readabilityStr, wxT( "READABILITY" ) );
994 
996 }
When text is vertical, show it rotated 90 degrees clockwise.
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)
When text is vertical, show it rotated 90 degrees anticlockwise.

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

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

◆ ParseSwapRule()

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

Definition at line 1392 of file cadstar_archive_parser.cpp.

1393 {
1394  wxASSERT( aNode->GetName() == wxT( "SWAPRULE" ) );
1395 
1396  SWAP_RULE retval;
1397  wxString swapRuleStr = GetXmlAttributeIDString( aNode, 0 );
1398 
1399  if( swapRuleStr == wxT( "NO_SWAP" ) )
1400  retval = SWAP_RULE::NO_SWAP;
1401  else if( swapRuleStr == wxT( "USE_SWAP_LAYER" ) )
1402  retval = SWAP_RULE::USE_SWAP_LAYER;
1403  else
1404  THROW_UNKNOWN_PARAMETER_IO_ERROR( swapRuleStr, wxT( "SWAPRULE" ) );
1405 
1406  return retval;
1407 }
SWAP_RULE
Corresponds to "Display when" Item property.
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)

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

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

◆ ParseTextFields()

wxString CADSTAR_ARCHIVE_PARSER::ParseTextFields ( 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 737 of file cadstar_archive_parser.cpp.

738 {
739  static const std::map<TEXT_FIELD_NAME, wxString> txtTokens =
740  {
741  { TEXT_FIELD_NAME::DESIGN_TITLE, wxT( "DESIGN TITLE" ) },
742  { TEXT_FIELD_NAME::SHORT_JOBNAME, wxT( "SHORT_JOBNAME" ) },
743  { TEXT_FIELD_NAME::LONG_JOBNAME, wxT( "LONG_JOBNAME" ) },
744  { TEXT_FIELD_NAME::NUM_OF_SHEETS, wxT( "NUM_OF_SHEETS" ) },
745  { TEXT_FIELD_NAME::SHEET_NUMBER, wxT( "SHEET_NUMBER" ) },
746  { TEXT_FIELD_NAME::SHEET_NAME, wxT( "SHEET_NAME" ) },
747  { TEXT_FIELD_NAME::VARIANT_NAME, wxT( "VARIANT_NAME" ) },
748  { TEXT_FIELD_NAME::VARIANT_DESCRIPTION, wxT( "VARIANT_DESCRIPTION" ) },
749  { TEXT_FIELD_NAME::REG_USER, wxT( "REG_USER" ) },
750  { TEXT_FIELD_NAME::COMPANY_NAME, wxT( "COMPANY_NAME" ) },
751  { TEXT_FIELD_NAME::CURRENT_USER, wxT( "CURRENT_USER" ) },
752  { TEXT_FIELD_NAME::DATE, wxT( "DATE" ) },
753  { TEXT_FIELD_NAME::TIME, wxT( "TIME" ) },
754  { TEXT_FIELD_NAME::MACHINE_NAME, wxT( "MACHINE_NAME" ) },
755  { TEXT_FIELD_NAME::FROM_FILE, wxT( "FROM_FILE" ) },
756  { TEXT_FIELD_NAME::DISTANCE, wxT( "DISTANCE" ) },
757  { TEXT_FIELD_NAME::UNITS_SHORT, wxT( "UNITS SHORT" ) },
758  { TEXT_FIELD_NAME::UNITS_ABBREV, wxT( "UNITS ABBREV" ) },
759  { TEXT_FIELD_NAME::UNITS_FULL, wxT( "UNITS FULL" ) },
760  { TEXT_FIELD_NAME::HYPERLINK, wxT( "HYPERLINK" ) }
761  };
762 
763 
764  wxString remainingStr = aTextString;
765  wxString returnStr;
766 
767  while( remainingStr.size() > 0 )
768  {
769  //Find the start token
770  size_t startpos = remainingStr.Find( wxT( "<@" ) );
771 
772  if( static_cast<int>( startpos ) == wxNOT_FOUND )
773  {
774  // No more fields to parse, add to return string
775  returnStr += remainingStr;
776  break;
777  }
778 
779  if( startpos > 0 )
780  returnStr += remainingStr.SubString( 0, startpos - 1 );
781 
782  if( ( startpos + 2 ) >= remainingStr.size() )
783  break;
784 
785  remainingStr = remainingStr.Mid( startpos + 2 );
786 
787  //Find the expected token for the field
789 
790  for( std::pair<TEXT_FIELD_NAME, wxString> txtF : txtTokens )
791  {
792  if( remainingStr.StartsWith( txtF.second ) )
793  {
794  foundField = txtF.first;
795  break;
796  }
797  }
798 
799  if( foundField == TEXT_FIELD_NAME::NONE )
800  {
801  // Not a valid field, lets keep looking
802  returnStr += wxT( "<@" );
803  continue;
804  }
805 
806  //Now lets find the end token
807  size_t endpos = remainingStr.Find( wxT( "@>" ) );
808 
809  if( static_cast<int>( endpos ) == wxNOT_FOUND )
810  {
811  // The field we found isn't valid as it doesn't have a termination
812  // Lets append the whole thing as plain text
813  returnStr += wxT( "<@" ) + remainingStr;
814  break;
815  }
816 
817  size_t valueStart = txtTokens.at( foundField ).size();
818  wxString fieldValue = remainingStr.SubString( valueStart, endpos - 1 );
819  wxString address;
820 
821  if( foundField == TEXT_FIELD_NAME::FROM_FILE || foundField == TEXT_FIELD_NAME::HYPERLINK )
822  {
823  // The first character should always be a double quotation mark
824  wxASSERT_MSG( fieldValue.at( 0 ) == '"', "Expected '\"' as the first character" );
825 
826  size_t splitPos = fieldValue.find_first_of( '"', 1 );
827  address = fieldValue.SubString( 1, splitPos - 1 );
828 
829  if( foundField == TEXT_FIELD_NAME::HYPERLINK )
830  {
831  // Assume the last two characters are "@>"
832  wxASSERT_MSG( remainingStr.EndsWith( wxT( "@>" ) ),
833  "Expected '@>' at the end of a hyperlink" );
834 
835  fieldValue = remainingStr.SubString( valueStart + splitPos + 1,
836  remainingStr.Length() - 3 );
837 
838  remainingStr = wxEmptyString;
839  }
840  else
841  {
842  fieldValue = fieldValue.Mid( splitPos + 1 );
843  }
844  }
845 
846  switch( foundField )
847  {
859 
860  if( aContext->TextFieldToValuesMap.find( foundField )
861  != aContext->TextFieldToValuesMap.end() )
862  {
863  aContext->InconsistentTextFields.insert( foundField );
864  }
865  else
866  {
867  aContext->TextFieldToValuesMap.insert( { foundField, fieldValue } );
868  }
869 
871 
875  returnStr += wxT( "${" ) + CADSTAR_TO_KICAD_FIELDS.at( foundField ) + wxT( "}" );
876  break;
877 
882  // Just flatten the text for distances
883  returnStr += fieldValue;
884  break;
885 
887  {
888  wxFileName fn( address );
889  wxString fieldFmt = wxT( "FROM_FILE_%s_%s" );
890  wxString fieldName = wxString::Format( fieldFmt, fn.GetName(), fn.GetExt() );
891 
892  int version = 1;
893 
894  while(
895  aContext->FilenamesToTextMap.find( fieldName )
896  != aContext->FilenamesToTextMap.end()
897  && aContext->FilenamesToTextMap.at( fieldName ) != fieldValue )
898  {
899  fieldName = wxString::Format( fieldFmt, fn.GetName(), fn.GetExt() )
900  + wxString::Format( wxT( "_%d" ), version++ );
901  }
902 
903  aContext->FilenamesToTextMap[fieldName] = fieldValue;
904  returnStr += wxT( "${" ) + fieldName + wxT( "}" );
905  }
906  break;
907 
909  {
910  aContext->TextToHyperlinksMap[fieldValue] = address;
911  returnStr += ParseTextFields( fieldValue, aContext );
912  }
913  break;
914 
916  wxFAIL_MSG( "We should have already covered this scenario above" );
917  break;
918  }
919 
920 
921  if( ( endpos + 2 ) >= remainingStr.size() )
922  break;
923 
924  remainingStr = remainingStr.Mid( endpos + 2 );
925  }
926 
927  return returnStr;
928 }
TEXT_FIELD_NAME
These are special fields in text objects enclosed between the tokens '<@' and '>' such as <@[FIELD_NA...
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
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
static wxString ParseTextFields(wxString aTextString, PARSER_CONTEXT *aParserContext)
Replaces CADSTAR fields for the equivalent in KiCad and stores the field values in aParserContext.
static const std::map< TEXT_FIELD_NAME, wxString > CADSTAR_TO_KICAD_FIELDS
Map between CADSTAR fields and KiCad text variables.

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, 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(), and CADSTAR_ARCHIVE_PARSER::TEXT::Parse().

◆ ParseUnits()

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

Definition at line 543 of file cadstar_archive_parser.cpp.

544 {
545  wxASSERT( aNode->GetName() == wxT( "UNITS" ) );
546 
547  wxString unit = GetXmlAttributeIDString( aNode, 0 );
548 
549  if( unit == wxT( "CENTIMETER" ) )
550  return UNITS::CENTIMETER;
551  else if( unit == wxT( "INCH" ) )
552  return UNITS::INCH;
553  else if( unit == wxT( "METER" ) )
554  return UNITS::METER;
555  else if( unit == wxT( "MICROMETRE" ) )
556  return UNITS::MICROMETRE;
557  else if( unit == wxT( "MM" ) )
558  return UNITS::MM;
559  else if( unit == wxT( "THOU" ) )
560  return UNITS::THOU;
561  else if( unit == wxT( "DESIGN" ) )
562  return UNITS::DESIGN;
563  else
564  THROW_UNKNOWN_PARAMETER_IO_ERROR( unit, wxT( "UNITS" ) );
565 
566  return UNITS();
567 }
Inherits from design units (assumed Assignments->Technology->Units)
static wxString GetXmlAttributeIDString(XNODE *aNode, unsigned int aID, bool aIsRequired=true)
#define THROW_UNKNOWN_PARAMETER_IO_ERROR(param, location)

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 157 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 309 of file cadstar_archive_parser.h.

◆ m_context

◆ 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 122 of file cadstar_archive_parser.h.

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

◆ UNDEFINED_VALUE


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