60 wxString::Format(
"Cannot use relative file paths in sexpr plugin to "
94 auto formatter = std::make_unique<PRETTIFIED_FILE_OUTPUTFORMATTER>( fn.GetFullPath() );
96 formatter->Print(
"(kicad_symbol_lib (version %d) (generator \"kicad_symbol_editor\") "
97 "(generator_version \"%s\")",
101 std::vector<LIB_SYMBOL*> orderedSymbols;
106 orderedSymbols.push_back( symbol );
110 std::sort( orderedSymbols.begin(), orderedSymbols.end(),
113 unsigned int lhDepth = aLhs->GetInheritanceDepth();
114 unsigned int rhDepth = aRhs->GetInheritanceDepth();
116 if( lhDepth == rhDepth )
117 return aLhs->GetName() < aRhs->GetName();
119 return lhDepth < rhDepth;
125 formatter->Print(
")" );
135 const wxString& aLibName,
bool aIncludeData )
137 wxCHECK_RET( aSymbol,
"Invalid LIB_SYMBOL pointer." );
140 wxCHECK2( wxLocale::GetInfo( wxLOCALE_DECIMAL_POINT, wxLOCALE_CAT_NUMBER ) ==
".",
152 std::vector<SCH_FIELD*> orderedFields;
156 if( !aLibName.IsEmpty() )
162 wxCHECK2( unitId.
Parse( aLibName ) < 0, );
169 aFormatter.
Print(
"(symbol %s",
name.c_str() );
172 aFormatter.
Print(
"(power global)" );
174 aFormatter.
Print(
"(power local)" );
181 aFormatter.
Print(
"(pin_numbers (hide yes))" );
186 aFormatter.
Print(
"(pin_names" );
190 aFormatter.
Print(
"(offset %s)",
198 aFormatter.
Print(
")" );
208 const std::vector<std::set<wxString>>& jumperGroups = aSymbol->
JumperPinGroups();
210 if( !jumperGroups.empty() )
212 aFormatter.
Print(
"(jumper_pin_groups" );
214 for(
const std::set<wxString>&
group : jumperGroups )
216 aFormatter.
Print(
"(" );
218 for(
const wxString& padName :
group )
219 aFormatter.
Print(
"%s ", aFormatter.
Quotew( padName ).c_str() );
221 aFormatter.
Print(
")" );
224 aFormatter.
Print(
")" );
249 std::sort( units.begin(), units.end(),
252 if( a.m_unit == b.m_unit )
253 return a.m_bodyStyle < b.m_bodyStyle;
255 return a.m_unit < b.m_unit;
264 aFormatter.
Print(
"(symbol %s_%d_%d\"",
273 aFormatter.
Print(
"(unit_name %s)", aFormatter.
Quotes(
name ).c_str() );
283 std::multiset<
SCH_ITEM*,
decltype( cmp )> save_map( cmp );
285 for(
SCH_ITEM* item : unit.m_items )
286 save_map.insert( item );
291 aFormatter.
Print(
")" );
301 std::shared_ptr<LIB_SYMBOL> parent = aSymbol->
GetParent().lock();
305 aFormatter.
Print(
"(symbol %s (extends %s)",
307 aFormatter.
Quotew( parent->GetName() ).c_str() );
317 aFormatter.
Print(
")" );
324 wxCHECK_RET( aSymbol,
"Invalid LIB_SYMBOL pointer." );
328 SCH_FIELD keywords(
nullptr, FIELD_T::USER, wxString(
"ki_keywords" ) );
336 if( !fpFilters.IsEmpty() )
340 for(
const wxString&
filter : fpFilters )
348 tmp +=
" " + curr_filter;
351 SCH_FIELD description(
nullptr, FIELD_T::USER, wxString(
"ki_fp_filters" ) );
361 wxCHECK_RET( aItem,
"Invalid SCH_ITEM pointer." );
363 switch( aItem->
Type() )
376 formatArc( &aFormatter, shape, isPrivate, stroke, fillMode, fillColor,
true );
379 case SHAPE_T::CIRCLE:
380 formatCircle( &aFormatter, shape, isPrivate, stroke, fillMode, fillColor,
true );
383 case SHAPE_T::RECTANGLE:
384 formatRect( &aFormatter, shape, isPrivate, stroke, fillMode, fillColor,
true );
387 case SHAPE_T::BEZIER:
388 formatBezier(&aFormatter, shape, isPrivate, stroke, fillMode, fillColor,
true );
392 formatPoly( &aFormatter, shape, isPrivate, stroke, fillMode, fillColor,
true );
422 wxCHECK_RET( aField && aField->
Type() ==
SCH_FIELD_T,
"Invalid SCH_FIELD object." );
424 wxString fieldName = aField->
GetName();
429 aFormatter.
Print(
"(property %s %s %s (at %s %s %g)",
431 aFormatter.
Quotew( fieldName ).c_str(),
440 aFormatter.
Print(
"(show_name)" );
443 aFormatter.
Print(
"(do_not_autoplace)" );
448 aField->
Format( &aFormatter, 0 );
449 aFormatter.
Print(
")" );
455 wxCHECK_RET( aPin && aPin->
Type() ==
SCH_PIN_T,
"Invalid SCH_PIN object." );
459 aFormatter.
Print(
"(pin %s %s (at %s %s %s) (length %s)",
474 aFormatter.
Print(
"(name %s (effects (font (size %s %s))))",
481 aFormatter.
Print(
"(number %s (effects (font (size %s %s))))",
489 for(
const std::pair<const wxString, SCH_PIN::ALT>& alt : aPin->
GetAlternates() )
491 aFormatter.
Print(
"(alternate %s %s %s)",
492 aFormatter.
Quotew( alt.second.m_Name ).c_str(),
497 aFormatter.
Print(
")" );
503 wxCHECK_RET( aText && aText->
Type() ==
SCH_TEXT_T,
"Invalid SCH_TEXT object." );
505 aFormatter.
Print(
"(text %s %s (at %s %s %g)",
514 aText->EDA_TEXT::Format( &aFormatter, 0 );
515 aFormatter.
Print(
")" );
521 wxCHECK_RET( aTextBox && aTextBox->
Type() ==
SCH_TEXTBOX_T,
"Invalid SCH_TEXTBOX object." );
523 aFormatter.
Print(
"(text_box %s %s",
530 aFormatter.
Print(
"(at %s %s %s) (size %s %s) (margins %s %s %s %s)",
543 aTextBox->EDA_TEXT::Format( &aFormatter, 0 );
544 aFormatter.
Print(
")" );
550 LIB_SYMBOL_MAP::iterator it =
m_symbols.find( aSymbolName );
553 THROW_IO_ERROR( wxString::Format(
_(
"library %s does not contain a symbol named %s" ),
565 LIB_SYMBOL_MAP::iterator it1 =
m_symbols.begin();
569 if( it1->second->IsDerived()
570 && it1->second->GetParent().lock() == rootSymbol->
SharedPtr() )
constexpr EDA_IU_SCALE schIUScale
wxString GetMajorMinorVersion()
Get only the major and minor version in a string major.minor.
int AsTenthsOfADegree() const
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
FILL_T GetFillMode() const
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
COLOR4D GetFillColor() const
wxString SHAPE_T_asString() const
const EDA_ANGLE & GetTextAngle() const
virtual const wxString & GetText() const
Return the string associated with the text object.
virtual bool IsVisible() const
virtual void Format(OUTPUTFORMATTER *aFormatter, int aControlBits) const
Output the object to aFormatter in s-expression form.
virtual void SetVisible(bool aVisible)
void WriteEmbeddedFiles(OUTPUTFORMATTER &aOut, bool aWriteData) const
Output formatter for the embedded files.
void ClearEmbeddedFonts()
Remove all embedded fonts from the collection.
const std::map< wxString, EMBEDDED_FILE * > & EmbeddedFileMap() const
bool GetAreFontsEmbedded() const
A LINE_READER that reads from an open file.
A color representation with 4 components: red, green, blue, alpha.
A logical library item identifier and consists of various portions much like a URI.
int Parse(const UTF8 &aId, bool aFix=false)
Parse LIB_ID with the information from aId.
const UTF8 & GetLibItemName() const
Define a library symbol object.
const LIB_ID & GetLibId() const override
wxString GetKeyWords() const override
void GetFields(std::vector< SCH_FIELD * > &aList, bool aVisibleOnly=false) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
bool UnitsLocked() const
Check whether symbol units are interchangeable.
bool IsRoot() const override
For symbols derived from other symbols, IsRoot() indicates no derivation.
std::vector< struct LIB_SYMBOL_UNIT > GetUnitDrawItems()
Return a list of SCH_ITEM objects separated by unit and convert number.
wxString GetUnitDisplayName(int aUnit) override
Return the user-defined display name for aUnit for symbols with units.
bool IsLocalPower() const override
wxArrayString GetFPFilters() const
bool HasUnitDisplayName(int aUnit) override
Return true if the given unit aUnit has a display name defined.
LIB_SYMBOL_SPTR SharedPtr() const
http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/sp_techniques.html#weak_without_shared.
EMBEDDED_FILES * GetEmbeddedFiles() override
bool IsGlobalPower() const override
bool GetDuplicatePinNumbersAreJumpers() const
LIB_SYMBOL_REF & GetParent()
std::vector< std::set< wxString > > & JumperPinGroups()
Each jumper pin group is a set of pin numbers that should be treated as internally connected.
void EmbedFonts() override
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
VECTOR2I GetPosition() const override
wxString GetName(bool aUseDefaultName=true) const
Return the field name (not translated).
bool CanAutoplace() const
void SetText(const wxString &aText) override
int m_fileFormatVersionAtLoad
static void saveSymbolDrawItem(SCH_ITEM *aItem, OUTPUTFORMATTER &aFormatter)
SCH_IO_KICAD_SEXPR_LIB_CACHE(const wxString &aLibraryPath)
static void saveDcmInfoAsFields(LIB_SYMBOL *aSymbol, OUTPUTFORMATTER &aFormatter)
virtual ~SCH_IO_KICAD_SEXPR_LIB_CACHE()
static void SaveSymbol(LIB_SYMBOL *aSymbol, OUTPUTFORMATTER &aFormatter, const wxString &aLibName=wxEmptyString, bool aIncludeData=true)
static void saveTextBox(SCH_TEXTBOX *aTextBox, OUTPUTFORMATTER &aFormatter)
static void saveField(SCH_FIELD *aField, OUTPUTFORMATTER &aFormatter)
void DeleteSymbol(const wxString &aName) override
static void savePin(SCH_PIN *aPin, OUTPUTFORMATTER &aFormatter)
static void saveText(SCH_TEXT *aText, OUTPUTFORMATTER &aFormatter)
void SetFileFormatVersionAtLoad(int aVersion)
void Save(const std::optional< bool > &aOpt=std::nullopt) override
Save the entire library to file m_libFileName;.
Object to parser s-expression symbol library and schematic file formats.
int GetParsedRequiredVersion() const
void ParseLib(LIB_SYMBOL_MAP &aSymbolLibMap)
A base cache assistant implementation for the symbol library portion of the SCH_IO API.
wxDateTime GetLibModificationTime()
wxFileName GetRealFile() const
void IncrementModifyHash()
Base class for any item which can be embedded within the SCHEMATIC container class,...
wxString GetClass() const override
Return the class name.
int GetNumberTextSize() const
const std::map< wxString, ALT > & GetAlternates() const
const wxString & GetName() const
PIN_ORIENTATION GetOrientation() const
VECTOR2I GetPosition() const override
int GetNameTextSize() const
const wxString & GetNumber() const
GRAPHIC_PINSHAPE GetShape() const
ELECTRICAL_PINTYPE GetType() const
STROKE_PARAMS GetStroke() const override
int GetMarginBottom() const
int GetMarginLeft() const
int GetMarginRight() const
VECTOR2I GetPosition() const override
Simple container to manage line stroke parameters.
void Format(OUTPUTFORMATTER *out, const EDA_IU_SCALE &aIuScale) const
bool GetExcludedFromBoard() const
bool GetExcludedFromBOM() const
int GetPinNameOffset() const
virtual bool GetShowPinNames() const
virtual bool GetShowPinNumbers() const
bool GetExcludedFromSim() const override
#define DEFAULT_PIN_NAME_OFFSET
The intersheets references prefix string.
#define IS_CHANGED
Item was edited, and modified.
const wxChar *const traceSchLegacyPlugin
Flag to enable legacy schematic plugin debug output.
#define THROW_IO_ERROR(msg)
This file contains miscellaneous commonly used macros and functions.
#define UNIMPLEMENTED_FOR(type)
KICOMMON_API std::string FormatInternalUnits(const EDA_IU_SCALE &aIuScale, int aValue)
Converts aValue from internal units to a string appropriate for writing to file.
KICOMMON_API std::string FormatAngle(const EDA_ANGLE &aAngle)
Convert aAngle from board units to a string appropriate for writing to file.
#define SEXPR_SYMBOL_LIB_FILE_VERSION
This file contains the file format version information for the s-expression schematic and symbol libr...
EDA_ANGLE getPinAngle(PIN_ORIENTATION aOrientation)
void formatArc(OUTPUTFORMATTER *aFormatter, EDA_SHAPE *aArc, bool aIsPrivate, const STROKE_PARAMS &aStroke, FILL_T aFillMode, const COLOR4D &aFillColor, bool aInvertY, const KIID &aUuid)
void formatCircle(OUTPUTFORMATTER *aFormatter, EDA_SHAPE *aCircle, bool aIsPrivate, const STROKE_PARAMS &aStroke, FILL_T aFillMode, const COLOR4D &aFillColor, bool aInvertY, const KIID &aUuid)
const char * getPinElectricalTypeToken(ELECTRICAL_PINTYPE aType)
void formatBezier(OUTPUTFORMATTER *aFormatter, EDA_SHAPE *aBezier, bool aIsPrivate, const STROKE_PARAMS &aStroke, FILL_T aFillMode, const COLOR4D &aFillColor, bool aInvertY, const KIID &aUuid)
void formatRect(OUTPUTFORMATTER *aFormatter, EDA_SHAPE *aRect, bool aIsPrivate, const STROKE_PARAMS &aStroke, FILL_T aFillMode, const COLOR4D &aFillColor, bool aInvertY, const KIID &aUuid)
void formatPoly(OUTPUTFORMATTER *aFormatter, EDA_SHAPE *aPolyLine, bool aIsPrivate, const STROKE_PARAMS &aStroke, FILL_T aFillMode, const COLOR4D &aFillColor, bool aInvertY, const KIID &aUuid)
void formatFill(OUTPUTFORMATTER *aFormatter, FILL_T aFillMode, const COLOR4D &aFillColor)
Fill token formatting helper.
const char * getPinShapeToken(GRAPHIC_PINSHAPE aShape)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
constexpr int MilsToIU(int mils) const
wxString GetCanonicalFieldName(FIELD_T aFieldType)
wxLogTrace helper definitions.