KiCad PCB EDA Suite
Loading...
Searching...
No Matches
SCH_SEXPR_PARSER Class Reference

Object to parser s-expression symbol library and schematic file formats. More...

#include <sch_sexpr_parser.h>

Inheritance diagram for SCH_SEXPR_PARSER:

Public Member Functions

 SCH_SEXPR_PARSER (LINE_READER *aLineReader=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr, unsigned aLineCount=0, SCH_SHEET *aRootSheet=nullptr, bool aIsAppending=false)
 
void ParseLib (LIB_SYMBOL_MAP &aSymbolLibMap)
 
LIB_SYMBOLParseSymbol (LIB_SYMBOL_MAP &aSymbolLibMap, int aFileVersion=SEXPR_SYMBOL_LIB_FILE_VERSION)
 
LIB_ITEMParseDrawItem ()
 
void ParseSchematic (SCH_SHEET *aSheet, bool aIsCopyablyOnly=false, int aFileVersion=SEXPR_SCHEMATIC_FILE_VERSION)
 Parse the internal LINE_READER object into aSheet. More...
 
int GetParsedRequiredVersion () const
 

Private Member Functions

void checkpoint ()
 
KIID parseKIID ()
 
void parseHeader (TSCHEMATIC_T::T aHeaderType, int aFileVersion)
 
long parseHex ()
 
int parseInt ()
 
int parseInt (const char *aExpected)
 
int parseInternalUnits ()
 
int parseInternalUnits (const char *aExpected)
 
int parseInternalUnits (TSCHEMATIC_T::T aToken)
 
VECTOR2I parseXY ()
 
bool parseBool ()
 
void parseStroke (STROKE_PARAMS &aStroke)
 Parse stroke definition aStroke. More...
 
void parseFill (FILL_PARAMS &aFill)
 
void parseEDA_TEXT (EDA_TEXT *aText, bool aConvertOverbarSyntax)
 
void parsePinNames (std::unique_ptr< LIB_SYMBOL > &aSymbol)
 
LIB_FIELDparseProperty (std::unique_ptr< LIB_SYMBOL > &aSymbol)
 
LIB_SHAPEparseArc ()
 
LIB_SHAPEparseBezier ()
 
LIB_SHAPEparseCircle ()
 
LIB_PINparsePin ()
 
LIB_SHAPEparsePolyLine ()
 
LIB_SHAPEparseRectangle ()
 
LIB_TEXTparseText ()
 
LIB_TEXTBOXparseTextBox ()
 
void parsePAGE_INFO (PAGE_INFO &aPageInfo)
 
void parseTITLE_BLOCK (TITLE_BLOCK &aTitleBlock)
 
void parseSchSymbolInstances (SCH_SCREEN *aScreen)
 
void parseSchSheetInstances (SCH_SHEET *aRootSheet, SCH_SCREEN *aScreen)
 
SCH_SHEET_PINparseSchSheetPin (SCH_SHEET *aSheet)
 
SCH_FIELDparseSchField (SCH_ITEM *aParent)
 
SCH_SYMBOLparseSchematicSymbol ()
 
SCH_BITMAPparseImage ()
 
SCH_SHEETparseSheet ()
 
SCH_JUNCTIONparseJunction ()
 
SCH_NO_CONNECTparseNoConnect ()
 
SCH_BUS_WIRE_ENTRYparseBusEntry ()
 
SCH_LINEparseLine ()
 
SCH_SHAPEparseSchPolyLine ()
 
SCH_SHAPEparseSchArc ()
 
SCH_SHAPEparseSchCircle ()
 
SCH_SHAPEparseSchRectangle ()
 
SCH_SHAPEparseSchBezier ()
 
SCH_TEXTparseSchText ()
 
SCH_TEXTBOXparseSchTextBox ()
 
void parseBusAlias (SCH_SCREEN *aScreen)
 

Private Attributes

int m_requiredVersion
 Set to the symbol library file version required. More...
 
int m_fieldId
 The current field ID. More...
 
int m_unit
 The current unit being parsed. More...
 
int m_convert
 The current body style being parsed. More...
 
wxString m_symbolName
 The current symbol name. More...
 
