24#include <magic_enum.hpp>
32constexpr size_t SECTION_COUNT =
static_cast<size_t>(
SECTION::COUNT );
33constexpr size_t MODE_COUNT =
static_cast<size_t>( MODE::COUNT );
41constexpr std::array<std::array<SECTION_RULE, MODE_COUNT>, SECTION_COUNT> TABLE_4 = { {
43 { { O,
N,
N, O, O,
N,
N,
N } },
44 { { O, Y, O, O, Y, Y,
N,
N } },
45 { { O,
N,
N,
N, Y, Y, O,
N } },
46 { { O,
N,
N,
N, Y, Y,
N,
N } },
47 { { O,
N, Y, Y,
N,
N,
N,
N } },
48 { { O,
N, O, Y, Y, Y, Y,
N } },
49 { { O,
N,
N, Y,
N,
N, O,
N } },
50 { { O,
N,
N,
N, O,
N, Y,
N } },
51 { { O,
N,
N, Y, Y, Y, O,
N } },
52 { { O,
N, O, Y, Y, Y, O,
N } },
53 { { O,
N, O, O, O, O, O,
N } },
54 { { O,
N, Y, Y, Y, Y, O,
N } },
55 { { O,
N, Y, Y,
N,
N,
N,
N } },
56 { { O,
N, O, O,
N,
N,
N,
N } },
57 { { O,
N, O, O,
N,
N,
N,
N } },
58 { { O,
N,
N, O, O, O,
N,
N } },
59 { { O,
N,
N, Y, O, Y,
N,
N } },
60 { { O, O, O, O, O, O, O, Y } },
63constexpr std::array<char, SECTION_COUNT> SECTION_KEYS = {
64 'K',
'B',
'C',
'A',
'S',
'U',
'M',
'P',
'L',
'R',
'D',
'O',
'I',
'E',
'F',
'G',
'Y',
'X'
71 for(
size_t ii = 0; ii < SECTION_COUNT; ++ii )
87 return SECTION_KEYS[
static_cast<size_t>( aSection )];
93 for(
size_t ii = 0; ii < SECTION_COUNT; ++ii )
95 if( SECTION_KEYS[ii] == aKey )
96 return static_cast<SECTION>( ii );
105 return TABLE_4[
static_cast<size_t>( aSection )][
static_cast<size_t>( aMode )];
133 case MODE::FABRICATION:
170 return inCadData.any();
178 for(
size_t ii = 0; ii < SECTION_COUNT; ++ii )
180 if( aSet.test( ii ) )
181 key << SECTION_KEYS[ii];
192 for( wxUniChar ch : aKey )
212 std::string_view
name = magic_enum::enum_name( aMode );
213 return wxString::FromAscii(
name.data(),
name.size() );
219 if( aToken.IsEmpty() )
224 return mode == MODE::COUNT ? std::nullopt : std::optional<MODE>( mode );
SECTION_SET & Set(SECTION aSection, bool aOn=true)
static DATA_SET DataSetFromToken(const wxString &aToken)
Read a data set token in upper case or in lower case An empty token is USERDEF.
std::optional< SECTION > SectionFromKeyChar(char aKey)
Return the schema section for a Table 4 key character.
JOB_EXPORT_PCB_FAB::DATA_SET MODE
Columns of Table 4 The job owns the enum so that every layer shares one type.
wxString SectionKeyString(const SECTION_SET &aSet)
Give aSet as a sectionKey attribute value.
SECTION_RULE SectionRule(MODE aMode, SECTION aSection)
Return the Table 4 cell for aMode and aSection.
SECTION_RULE
Table 4 cell values N O and Y.
SECTION
Schema sections of the IPC-2581C function mode table, Table 4 p 80.
SECTION_SET RequiredSections(MODE aMode)
Schema sections that Table 4 marks Y for aMode.
bool SectionSetFromKeyString(const wxString &aKey, SECTION_SET &aResult)
Read a sectionKey attribute value Return false for an unknown character.
SECTION_SET OptionalSections(MODE aMode)
Schema sections that Table 4 marks O for aMode.
SECTION_SET RecommendedOptionalSections(MODE aMode)
Optional schema sections that aMode selects by default.
SECTION_SET UnsupportedSections()
Schema sections that no KiCad board supplies.
std::optional< MODE > ModeFromToken(const wxString &aToken)
Read a Table 4 function mode token in upper case or in lower case.
wxString ModeToken(MODE aMode)
Table 4 function mode token such as FABRICATION.
SECTION_SET LegacySections()
Schema sections of the content that KiCad wrote before the function modes.
bool NeedsCadData(const SECTION_SET &aSet)
True if an included schema section needs an Ecad/CadData element.
char SectionKeyChar(SECTION aSection)
Return the Table 4 key character for aSection.