KiCad PCB EDA Suite
LIB_ID Class Reference

A logical library item identifier and consists of various portions much like a URI. More...

#include <lib_id.h>

Public Member Functions

 LIB_ID ()
 
 LIB_ID (const wxString &aLibraryName, const wxString &aItemName)
 This LIB_ID ctor is a special version which ignores the parsing due to symbol names allowing '/' as a valid character. More...
 
int Parse (const UTF8 &aId, bool aFix=false)
 Parse LIB_ID with the information from aId. More...
 
const UTF8GetLibNickname () const
 Return the logical library name portion of a LIB_ID. More...
 
int SetLibNickname (const UTF8 &aNickname)
 Override the logical library name portion of the LIB_ID to aNickname. More...
 
const UTF8GetLibItemName () const
 
const wxString GetUniStringLibItemName () const
 Get strings for display messages in dialogs. More...
 
int SetLibItemName (const UTF8 &aLibItemName)
 Override the library item name portion of the LIB_ID to aLibItemName. More...
 
UTF8 Format () const
 
wxString GetUniStringLibId () const
 
bool IsValid () const
 Check if this LID_ID is valid. More...
 
bool IsLegacy () const
 
void clear ()
 Clear the contents of the library nickname, library entry name, and revision strings. More...
 
bool empty () const
 
int compare (const LIB_ID &aLibId) const
 Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname, library entry name, and revision strings respectively. More...
 
bool operator< (const LIB_ID &aLibId) const
 
bool operator > (const LIB_ID &aLibId) const
 
bool operator== (const LIB_ID &aLibId) const
 
bool operator != (const LIB_ID &aLibId) const
 

Static Public Member Functions

static UTF8 Format (const UTF8 &aLibraryName, const UTF8 &aLibItemName)
 
static int HasIllegalChars (const UTF8 &aLibItemName)
 Examine aLibItemName for invalid LIB_ID item name characters. More...
 
static UTF8 FixIllegalChars (const UTF8 &aLibItemName, bool aLib)
 Replace illegal LIB_ID item name characters with underscores '_'. More...
 
static unsigned FindIllegalLibraryNameChar (const UTF8 &aLibraryName)
 Looks for characters that are illegal in library nicknames. More...
 

Static Protected Member Functions

static bool isLegalChar (unsigned aUniChar)
 Tests whether a Unicode character is a legal LIB_ID item name character. More...
 
static bool isLegalLibraryNameChar (unsigned aUniChar)
 Tests whether a Unicode character is a legal LIB_ID library nickname character. More...
 

Protected Attributes

UTF8 m_libraryName
 The nickname of the library or empty. More...
 
UTF8 m_itemName
 The name of the entry in the logical library. More...
 

Detailed Description

A logical library item identifier and consists of various portions much like a URI.

It consists of of triad of the library nickname, the name of the item in the library, and an optional revision of the item. This is a generic library identifier that can be used for any type of library that contains multiple named items such as footprint or symbol libraries.

Example LIB_ID string: "smt:R_0805/rev0".

  • "smt" is the logical library name used to look up library information saved in the LIB_TABLE.
  • "R" is the name of the item within the library.
  • "rev0" is the revision, which is optional. If missing then its delimiter should also not be present. A revision must begin with "rev" and be followed by at least one or more decimal digits.
Author
Dick Hollenbeck

Definition at line 51 of file lib_id.h.

Constructor & Destructor Documentation

◆ LIB_ID() [1/2]

LIB_ID::LIB_ID ( )
inline

Definition at line 54 of file lib_id.h.

54 {}

◆ LIB_ID() [2/2]

LIB_ID::LIB_ID ( const wxString &  aLibraryName,
const wxString &  aItemName 
)

This LIB_ID ctor is a special version which ignores the parsing due to symbol names allowing '/' as a valid character.

This was causing the symbol names to be truncated at the first occurrence of '/' in the symbol name.

Parameters
aLibraryNameis the library name used to look up the library item in the LIB_TABLE.
aItemNameis the name of the library item which is not parsed by the standard LIB_ID::Parse() function.

Definition at line 90 of file lib_id.cpp.

90  :
91  m_libraryName( aLibraryName ),
92  m_itemName( aItemName )
93 {
94 }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259

Member Function Documentation

◆ clear()

void LIB_ID::clear ( )

Clear the contents of the library nickname, library entry name, and revision strings.

Definition at line 42 of file lib_id.cpp.

43 {
45  m_itemName.clear();
46 }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259
void clear()
Definition: utf8.h:108

References UTF8::clear(), m_itemName, and m_libraryName.

Referenced by FOOTPRINT_PREVIEW_WIDGET::DisplayFootprint(), and Parse().

◆ compare()

int LIB_ID::compare ( const LIB_ID aLibId) const

Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname, library entry name, and revision strings respectively.