bool m_appending
 Appending load status. More...
 
std::set< int > m_fieldIDsRead
 Field IDs that have been read so far for the current symbol. More...
 
std::set< KIIDm_uuids
 
PROGRESS_REPORTERm_progressReporter
 
const LINE_READERm_lineReader
 
unsigned m_lastProgressLine
 
unsigned m_lineCount
 
KIID m_rootUuid
 
SCH_SHEETm_rootSheet
 The rootsheet for full project loads or null for importing a schematic. More...
 

Detailed Description

Object to parser s-expression symbol library and schematic file formats.

Definition at line 77 of file sch_sexpr_parser.h.

Constructor & Destructor Documentation

◆ SCH_SEXPR_PARSER()

SCH_SEXPR_PARSER::SCH_SEXPR_PARSER ( LINE_READER aLineReader = nullptr,
PROGRESS_REPORTER aProgressReporter = nullptr,
unsigned  aLineCount = 0,
SCH_SHEET aRootSheet = nullptr,
bool  aIsAppending = false 
)

Definition at line 68 of file sch_sexpr_parser.cpp.

Member Function Documentation

◆ checkpoint()

◆ GetParsedRequiredVersion()

int SCH_SEXPR_PARSER::GetParsedRequiredVersion ( ) const
inline

Definition at line 111 of file sch_sexpr_parser.h.

References m_requiredVersion.

Referenced by SCH_SEXPR_PLUGIN_CACHE::Load().

◆ parseArc()

◆ parseBezier()

◆ parseBool()

bool SCH_SEXPR_PARSER::parseBool ( )
private

◆ parseBusAlias()

void SCH_SEXPR_PARSER::parseBusAlias ( SCH_SCREEN aScreen)
private

◆ parseBusEntry()

◆ parseCircle()

◆ ParseDrawItem()

LIB_ITEM * SCH_SEXPR_PARSER::ParseDrawItem ( )

◆ parseEDA_TEXT()

◆ parseFill()

◆ parseHeader()

void SCH_SEXPR_PARSER::parseHeader ( TSCHEMATIC_T::T  aHeaderType,
int  aFileVersion 
)
private

Definition at line 678 of file sch_sexpr_parser.cpp.

References m_requiredVersion, and parseInt().

Referenced by ParseLib(), and ParseSchematic().

◆ parseHex()

long SCH_SEXPR_PARSER::parseHex ( )
inlineprivate

Definition at line 120 of file sch_sexpr_parser.h.

◆ parseImage()

SCH_BITMAP * SCH_SEXPR_PARSER::parseImage ( )
private

Definition at line 2909 of file sch_sexpr_parser.cpp.

References image, m_requiredVersion, parseDouble(), parseKIID(), and parseXY().

Referenced by ParseSchematic().

◆ parseInt() [1/2]

◆ parseInt() [2/2]

int SCH_SEXPR_PARSER::parseInt ( const char *  aExpected)
inlineprivate

Definition at line 131 of file sch_sexpr_parser.h.

References parseInt().

◆ parseInternalUnits() [1/3]

◆ parseInternalUnits() [2/3]

int SCH_SEXPR_PARSER::parseInternalUnits ( const char *  aExpected)
private

Definition at line 466 of file sch_sexpr_parser.cpp.

References EDA_IU_SCALE::IU_PER_MM, KiROUND(), parseDouble(), and schIUScale.

◆ parseInternalUnits() [3/3]

int SCH_SEXPR_PARSER::parseInternalUnits ( TSCHEMATIC_T::T  aToken)
inlineprivate

Definition at line 141 of file sch_sexpr_parser.h.

References parseInternalUnits().

◆ parseJunction()

SCH_JUNCTION * SCH_SEXPR_PARSER::parseJunction ( )
private

◆ parseKIID()

◆ ParseLib()

void SCH_SEXPR_PARSER::ParseLib ( LIB_SYMBOL_MAP aSymbolLibMap)

◆ parseLine()

SCH_LINE * SCH_SEXPR_PARSER::parseLine ( )
private

◆ parseNoConnect()

SCH_NO_CONNECT * SCH_SEXPR_PARSER::parseNoConnect ( )
private

