25#include <template_fieldnames_lexer.h>
28using namespace TFIELD_T;
31#define REFERENCE_UNTRANSLATED "Reference"
32#define VALUE_UNTRANSLATED "Value"
33#define FOOTPRINT_UNTRANSLATED "Footprint"
34#define DATASHEET_UNTRANSLATED "Datasheet"
35#define DESCRIPTION_UNTRANSLATED "Description"
36#define SHEET_NAME_UNTRANSLATED "Sheetname"
37#define SHEET_FILE_UNTRANSLATED "Sheetfile"
38#define INTERSHEET_REFS_UNTRANSLATED "Intersheetrefs"
39#define USER_FIELD_UNTRANSLATED_FORMAT "Field%d"
96 std::initializer_list<FIELD_T> aMandatoryFields )
103 if( aLhs.CmpNoCase( aRhs ) != 0 )
108 for(
FIELD_T fieldId : aMandatoryFields )
129 out->
Print(
" visible" );
132 out->
Print(
" url" );
144 if( ( tok = in->NextTok() ) != T_name )
145 in->Expecting( T_name );
147 in->NeedSYMBOLorNUMBER();
153 while( (tok = in->NextTok() ) != T_RIGHT && tok != T_EOF )
163 in->NeedSYMBOLorNUMBER();
176 in->Expecting(
"value|url|visible" );
187 out->
Print(
"(templatefields" );
189 const std::vector<TEMPLATE_FIELDNAME>& source = aScope == SCOPE::GLOBAL ?
m_globals :
m_project;
193 if( !temp.m_Name.IsEmpty() )
205 while( ( tok = in->NextTok() ) != T_RIGHT && tok != T_EOF )
212 case T_templatefields:
228 if( !field.
m_Name.IsEmpty() )
234 in->Unexpected( in->CurText() );
254 bool overriddenInProject =
false;
258 if( global.m_Name ==
project.m_Name )
260 overriddenInProject =
true;
265 if( !overriddenInProject )
284 std::vector<TEMPLATE_FIELDNAME>& target = aScope == SCOPE::GLOBAL ?
m_globals :
m_project;
289 if( temp.m_Name == aFieldName.
m_Name )
299 target.push_back( aFieldName );
306 TEMPLATE_FIELDNAMES_LEXER field_lexer(
TO_UTF8( aSerializedFieldNames ) );
310 parse( &field_lexer, aScope );
320 if( aScope == SCOPE::GLOBAL )
346 if( aScope == SCOPE::GLOBAL )
360 if( field.m_Name == aName )
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
void AddTemplateFieldName(const TEMPLATE_FIELDNAME &aFieldName, SCOPE aScope)
Insert or append a wanted symbol field name into the field names template.
const std::vector< TEMPLATE_FIELDNAME > & GetResolvedTemplateFieldNames()
Return the resolved project and global template field name list for read only access.
std::vector< TEMPLATE_FIELDNAME > m_resolved
void resolveTemplates()
Flatten project and global templates into a single list.
std::vector< TEMPLATE_FIELDNAME > m_project
void AddTemplateFieldNames(const wxString &aSerializedFieldNames, SCOPE aScope)
Add a serialized list of template field names.
const std::vector< TEMPLATE_FIELDNAME > & GetTemplateFieldNames(SCOPE aScope)
Return a specific list (global or project) for read only access.
const TEMPLATE_FIELDNAME * GetFieldName(const wxString &aName)
Search for aName in the template field name list.
void Format(OUTPUTFORMATTER *out, SCOPE aScope) const
Serialize this object out as text into the given OUTPUTFORMATTER.
void DeleteFieldNameTemplates(SCOPE aScope)
Delete the contents of a scope.
std::vector< TEMPLATE_FIELDNAME > m_globals
void parse(TEMPLATE_FIELDNAMES_LEXER *in, SCOPE aScope)
wxString From_UTF8(const char *cstring)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Hold a name of a symbol's field, field value, and default visibility.
void Format(OUTPUTFORMATTER *out) const
Serialize this object out as text into the given OUTPUTFORMATTER.
void Parse(TEMPLATE_FIELDNAMES_LEXER *aSpec)
Fill this object from information in the input stream aSpec, which is a #TEMPLATE_FIELDNAMES_LEXER.
#define INTERSHEET_REFS_UNTRANSLATED
static wxString s_UntranslatedSheetFile(SHEET_FILE_UNTRANSLATED)
static wxString s_UntranslatedFootprint(FOOTPRINT_UNTRANSLATED)
#define DESCRIPTION_UNTRANSLATED
bool FieldNamesAreDuplicates(const wxString &aLhs, const wxString &aRhs, std::initializer_list< FIELD_T > aMandatoryFields)
Test whether two field names should be treated as duplicates for the purposes of field name uniquenes...
#define SHEET_FILE_UNTRANSLATED
#define REFERENCE_UNTRANSLATED
static wxString s_UntranslatedIntersheetRefs(INTERSHEET_REFS_UNTRANSLATED)
static wxString s_UntranslatedValue(VALUE_UNTRANSLATED)
#define VALUE_UNTRANSLATED
static wxString s_UntranslatedSheetName(SHEET_NAME_UNTRANSLATED)
#define SHEET_NAME_UNTRANSLATED
wxString GetUserFieldName(int aFieldNdx, TRANSLATION aTranslation)
static wxString s_UntranslatedDatasheet(DATASHEET_UNTRANSLATED)
static wxString s_UntranslatedDescription(DESCRIPTION_UNTRANSLATED)
#define FOOTPRINT_UNTRANSLATED
#define USER_FIELD_UNTRANSLATED_FORMAT
static wxString s_UntranslatedReference(REFERENCE_UNTRANSLATED)
wxString GetDefaultFieldName(FIELD_T aFieldId, TRANSLATION aTranslation)
Return a default symbol field name for a mandatory field type.
#define DATASHEET_UNTRANSLATED
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ INTERSHEET_REFS
Global label cross-reference page numbers.
@ DESCRIPTION
Field Description of part, i.e. "1/4W 1% Metal Film Resistor".
@ FOOTPRINT
Field Name Module PCB, i.e. "16DIP300".
@ DATASHEET
name of datasheet
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
KICOMMON_API wxString GetDefaultFieldName(FIELD_T aFieldId, TRANSLATION aTranslation)
Return a default symbol field name for a mandatory field type.