Parameters
aLibIdis the LIB_ID to compare against.
Returns
-1 if less than aLibId, 1 if greater than aLibId, and 0 if equal to aLibId.

Definition at line 158 of file lib_id.cpp.

159 {
160  // Don't bother comparing the same object.
161  if( this == &aLibId )
162  return 0;
163 
164  int retv = m_libraryName.compare( aLibId.m_libraryName );
165 
166  if( retv != 0 )
167  return retv;
168 
169  return m_itemName.compare( aLibId.m_itemName );
170 }
int compare(const std::string &s) const
Definition: utf8.h:111
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259

References UTF8::compare(), m_itemName, and m_libraryName.

Referenced by LIB_SYMBOL::Compare(), operator >(), operator<(), and operator==().

◆ empty()

bool LIB_ID::empty ( ) const
inline
Returns
a boolean true value if the LIB_ID is empty. Otherwise return false.

Definition at line 180 of file lib_id.h.

181  {
182  return m_libraryName.empty() && m_itemName.empty();
183  }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259
bool empty() const
Definition: utf8.h:103

References UTF8::empty(), m_itemName, and m_libraryName.

Referenced by BOARD_NETLIST_UPDATER::addNewFootprint(), CVPCB_ASSOCIATION_TOOL::Associate(), CVPCB_MAINFRAME::AssociateFootprint(), CVPCB_MAINFRAME::AutomaticFootprintMatching(), CVPCB_MAINFRAME::GetComponentIndices(), CMP_READER::Load(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), BOARD_NETLIST_UPDATER::replaceFootprint(), and DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser().

◆ FindIllegalLibraryNameChar()

unsigned LIB_ID::FindIllegalLibraryNameChar ( const UTF8 aLibraryName)
static

Looks for characters that are illegal in library nicknames.

Parameters
aLibraryNameis the logical library name to be tested.
Returns
Invalid character found in the name or 0 is the name is valid.

Definition at line 240 of file lib_id.cpp.

241 {
242  for( unsigned ch : aLibraryName )
243  {
244  if( !isLegalLibraryNameChar( ch ) )
245  return ch;
246  }
247 
248  return 0;
249 }
static bool isLegalLibraryNameChar(unsigned aUniChar)
Tests whether a Unicode character is a legal LIB_ID library nickname character.
Definition: lib_id.cpp:252

References isLegalLibraryNameChar().

Referenced by PANEL_SYM_LIB_TABLE::verifyTables(), and PANEL_FP_LIB_TABLE::verifyTables().

◆ FixIllegalChars()

UTF8 LIB_ID::FixIllegalChars ( const UTF8 aLibItemName,
bool  aLib 
)
static

Replace illegal LIB_ID item name characters with underscores '_'.

Parameters
aLibItemNameis the LIB_ID item name to replace illegal characters.
aLibTrue if we are checking library names, false if we are checking item names
Returns
the corrected version of aLibItemName.

Definition at line 189 of file lib_id.cpp.

190 {
191  UTF8 fixedName;
192 
193  for( UTF8::uni_iter chIt = aLibItemName.ubegin(); chIt < aLibItemName.uend(); ++chIt )
194  {
195  auto ch = *chIt;
196  if( aLib )
197  fixedName += isLegalLibraryNameChar( ch ) ? ch : '_';
198  else
199  fixedName += isLegalChar( ch ) ? ch : '_';
200  }
201 
202  return fixedName;
203 }
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
Definition: utf8.h:70
uni_iter uend() const
Return a uni_iter initialized to the end of "this" UTF8 byte sequence.
Definition: utf8.h:287
static bool isLegalLibraryNameChar(unsigned aUniChar)
Tests whether a Unicode character is a legal LIB_ID library nickname character.
Definition: lib_id.cpp:252
static bool isLegalChar(unsigned aUniChar)
Tests whether a Unicode character is a legal LIB_ID item name character.
Definition: lib_id.cpp:206
uni_iter ubegin() const
Returns a uni_iter initialized to the start of "this" UTF8 byte sequence.
Definition: utf8.h:279
uni_iter is a non-mutating iterator that walks through unicode code points in the UTF8 encoded string...
Definition: utf8.h:203

References isLegalChar(), isLegalLibraryNameChar(), UTF8::ubegin(), and UTF8::uend().