Definition at line 3238 of file sch_sexpr_parser.cpp.

References parseKIID(), and parseXY().

Referenced by ParseSchematic().

◆ parsePAGE_INFO()

◆ parsePin()

◆ parsePinNames()

void SCH_SEXPR_PARSER::parsePinNames ( std::unique_ptr< LIB_SYMBOL > &  aSymbol)
private

Definition at line 718 of file sch_sexpr_parser.cpp.

References _, parseInternalUnits(), and THROW_PARSE_ERROR.

Referenced by ParseSymbol().

◆ parsePolyLine()

◆ parseProperty()

◆ parseRectangle()

◆ parseSchArc()

SCH_SHAPE * SCH_SEXPR_PARSER::parseSchArc ( )
private

◆ parseSchBezier()

SCH_SHAPE * SCH_SEXPR_PARSER::parseSchBezier ( )
private

◆ parseSchCircle()

◆ ParseSchematic()

void SCH_SEXPR_PARSER::ParseSchematic ( SCH_SHEET aSheet,
bool  aIsCopyablyOnly = false,
int  aFileVersion = SEXPR_SCHEMATIC_FILE_VERSION 
)

Parse the internal LINE_READER object into aSheet.

When aIsCopyableOnly is true, only schematic objects that are viewable on the canvas for copy and paste purposes are parsed. Other schematic content such as bus definitions or instance data will throw an IO_ERROR exception.

When aIsCopyableOnly is false, full schematic file parsing is performed.

Note
This does not load any sub-sheets or decent complex sheet hierarchies.
Parameters
aSheetThe SCH_SHEET object to store the parsed schematic file.
aIsCopyableOnlyLoad only the schematic objects that can be copied into aSheet if true. Otherwise, load the full schematic file format.
aFileVersionThe schematic file version to parser. Defaults to the schematic file being parsed when aIsCopyableOnly is false.

Definition at line 2283 of file sch_sexpr_parser.cpp.

References SCH_SCREEN::AddLibSymbol(), SCH_SCREEN::Append(), checkpoint(), SHAPE_LINE_CHAIN::CPoint(), EDA_SHAPE::GetPointCount(), EDA_SHAPE::GetPolyShape(), SCH_SHEET::GetScreen(), SCH_SHAPE::GetStroke(), SCH_SCREEN::GetUuid(), KI_FALLTHROUGH, LAYER_NOTES, m_requiredVersion, m_rootSheet, m_rootUuid, SCH_SCREEN::m_uuid, EDA_ITEM::m_Uuid, SHAPE_POLY_SET::Outline(), parseBusAlias(), parseBusEntry(), parseHeader(), parseImage(), parseJunction(), parseKIID(), parseLine(), parseNoConnect(), parsePAGE_INFO(), parseSchArc(), parseSchBezier(), parseSchCircle(), parseSchematicSymbol(), parseSchPolyLine(), parseSchRectangle(), parseSchSheetInstances(), parseSchSymbolInstances(), parseSchText(), parseSchTextBox(), parseSheet(), ParseSymbol(), parseTITLE_BLOCK(), SCH_LINE::SetEndPoint(), SCH_SCREEN::SetFileFormatVersionAtLoad(), SCH_SCREEN::SetLegacySymbolInstanceData(), SCH_SCREEN::SetPageSettings(), EDA_ITEM::SetParent(), SCH_LINE::SetStartPoint(), SCH_LINE::SetStroke(), SCH_SCREEN::SetTitleBlock(), SEXPR_SCHEMATIC_FILE_VERSION, LIB_SYMBOL::UpdateFieldOrdinals(), and SCH_SCREEN::UpdateLocalLibSymbolLinks().

Referenced by SCH_SEXPR_PLUGIN::LoadContent(), SCH_SEXPR_PLUGIN::loadFile(), and KI_TEST::LoadSheetSchematicContents().

◆ parseSchematicSymbol()

◆ parseSchField()

◆ parseSchPolyLine()

◆ parseSchRectangle()

SCH_SHAPE * SCH_SEXPR_PARSER::parseSchRectangle ( )
private

◆ parseSchSheetInstances()