Referenced by PANEL_SYM_LIB_TABLE::browseLibrariesHandler(), PANEL_FP_LIB_TABLE::browseLibrariesHandler(), RESCUE_CASE_CANDIDATE::FindRescues(), RESCUE_CACHE_CANDIDATE::FindRescues(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues(), SCH_ALTIUM_PLUGIN::getLibName(), SCH_EAGLE_PLUGIN::getLibName(), CADSTAR_SCH_ARCHIVE_PLUGIN::Load(), and Parse().

◆ Format() [1/2]

UTF8 LIB_ID::Format ( ) const
Returns
the fully formatted text of the LIB_ID in a UTF8 string.

Definition at line 116 of file lib_id.cpp.

117 {
118  UTF8 ret;
119 
120  if( m_libraryName.size() )
121  {
122  ret += m_libraryName;
123  ret += ':';
124  }
125 
126  ret += m_itemName;
127 
128  return ret;
129 }
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
Definition: utf8.h:70
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259
std::string::size_type size() const
Definition: utf8.h:110

References m_itemName, m_libraryName, and UTF8::size().

Referenced by SCH_SCREEN::AddLibSymbol(), BOARD_NETLIST_UPDATER::addNewFootprint(), CVPCB_ASSOCIATION_TOOL::Associate(), CVPCB_MAINFRAME::AssociateFootprint(), CVPCB_MAINFRAME::BuildSymbolsListBox(), CreateDevicesSection(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues(), SYMBOL_LIB::FindSymbol(), SCH_SEXPR_PLUGIN::Format(), COMPONENT::Format(), PCB_IO::format(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::GetActionDescription(), SCH_SYMBOL::GetSchSymbolLibraryName(), GetUniStringLibId(), PCB_EDIT_FRAME::LoadFootprints(), DSN::SPECCTRA_DB::makeIMAGE(), SCH_ALTIUM_PLUGIN::ParseImplementation(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::PerformAction(), DIALOG_EXCHANGE_FOOTPRINTS::processFootprint(), DIALOG_CHANGE_SYMBOLS::processSymbol(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), CVPCB_MAINFRAME::refreshAfterSymbolSearch(), BOARD_NETLIST_UPDATER::replaceFootprint(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE(), SCH_SEXPR_PLUGIN::saveSymbol(), SCH_LEGACY_PLUGIN::saveSymbol(), SCH_SEXPR_PLUGIN_CACHE::SaveSymbol(), PCB_BASE_FRAME::SelectFootprintFromLibTree(), DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser(), FOOTPRINTS_LISTBOX::SetSelectedFootprint(), SYMBOL_CANDIDATE::SYMBOL_CANDIDATE(), BOARD_NETLIST_UPDATER::testConnectivity(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataToWindow(), BOARD_NETLIST_UPDATER::UpdateNetlist(), FOOTPRINT_EDIT_FRAME::UpdateTitle(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ Format() [2/2]

UTF8 LIB_ID::Format ( const UTF8 aLibraryName,
const UTF8 aLibItemName 
)
static
Returns
a string in the proper format as an LIB_ID for a combination of aLibraryName, aLibItemName, and aRevision.
Exceptions
PARSE_ERRORif any of the pieces are illegal.

Definition at line 132 of file lib_id.cpp.

133 {
134  UTF8 ret;
135  int offset;
136 
137  if( aLibraryName.size() )
138  {
139  offset = okLogical( aLibraryName );
140 
141  if( offset != -1 )
142  {
143  THROW_PARSE_ERROR( _( "Illegal character found in logical library name" ),
144  wxString::FromUTF8( aLibraryName.c_str() ), aLibraryName.c_str(),
145  0, offset );
146  }
147 
148  ret += aLibraryName;
149  ret += ':';
150  }
151 
152  ret += aLibItemName; // TODO: Add validity test.
153 
154  return ret;
155 }
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
Definition: utf8.h:70
static int okLogical(const UTF8 &aField)
Definition: lib_id.cpp:34
const char * c_str() const
Definition: utf8.h:102
#define THROW_PARSE_ERROR(aProblem, aSource, aInputLine, aLineNumber, aByteIndex)
Definition: ki_exception.h:164
#define _(s)
std::string::size_type size() const
Definition: utf8.h:110

References _, UTF8::c_str(), okLogical(), UTF8::size(), and THROW_PARSE_ERROR.

◆ GetLibItemName()

const UTF8& LIB_ID::GetLibItemName ( ) const
inline
Returns
the library item name, i.e. footprintName, in UTF8.

Definition at line 104 of file lib_id.h.

104 { return m_itemName; }
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259

References m_itemName.

Referenced by FOOTPRINT_EDIT_FRAME::AddFootprintToBoard(), BASIC_FOOTPRINT_INFO::BASIC_FOOTPRINT_INFO(), FOOTPRINT_EDIT_FRAME::canCloseWindow(), FOOTPRINT_EDIT_FRAME::ClearModify(), SCH_REFERENCE::CompareLibName(), SYMBOL_EDIT_FRAME::CopySymbolToClipboard(), FOOTPRINT_EDIT_FRAME::DeleteFootprintFromLibrary(), SYMBOL_EDIT_FRAME::DeleteSymbolFromLibrary(), FOOTPRINT_PREVIEW_PANEL::DisplayFootprint(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), SYMBOL_EDIT_FRAME::DuplicateSymbol(), SYMBOL_EDITOR_CONTROL::EditSymbol(), PCB_EDIT_FRAME::ExchangeFootprint(), FOOTPRINT_EDIT_FRAME::ExportFootprint(), LIB_TREE_MODEL_ADAPTER::FindItem(), SYMBOL_LIBS::FindLibSymbol(), RESCUE_CASE_CANDIDATE::FindRescues(), RESCUE_CACHE_CANDIDATE::FindRescues(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues(), FP_LIB_TABLE::FootprintLoadWithOptionalNickname(), PCB_IO::FootprintSave(), FP_LIB_TABLE::FootprintSave(), PCB_IO::format(), FOOTPRINT_INFO_GENERATOR::GenerateHtml(), PLACE_FILE_EXPORTER::GenPositionData(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::GetActionDescription(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), FOOTPRINT_LIST::GetFootprintInfo(), SYMBOL_EDIT_FRAME::getTargetSymbol(), FP_TREE_SYNCHRONIZING_ADAPTER::GetValue(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetValue(), guessNickname(), SYMBOL_EDITOR_CONTROL::Init(), FOOTPRINT_EDITOR_CONTROL::Init(), SYMBOL_EDIT_FRAME::isCurrentSymbol(), LEGACY_PLUGIN::loadFOOTPRINT(), PCB_EDIT_FRAME::LoadFootprints(), LEGACY_PLUGIN::loadFP_SHAPE(), LEGACY_PLUGIN::loadPAD(), SYMBOL_LIB_TABLE::LoadSymbol(), SYMBOL_EDIT_FRAME::LoadSymbol(), SYMBOL_LIB_TABLE::LoadSymbolWithOptionalNickname(), NETLIST_EXPORTER_XML::makeSymbols(), DIALOG_EDIT_SYMBOLS_LIBID::onClickOrphansButton(), PCB_EDIT_FRAME::OpenProjectFiles(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::PerformAction(), SCH_BASE_FRAME::PickSymbolFromLibBrowser(), DIALOG_CHOOSE_SYMBOL::PopulateFootprintSelector(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), CVPCB_MAINFRAME::ReadSchematicNetlist(), PCB_EDIT_FRAME::RecreateBOMFileFromBoard(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), SYMBOL_EDIT_FRAME::Revert(), FOOTPRINT_EDITOR_CONTROL::SaveAs(), SYMBOL_EDIT_FRAME::saveCurrentSymbol(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), FOOTPRINT_EDIT_FRAME::SaveFootprintInLibrary(), SYMBOL_LIB_TABLE::SaveSymbol(), SCH_SEXPR_PLUGIN_CACHE::SaveSymbol(), SYMBOL_EDIT_FRAME::saveSymbolAs(), SchGetLibSymbol(), setLibNickname(), LIB_TREE::setState(), FOOTPRINT_EDIT_FRAME::setupUIConditions(), SYMBOL_EDIT_FRAME::setupUIConditions(), DIALOG_CHOOSE_SYMBOL::ShowFootprintFor(), SYMBOL_VIEWER_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), ERC_TESTER::TestLibSymbolIssues(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataToWindow(), SCH_SYMBOL::UpdateFields(), PCB_CONTROL::UpdateMessagePanel(), SYMBOL_LIBRARY_MANAGER::UpdateSymbol(), and FOOTPRINT_EDIT_FRAME::UpdateTitle().

◆ GetLibNickname()

const UTF8& LIB_ID::GetLibNickname ( ) const
inline

Return the logical library name portion of a LIB_ID.

Definition at line 90 of file lib_id.h.

90 { return m_libraryName; }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258

References m_libraryName.

Referenced by SYMBOL_EDITOR_CONTROL::AddSymbol(), BASIC_FOOTPRINT_INFO::BASIC_FOOTPRINT_INFO(), SYMBOL_EDIT_FRAME::CopySymbolToClipboard(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SYMBOL_EDITOR_CONTROL::CutCopyDelete(), FOOTPRINT_EDIT_FRAME::DeleteFootprintFromLibrary(), SYMBOL_EDIT_FRAME::DeleteSymbolFromLibrary(), FOOTPRINT_PREVIEW_PANEL::DisplayFootprint(), CVPCB_MAINFRAME::DisplayStatus(), SYMBOL_PREVIEW_WIDGET::DisplaySymbol(), LIB_TREE_MODEL_ADAPTER::DoAddLibraryNode(), SYMBOL_EDITOR_CONTROL::DuplicateSymbol(), SYMBOL_EDIT_FRAME::DuplicateSymbol(), SYMBOL_EDITOR_CONTROL::EditSymbol(), LIB_TREE_MODEL_ADAPTER::FindItem(), RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues(), FP_LIB_TABLE::FootprintLoadWithOptionalNickname(), FOOTPRINT_INFO_GENERATOR::GenerateHtml(), FP_TREE_SYNCHRONIZING_ADAPTER::GetAttr(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetAttr(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), FOOTPRINT_LIST::GetFootprintInfo(), SCH_SCREENS::GetLibNicknames(), LIB_SYMBOL::GetLibraryName(), FOOTPRINT_EDIT_FRAME::GetLoadedFPID(), SCH_SYMBOL::GetMsgPanelInfo(), SYMBOL_EDIT_FRAME::getTargetLib(), SYMBOL_EDIT_FRAME::getTargetSymbol(), SYMBOL_TREE_SYNCHRONIZING_ADAPTER::GetValue(), guessNickname(), SCH_SCREENS::HasNoFullyDefinedLibIds(), SYMBOL_EDITOR_CONTROL::Init(), FOOTPRINT_EDITOR_CONTROL::Init(), SYMBOL_EDIT_FRAME::isCurrentSymbol(), SYMBOL_LIB_TABLE::LoadSymbol(), SYMBOL_EDIT_FRAME::LoadSymbol(), SYMBOL_LIB_TABLE::LoadSymbolWithOptionalNickname(), NETLIST_EXPORTER_XML::makeSymbols(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), FOOTPRINT_EDITOR_CONTROL::PasteFootprint(), SCH_BASE_FRAME::PickSymbolFromLibBrowser(), DIALOG_CHOOSE_SYMBOL::PopulateFootprintSelector(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), SYMBOL_EDIT_FRAME::Revert(), SYMBOL_EDIT_FRAME::Save(), FOOTPRINT_EDITOR_CONTROL::SaveAs(), SYMBOL_EDIT_FRAME::saveCurrentSymbol(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), SYMBOL_EDIT_FRAME::SaveLibraryAs(), SYMBOL_EDIT_FRAME::saveSymbolAs(), SchGetLibSymbol(), setLibNickname(), LIB_TREE::setState(), SYMBOL_EDIT_FRAME::setupUIConditions(), DIALOG_CHOOSE_SYMBOL::ShowFootprintFor(), SYMBOL_VIEWER_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), ERC_TESTER::TestLibSymbolIssues(), LIB_TREE_NODE_LIB_ID::Update(), PCB_CONTROL::UpdateMessagePanel(), and FOOTPRINT_EDIT_FRAME::UpdateTitle().

◆ GetUniStringLibId()

wxString LIB_ID::GetUniStringLibId ( ) const
inline
Returns
the fully formatted text of the LIB_ID in a wxString (UTF16 or UTF32), suitable to display the LIB_ID in dialogs.

Definition at line 134 of file lib_id.h.

135  {
136  return Format().wx_str();
137  }
UTF8 Format() const
Definition: lib_id.cpp:116
wxString wx_str() const
Definition: utf8.cpp:46

References Format(), and UTF8::wx_str().

Referenced by CVPCB_ASSOCIATION_TOOL::CopyAssoc(), SCH_EDIT_FRAME::CreateArchiveLibrary(), CVPCB_ASSOCIATION_TOOL::CutAssoc(), FOOTPRINT::GetMsgPanelInfo(), SYMBOL_CANDIDATE::GetStringLibId(), and DISPLAY_FOOTPRINTS_FRAME::InitDisplay().

◆ GetUniStringLibItemName()

const wxString LIB_ID::GetUniStringLibItemName ( ) const
inline

Get strings for display messages in dialogs.

Equivalent to m_itemName.wx_str(), but more explicit when building a Unicode string in messages.

Returns
the library item name, i.e. footprintName in a wxString (UTF16 or 32).

Definition at line 114 of file lib_id.h.

114 { return m_itemName.wx_str(); }
wxString wx_str() const
Definition: utf8.cpp:46
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259

References m_itemName, and UTF8::wx_str().

Referenced by SCH_SCREEN::Append(), SCH_EDIT_FRAME::CreateArchiveLibrary(), and SYMBOL_EDIT_FRAME::DeleteSymbolFromLibrary().

◆ HasIllegalChars()

int LIB_ID::HasIllegalChars ( const UTF8 aLibItemName)
static

Examine aLibItemName for invalid LIB_ID item name characters.

Parameters
aLibItemNameis the LIB_ID name to test for illegal characters.
Returns
offset of first illegal character otherwise -1.

Definition at line 173 of file lib_id.cpp.

174 {
175  int offset = 0;
176 
177  for( auto ch : aLibItemName )
178  {
179  if( !isLegalChar( ch ) )
180  return offset;
181  else
182  ++offset;
183  }
184 
185  return -1;
186 }
static bool isLegalChar(unsigned aUniChar)
Tests whether a Unicode character is a legal LIB_ID item name character.
Definition: lib_id.cpp:206

References isLegalChar().

Referenced by RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::FindRescues(), and Parse().

◆ IsLegacy()

bool LIB_ID::IsLegacy ( ) const
inline
Returns
true if the LIB_ID only has the m_itemName name defined.

Definition at line 167 of file lib_id.h.

168  {
169  return m_libraryName.empty() && !m_itemName.empty();
170  }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259
bool empty() const
Definition: utf8.h:103

References UTF8::empty(), m_itemName, and m_libraryName.

Referenced by CVPCB_MAINFRAME::ReadNetListAndFpFiles().

◆ isLegalChar()

bool LIB_ID::isLegalChar ( unsigned  aUniChar)
staticprotected

Tests whether a Unicode character is a legal LIB_ID item name character.

The criteria for legal LIB_ID character is as follows:

  • For both symbol and footprint names, neither '/' or ':' are legal. They are reserved characters used by LIB_ID::Parse.
  • Spaces are allowed in footprint names as they are a legal filename character on all operating systems.
  • Spaces are not allowed in symbol names since symbol names are not quoted in the schematic or symbol library file formats.
  • Spaces are allowed in footprint library nicknames as they are quoted in the footprint library table file format.
  • Spaces are now also allowed in symbol library nicknames since they are quoted in the new symbol library sexpr file format.
  • Illegal file name characters are not allowed in footprint names since the file name is the footprint name.
  • Illegal file name characters except '/' are allowed in symbol names since the name is not the file name.
Note
aUniChar is expected to be a 32 bit Unicode character, not a UTF8 char, that use a variable length coding value.

Definition at line 206 of file lib_id.cpp.

207 {
208  bool const space_allowed = true;
209  bool const illegal_filename_chars_allowed = false;
210 
211  if( aUniChar < ' ' )
212  return false;
213 
214  // This list of characters is also duplicated in validators.cpp and footprint.cpp
215  // TODO: Unify forbidden character lists
216  switch( aUniChar )
217  {
218  case ':':
219  case '\t':
220  case '\n':
221  case '\r':
222  return false;
223 
224  case '/':
225  case '\\':
226  case '<':
227  case '>':
228  case '"':
229  return illegal_filename_chars_allowed;
230 
231  case ' ':
232  return space_allowed;
233 
234  default:
235  return true;
236  }
237 }

Referenced by FixIllegalChars(), and HasIllegalChars().

◆ isLegalLibraryNameChar()

bool LIB_ID::isLegalLibraryNameChar ( unsigned  aUniChar)
staticprotected

Tests whether a Unicode character is a legal LIB_ID library nickname character.

Note
aUniChar is expected to be a 32 bit Unicode character, not a UTF8 char, that use a variable length coding value.

Definition at line 252 of file lib_id.cpp.

253 {
254  bool const space_allowed = true;
255 
256  if( aUniChar < ' ' )
257  return false;
258 
259  switch( aUniChar )
260  {
261  case '\\':
262  case ':':
263  return false;
264 
265  case ' ':
266  return space_allowed;
267 
268  default:
269  return true;
270  }
271 }

Referenced by FindIllegalLibraryNameChar(), and FixIllegalChars().

◆ IsValid()

bool LIB_ID::IsValid ( ) const
inline

Check if this LID_ID is valid.

A valid LIB_ID must have both the library nickname and the library item name defined. The revision field is optional.

Note
A return value of true does not indicated that the LIB_ID is a valid LIB_TABLE entry.
Returns
true is the LIB_ID is valid.

Definition at line 159 of file lib_id.h.

160  {
161  return !m_libraryName.empty() && !m_itemName.empty();
162  }
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259
bool empty() const
Definition: utf8.h:103

References UTF8::empty(), m_itemName, and m_libraryName.

Referenced by SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic(), CVPCB_ASSOCIATION_TOOL::Associate(), CVPCB_MAINFRAME::AssociateFootprint(), CVPCB_ASSOCIATION_TOOL::CopyAssoc(), CVPCB_ASSOCIATION_TOOL::CutAssoc(), FOOTPRINT_EDIT_FRAME::DeleteFootprintFromLibrary(), FOOTPRINT_EDITOR_CONTROL::ExportFootprint(), FOOTPRINT_INFO_GENERATOR::GenerateHtml(), SYMBOL_EDIT_FRAME::getTargetSymbol(), DIALOG_CHOOSE_FOOTPRINT::OnComponentPreselected(), DIALOG_CHOOSE_FOOTPRINT::OnComponentSelected(), DIALOG_CHOOSE_SYMBOL::OnComponentSelected(), CVPCB_MAINFRAME::OnSelectComponent(), SCH_BASE_FRAME::PickSymbolFromLibBrowser(), SCH_BASE_FRAME::PickSymbolFromLibTree(), SCH_DRAWING_TOOLS::PlaceSymbol(), DIALOG_CHOOSE_SYMBOL::PopulateFootprintSelector(), DIALOG_EXCHANGE_FOOTPRINTS::processMatchingFootprints(), DIALOG_CHANGE_SYMBOLS::processMatchingSymbols(), DIALOG_CHANGE_SYMBOLS::processSymbol(), FOOTPRINT_EDIT_FRAME::RegenerateLibraryTree(), SYMBOL_EDIT_FRAME::RegenerateLibraryTree(), PCB_BASE_FRAME::SelectFootprintFromLibTree(), DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser(), DIALOG_CHOOSE_SYMBOL::ShowFootprint(), SYMBOL_VIEWER_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), LIB_TREE_MODEL_ADAPTER::ShowPreselect(), SYMBOL_EDIT_FRAME::SyncLibraries(), DIALOG_CHANGE_SYMBOLS::updateFieldsList(), and FOOTPRINT_EDIT_FRAME::UpdateTitle().

◆ operator !=()

bool LIB_ID::operator != ( const LIB_ID aLibId) const
inline

Definition at line 197 of file lib_id.h.

197 { return !(*this == aLibId); }

◆ operator >()

bool LIB_ID::operator > ( const LIB_ID aLibId) const
inline

Definition at line 195 of file lib_id.h.

195 { return this->compare( aLibId ) > 0; }
int compare(const LIB_ID &aLibId) const
Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname...
Definition: lib_id.cpp:158

References compare().

◆ operator<()

bool LIB_ID::operator< ( const LIB_ID aLibId) const
inline

Definition at line 194 of file lib_id.h.

194 { return this->compare( aLibId ) < 0; }
int compare(const LIB_ID &aLibId) const
Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname...
Definition: lib_id.cpp:158

References compare().

◆ operator==()

bool LIB_ID::operator== ( const LIB_ID aLibId) const
inline

Definition at line 196 of file lib_id.h.

196 { return this->compare( aLibId ) == 0; }
int compare(const LIB_ID &aLibId) const
Compare the contents of LIB_ID objects by performing a std::string comparison of the library nickname...
Definition: lib_id.cpp:158

References compare().

◆ Parse()

int LIB_ID::Parse ( const UTF8 aId,
bool  aFix = false 
)

Parse LIB_ID with the information from aId.

A typical LIB_ID string consists of a library nickname followed by a library item name. e.g.: "smt:R_0805", or e.g.: "mylib:R_0805", or e.g.: "ttl:7400"

Parameters
aIdis the string to populate the LIB_ID object.
aFixindicates invalid chars should be replaced with '_'.
Returns
minus 1 (i.e. -1) means success, >= 0 indicates the character offset into aId at which an error was detected.

Definition at line 49 of file lib_id.cpp.

50 {
51  clear();
52 
53  size_t partNdx;
54  int offset = -1;
55 
56  //=====<library nickname>=============================
57  if( ( partNdx = aId.find( ':' ) ) != aId.npos )
58  {
59  offset = SetLibNickname( aId.substr( 0, partNdx ) );
60 
61  if( offset > -1 )
62  return offset;
63 
64  ++partNdx; // skip ':'
65  }
66  else
67  {
68  partNdx = 0;
69  }
70 
71  //=====<item name>====================================
72  UTF8 fpname = aId.substr( partNdx );
73 
74  // Be sure the item name is valid.
75  // Some chars can be found in legacy files converted files from other EDA tools.
76  if( aFix )
77  fpname = FixIllegalChars( fpname, false );
78  else
79  offset = HasIllegalChars( fpname );
80 
81  if( offset > -1 )
82  return offset;
83 
84  SetLibItemName( fpname );
85 
86  return -1;
87 }
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
Definition: utf8.h:70
static constexpr std::string::size_type npos
Definition: utf8.h:151
static UTF8 FixIllegalChars(const UTF8 &aLibItemName, bool aLib)
Replace illegal LIB_ID item name characters with underscores '_'.
Definition: lib_id.cpp:189
std::string::size_type find(char c) const
Definition: utf8.h:105
int SetLibItemName(const UTF8 &aLibItemName)
Override the library item name portion of the LIB_ID to aLibItemName.
Definition: lib_id.cpp:108
void clear()
Clear the contents of the library nickname, library entry name, and revision strings.
Definition: lib_id.cpp:42
int SetLibNickname(const UTF8 &aNickname)
Override the logical library name portion of the LIB_ID to aNickname.
Definition: lib_id.cpp:97
static int HasIllegalChars(const UTF8 &aLibItemName)
Examine aLibItemName for invalid LIB_ID item name characters.
Definition: lib_id.cpp:173
std::string substr(size_t pos=0, size_t len=npos) const
Definition: utf8.h:178

References clear(), UTF8::find(), FixIllegalChars(), HasIllegalChars(), UTF8::npos, SetLibItemName(), SetLibNickname(), and UTF8::substr().

Referenced by PCAD2KICAD::PCB_FOOTPRINT::AddToBoard(), AltiumToKiCadLibID(), CVPCB_ASSOCIATION_TOOL::Associate(), CVPCB_ASSOCIATION_TOOL::CopyAssoc(), CVPCB_ASSOCIATION::CVPCB_ASSOCIATION(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), FOOTPRINT_LIST::GetFootprintInfo(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), CMP_READER::Load(), LEGACY_PLUGIN::loadAllSections(), CADSTAR_PCB_ARCHIVE_LOADER::loadComponentLibrary(), FABMASTER::loadFootprints(), SCH_LEGACY_PLUGIN::loadSymbol(), EAGLE_PLUGIN::makeFootprint(), DIALOG_EDIT_SYMBOLS_LIBID::onClickOrphansButton(), KICAD_NETLIST_PARSER::parseComponent(), PCB_PARSER::parseFOOTPRINT_unchecked(), SCH_SEXPR_PARSER::parseSchematicSymbol(), CVPCB_ASSOCIATION_TOOL::PasteAssoc(), DIALOG_EXCHANGE_FOOTPRINTS::processMatchingFootprints(), DIALOG_CHANGE_SYMBOLS::processMatchingSymbols(), SCH_SEXPR_PLUGIN_CACHE::SaveSymbol(), PCB_BASE_FRAME::SelectFootprintFromLibTree(), DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser(), DIALOG_CHOOSE_SYMBOL::ShowFootprint(), SYMBOL_VIEWER_FRAME::ShowModal(), FOOTPRINT_VIEWER_FRAME::ShowModal(), DIALOG_EDIT_SYMBOLS_LIBID::TransferDataFromWindow(), DIALOG_CHANGE_SYMBOLS::updateFieldsList(), and DIALOG_EDIT_SYMBOLS_LIBID::validateLibIds().

◆ SetLibItemName()

int LIB_ID::SetLibItemName ( const UTF8 aLibItemName)

Override the library item name portion of the LIB_ID to aLibItemName.

Returns
int - minus 1 (i.e. -1) means success, >= 0 indicates the character offset into the parameter at which an error was detected, usually because it contained '/'.

Definition at line 108 of file lib_id.cpp.

109 {
110  m_itemName = aLibItemName;
111 
112  return -1;
113 }
UTF8 m_itemName
The name of the entry in the logical library.
Definition: lib_id.h:259

References m_itemName.

Referenced by BOOST_AUTO_TEST_CASE(), LIB_TREE_NODE_LIB_ID::LIB_TREE_NODE_LIB_ID(), LEGACY_NETLIST_READER::loadComponent(), SCH_LEGACY_PLUGIN::loadSymbol(), Parse(), RESCUE_CASE_CANDIDATE::PerformAction(), RESCUE_CACHE_CANDIDATE::PerformAction(), LIB_SYMBOL::SetName(), SYMBOL_EDIT_FRAME::SyncLibraries(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), and RESCUER::UndoRescues().

◆ SetLibNickname()

int LIB_ID::SetLibNickname ( const UTF8 aNickname)

Override the logical library name portion of the LIB_ID to aNickname.

Returns
int - minus 1 (i.e. -1) means success, >= 0 indicates the character offset into the parameter at which an error was detected, usually because it contained '/' or ':'.

Definition at line 97 of file lib_id.cpp.

98 {
99  int offset = okLogical( aLogical );
100 
101  if( offset == -1 )
102  m_libraryName = aLogical;
103 
104  return offset;
105 }
static int okLogical(const UTF8 &aField)
Definition: lib_id.cpp:34
UTF8 m_libraryName
The nickname of the library or empty.
Definition: lib_id.h:258

References m_libraryName, and okLogical().

Referenced by SCH_SCREENS::ChangeSymbolLibNickname(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), SYMBOL_LIBRARY_MANAGER::LIB_BUFFER::CreateBuffer(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), PCB_EDIT_FRAME::ExportFootprintsToLibrary(), FOOTPRINT_VIEWER_FRAME::FOOTPRINT_VIEWER_FRAME(), guessNickname(), LIB_TREE_NODE_LIB::LIB_TREE_NODE_LIB(), LIB_TREE_NODE_LIB_ID::LIB_TREE_NODE_LIB_ID(), SYMBOL_LIB_TABLE::LoadSymbol(), SYMBOL_LIB_TABLE::LoadSymbolLib(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), PCB_EDIT_FRAME::OpenProjectFiles(), Parse(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), setLibNickname(), and LIB_TREE_NODE_LIB_ID::Update().

Member Data Documentation

◆ m_itemName

UTF8 LIB_ID::m_itemName
protected

The name of the entry in the logical library.

Definition at line 259 of file lib_id.h.

Referenced by clear(), compare(), empty(), Format(), GetLibItemName(), GetUniStringLibItemName(), IsLegacy(), IsValid(), and SetLibItemName().

◆ m_libraryName

UTF8 LIB_ID::m_libraryName
protected

The nickname of the library or empty.

Definition at line 258 of file lib_id.h.

Referenced by clear(), compare(), empty(), Format(), GetLibNickname(), IsLegacy(), IsValid(), and SetLibNickname().


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