◆ parseSchSheetPin()

SCH_SHEET_PIN * SCH_SEXPR_PARSER::parseSchSheetPin ( SCH_SHEET aSheet)
private

Definition at line 2023 of file sch_sexpr_parser.cpp.

References _, name, parseDouble(), parseEDA_TEXT(), parseKIID(), parseXY(), and THROW_PARSE_ERROR.

Referenced by parseSheet().

◆ parseSchSymbolInstances()

◆ parseSchText()

◆ parseSchTextBox()

◆ parseSheet()

◆ parseStroke()

void SCH_SEXPR_PARSER::parseStroke ( STROKE_PARAMS aStroke)
private

◆ ParseSymbol()

◆ parseText()

LIB_TEXT * SCH_SEXPR_PARSER::parseText ( )
private

◆ parseTextBox()

◆ parseTITLE_BLOCK()

void SCH_SEXPR_PARSER::parseTITLE_BLOCK ( TITLE_BLOCK aTitleBlock)
private

◆ parseXY()

Member Data Documentation

◆ m_appending

bool SCH_SEXPR_PARSER::m_appending
private

Appending load status.

Definition at line 209 of file sch_sexpr_parser.h.

Referenced by parseSchSheetInstances(), and parseSchSymbolInstances().

◆ m_convert

int SCH_SEXPR_PARSER::m_convert
private

The current body style being parsed.

Definition at line 207 of file sch_sexpr_parser.h.

Referenced by parseArc(), parseBezier(), parseCircle(), ParseLib(), parsePin(), parsePolyLine(), parseRectangle(), ParseSymbol(), and parseText().

◆ m_fieldId

int SCH_SEXPR_PARSER::m_fieldId
private

The current field ID.

Definition at line 205 of file sch_sexpr_parser.h.

Referenced by parseSchematicSymbol(), and ParseSymbol().

◆ m_fieldIDsRead

std::set<int> SCH_SEXPR_PARSER::m_fieldIDsRead
private

Field IDs that have been read so far for the current symbol.

Definition at line 212 of file sch_sexpr_parser.h.

Referenced by parseProperty(), parseSchematicSymbol(), and ParseSymbol().

◆ m_lastProgressLine

unsigned SCH_SEXPR_PARSER::m_lastProgressLine
private

Definition at line 218 of file sch_sexpr_parser.h.

Referenced by checkpoint().

◆ m_lineCount

unsigned SCH_SEXPR_PARSER::m_lineCount
private

Definition at line 219 of file sch_sexpr_parser.h.

Referenced by checkpoint().

◆ m_lineReader

const LINE_READER* SCH_SEXPR_PARSER::m_lineReader
private

Definition at line 217 of file sch_sexpr_parser.h.

Referenced by checkpoint().

◆ m_progressReporter

PROGRESS_REPORTER* SCH_SEXPR_PARSER::m_progressReporter
private

Definition at line 216 of file sch_sexpr_parser.h.

Referenced by checkpoint().

◆ m_requiredVersion

int SCH_SEXPR_PARSER::m_requiredVersion
private

◆ m_rootSheet

SCH_SHEET* SCH_SEXPR_PARSER::m_rootSheet
private

The rootsheet for full project loads or null for importing a schematic.

Definition at line 224 of file sch_sexpr_parser.h.

Referenced by ParseSchematic().

◆ m_rootUuid

KIID SCH_SEXPR_PARSER::m_rootUuid
private

◆ m_symbolName

wxString SCH_SEXPR_PARSER::m_symbolName
private

The current symbol name.

Definition at line 208 of file sch_sexpr_parser.h.

Referenced by ParseSymbol().

◆ m_unit

int SCH_SEXPR_PARSER::m_unit
private

The current unit being parsed.

Definition at line 206 of file sch_sexpr_parser.h.

Referenced by parseArc(), parseBezier(), parseCircle(), ParseLib(), parsePin(), parsePolyLine(), parseRectangle(), ParseSymbol(), and parseText().

◆ m_uuids

std::set<KIID> SCH_SEXPR_PARSER::m_uuids
private

Definition at line 214 of file sch_sexpr_parser.h.

Referenced by parseKIID().


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