![]() |
KiCad PCB EDA Suite
|
Object to parser s-expression symbol library and schematic file formats. More...
#include <sch_sexpr_parser.h>
Public Member Functions | |
SCH_SEXPR_PARSER (LINE_READER *aLineReader=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr, unsigned aLineCount=0) | |
void | ParseLib (LIB_SYMBOL_MAP &aSymbolLibMap) |
LIB_SYMBOL * | ParseSymbol (LIB_SYMBOL_MAP &aSymbolLibMap, int aFileVersion=SEXPR_SYMBOL_LIB_FILE_VERSION) |
LIB_ITEM * | ParseDrawItem () |
void | ParseSchematic (SCH_SHEET *aSheet, bool aIsCopyablyOnly=false, int aFileVersion=SEXPR_SCHEMATIC_FILE_VERSION) |
Parse the internal LINE_READER object into aSheet. More... | |
Private Member Functions | |
void | checkpoint () |
KIID | parseKIID () |
void | parseHeader (TSCHEMATIC_T::T aHeaderType, int aFileVersion) |
long | parseHex () |
int | parseInt () |
int | parseInt (const char *aExpected) |
double | parseDouble () |
Parse the current token as an ASCII numeric string with possible leading whitespace into a double precision floating point number. More... | |
double | parseDouble (const char *aExpected) |
double | parseDouble (TSCHEMATIC_T::T aToken) |
int | parseInternalUnits () |
int | parseInternalUnits (const char *aExpected) |
int | parseInternalUnits (TSCHEMATIC_T::T aToken) |
wxPoint | 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_FIELD * | parseProperty (std::unique_ptr< LIB_SYMBOL > &aSymbol) |
LIB_SHAPE * | parseArc () |
LIB_SHAPE * | parseBezier () |
LIB_SHAPE * | parseCircle () |
LIB_PIN * | parsePin () |
LIB_SHAPE * | parsePolyLine () |
LIB_SHAPE * | parseRectangle () |
LIB_TEXT * | parseText () |
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_PIN * | parseSchSheetPin (SCH_SHEET *aSheet) |
SCH_FIELD * | parseSchField (SCH_ITEM *aParent) |
SCH_SYMBOL * | parseSchematicSymbol () |
SCH_BITMAP * | parseImage () |
SCH_SHEET * | parseSheet () |
SCH_JUNCTION * | parseJunction () |
SCH_NO_CONNECT * | parseNoConnect () |
SCH_BUS_WIRE_ENTRY * | parseBusEntry () |
SCH_LINE * | parseLine () |
SCH_TEXT * | parseSchText () |
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... | |
std::set< int > | m_fieldIDsRead |
Field IDs that have been read so far for the current symbol. More... | |
std::set< KIID > | m_uuids |
PROGRESS_REPORTER * | m_progressReporter |
const LINE_READER * | m_lineReader |
unsigned | m_lastProgressLine |
unsigned | m_lineCount |
Object to parser s-expression symbol library and schematic file formats.
Definition at line 76 of file sch_sexpr_parser.h.
SCH_SEXPR_PARSER::SCH_SEXPR_PARSER | ( | LINE_READER * | aLineReader = nullptr , |
PROGRESS_REPORTER * | aProgressReporter = nullptr , |
||
unsigned | aLineCount = 0 |
||
) |
Definition at line 60 of file sch_sexpr_parser.cpp.
|
private |
Definition at line 75 of file sch_sexpr_parser.cpp.
References PROGRESS_REPORTER::KeepRefreshing(), LINE_READER::LineNumber(), m_lastProgressLine, m_lineCount, m_lineReader, m_progressReporter, PROGRESS_REPORTER::SetCurrentProgress(), and THROW_IO_ERROR.
Referenced by ParseSchematic().
|
private |
This accounts for an oddity in the old library format, where the symbol is overdefined. The previous draw (based on wxwidgets) used start point and end point and always drew counter-clockwise. The new GAL draw takes center, radius and start/end angles. All of these points were stored in the file, so we need to mimic the swapping of start/end points rather than using the stored angles in order to properly map edge cases.
Definition at line 914 of file sch_sexpr_parser.cpp.
References ARC, DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetWidth(), KiROUND(), m_convert, FILL_PARAMS::m_FillType, m_unit, NORMALIZE_ANGLE_POS(), parseDouble(), parseFill(), parseInternalUnits(), parseStroke(), and parseXY().
Referenced by ParseDrawItem().
|
private |
Definition at line 1050 of file sch_sexpr_parser.cpp.
References BEZIER, DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetWidth(), m_convert, FILL_PARAMS::m_FillType, m_unit, parseFill(), parseStroke(), and parseXY().
Referenced by ParseDrawItem().
|
private |
Definition at line 110 of file sch_sexpr_parser.cpp.
Referenced by parseSchematicSymbol(), and ParseSymbol().
|
private |
Definition at line 2972 of file sch_sexpr_parser.cpp.
References SCH_SCREEN::AddBusAlias(), ConvertToNewOverbarNotation(), and m_requiredVersion.
Referenced by ParseSchematic().
|
private |
Definition at line 2713 of file sch_sexpr_parser.cpp.
References DEFAULT, DEFAULT_LINE_WIDTH_MILS, parseInternalUnits(), parseKIID(), parseStroke(), and parseXY().
Referenced by ParseSchematic().
|
private |
Definition at line 1122 of file sch_sexpr_parser.cpp.
References CIRCLE, DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetWidth(), m_convert, FILL_PARAMS::m_FillType, m_unit, parseFill(), parseInternalUnits(), parseStroke(), and parseXY().
Referenced by ParseDrawItem().
|
private |
Parse the current token as an ASCII numeric string with possible leading whitespace into a double precision floating point number.
IO_ERROR | if an error occurs attempting to convert the current token. |
Definition at line 413 of file sch_sexpr_parser.cpp.
References _, and THROW_PARSE_ERROR.
Referenced by parseArc(), parseDouble(), parseFill(), parseImage(), parseInternalUnits(), parseJunction(), parsePAGE_INFO(), parseProperty(), parseSchematicSymbol(), parseSchField(), parseSchSheetPin(), parseSchText(), parseStroke(), and parseText().
|
inlineprivate |
Definition at line 126 of file sch_sexpr_parser.h.
References parseDouble().
|
inlineprivate |
Definition at line 132 of file sch_sexpr_parser.h.
References DSN::GetTokenText(), and parseDouble().
LIB_ITEM * SCH_SEXPR_PARSER::ParseDrawItem | ( | ) |
Definition at line 373 of file sch_sexpr_parser.cpp.
References parseArc(), parseBezier(), parseCircle(), parsePin(), parsePolyLine(), parseRectangle(), and parseText().
Referenced by ParseSymbol().
|
private |
Definition at line 587 of file sch_sexpr_parser.cpp.
References ConvertToNewOverbarNotation(), EDA_TEXT::GetText(), GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_HJUSTIFY_RIGHT, GR_TEXT_VJUSTIFY_BOTTOM, GR_TEXT_VJUSTIFY_TOP, m_requiredVersion, parseInternalUnits(), EDA_TEXT::SetBold(), EDA_TEXT::SetHorizJustify(), EDA_TEXT::SetItalic(), EDA_TEXT::SetMirrored(), EDA_TEXT::SetText(), EDA_TEXT::SetTextSize(), EDA_TEXT::SetTextThickness(), EDA_TEXT::SetVertJustify(), and EDA_TEXT::SetVisible().
Referenced by parsePin(), parseProperty(), parseSchField(), parseSchSheetPin(), parseSchText(), and parseText().
|
private |
Definition at line 533 of file sch_sexpr_parser.cpp.
References Clamp(), color, FILLED_SHAPE, FILLED_WITH_BG_BODYCOLOR, FILL_PARAMS::m_Color, FILL_PARAMS::m_FillType, NO_FILL, parseDouble(), and parseInt().
Referenced by parseArc(), parseBezier(), parseCircle(), parsePolyLine(), parseRectangle(), and parseSheet().
|
private |
Definition at line 671 of file sch_sexpr_parser.cpp.
References m_requiredVersion, and parseInt().
Referenced by ParseLib(), and ParseSchematic().
|
inlineprivate |
Definition at line 100 of file sch_sexpr_parser.h.
|
private |
Definition at line 2438 of file sch_sexpr_parser.cpp.
References image, parseDouble(), parseKIID(), and parseXY().
Referenced by ParseSchematic().
|
inlineprivate |
Definition at line 106 of file sch_sexpr_parser.h.
Referenced by parseFill(), parseHeader(), parseInt(), parseJunction(), parsePin(), parseProperty(), parseSchematicSymbol(), parseSchField(), parseSchSymbolInstances(), parseStroke(), and parseTITLE_BLOCK().
|
inlineprivate |
|
private |
Definition at line 444 of file sch_sexpr_parser.cpp.
References IU_PER_MM, KiROUND(), and parseDouble().
Referenced by parseArc(), parseBusEntry(), parseCircle(), parseEDA_TEXT(), parseInternalUnits(), parseJunction(), parsePin(), parsePinNames(), parseSheet(), parseStroke(), and parseXY().
|
private |
Definition at line 457 of file sch_sexpr_parser.cpp.
References IU_PER_MM, KiROUND(), and parseDouble().
|
inlineprivate |
Definition at line 141 of file sch_sexpr_parser.h.
References DSN::GetTokenText(), and parseInternalUnits().
|
private |
Definition at line 2620 of file sch_sexpr_parser.cpp.
References Clamp(), color, parseDouble(), parseInt(), parseInternalUnits(), parseKIID(), and parseXY().
Referenced by ParseSchematic().
|
private |
Definition at line 97 of file sch_sexpr_parser.cpp.
References m_uuids.
Referenced by parseBusEntry(), parseImage(), parseJunction(), parseLine(), parseNoConnect(), ParseSchematic(), parseSchematicSymbol(), parseSchSheetPin(), parseSchText(), and parseSheet().
void SCH_SEXPR_PARSER::ParseLib | ( | LIB_SYMBOL_MAP & | aSymbolLibMap | ) |
Definition at line 125 of file sch_sexpr_parser.cpp.
References LIB_SYMBOL::GetName(), m_convert, m_requiredVersion, m_unit, parseHeader(), ParseSymbol(), and SEXPR_SYMBOL_LIB_FILE_VERSION.
|
private |
Definition at line 2767 of file sch_sexpr_parser.cpp.
References DEFAULT, DEFAULT_LINE_WIDTH_MILS, LAYER_BUS, LAYER_NOTES, LAYER_WIRE, parseKIID(), parseStroke(), and parseXY().
Referenced by ParseSchematic().
|
private |
Definition at line 2676 of file sch_sexpr_parser.cpp.
References parseKIID(), and parseXY().
Referenced by ParseSchematic().
|
private |
Definition at line 1548 of file sch_sexpr_parser.cpp.
References _, PAGE_INFO::Custom, m_requiredVersion, MAX_PAGE_SIZE_EESCHEMA_MILS, MIN_PAGE_SIZE_MILS, Mm2mils(), parseDouble(), PAGE_INFO::SetHeightMils(), PAGE_INFO::SetPortrait(), PAGE_INFO::SetType(), PAGE_INFO::SetWidthMils(), and THROW_PARSE_ERROR.
Referenced by ParseSchematic().
|
private |
Definition at line 1179 of file sch_sexpr_parser.cpp.
References _, CLOCK, CLOCK_LOW, ConvertToNewOverbarNotation(), FALLING_EDGE_CLOCK, INPUT_LOW, INVERTED, INVERTED_CLOCK, LINE, m_convert, LIB_PIN::ALT::m_Name, m_requiredVersion, LIB_PIN::ALT::m_Shape, LIB_PIN::ALT::m_Type, m_unit, NONLOGIC, OUTPUT_LOW, parseEDA_TEXT(), parseInt(), parseInternalUnits(), parseXY(), pin, PIN_DOWN, PIN_LEFT, PIN_RIGHT, PIN_UP, PT_BIDI, PT_INPUT, PT_NC, PT_NIC, PT_OPENCOLLECTOR, PT_OPENEMITTER, PT_OUTPUT, PT_PASSIVE, PT_POWER_IN, PT_POWER_OUT, PT_TRISTATE, PT_UNSPECIFIED, text, and THROW_PARSE_ERROR.
Referenced by ParseDrawItem().
|
private |
Definition at line 711 of file sch_sexpr_parser.cpp.
References _, parseInternalUnits(), and THROW_PARSE_ERROR.
Referenced by ParseSymbol().
|
private |
Definition at line 1389 of file sch_sexpr_parser.cpp.
References DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetWidth(), m_convert, FILL_PARAMS::m_FillType, m_unit, parseFill(), parseStroke(), parseXY(), and POLY.
Referenced by ParseDrawItem().
|
private |
Definition at line 745 of file sch_sexpr_parser.cpp.
References _, LIB_FIELD::GetCanonicalName(), m_fieldIDsRead, MANDATORY_FIELDS, name, parseDouble(), parseEDA_TEXT(), parseInt(), parseXY(), THROW_PARSE_ERROR, UnescapeString(), and VALUE_FIELD.
Referenced by ParseSymbol().
|
private |
Definition at line 1448 of file sch_sexpr_parser.cpp.
References DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetWidth(), m_convert, FILL_PARAMS::m_FillType, m_unit, parseFill(), parseStroke(), parseXY(), and RECT.
Referenced by ParseDrawItem().
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.
aSheet | The SCH_SHEET object to store the parsed schematic file. |
aIsCopyableOnly | Load only the schematic objects that can be copied into aSheet if true. Otherwise, load the full schematic file format. |
aFileVersion | The schematic file version to parser. Defaults to the schematic file being parsed when aIsCopyableOnly is false. |
Definition at line 2013 of file sch_sexpr_parser.cpp.
References SCH_SCREEN::AddLibSymbol(), SCH_SCREEN::Append(), checkpoint(), SCH_SHEET::GetScreen(), m_requiredVersion, SCH_SCREEN::m_uuid, parseBusAlias(), parseBusEntry(), parseHeader(), parseImage(), parseJunction(), parseKIID(), parseLine(), parseNoConnect(), parsePAGE_INFO(), parseSchematicSymbol(), parseSchSheetInstances(), parseSchSymbolInstances(), parseSchText(), parseSheet(), ParseSymbol(), parseTITLE_BLOCK(), SCH_SCREEN::SetFileFormatVersionAtLoad(), SCH_SCREEN::SetPageSettings(), EDA_ITEM::SetParent(), SCH_SCREEN::SetTitleBlock(), SEXPR_SCHEMATIC_FILE_VERSION, LIB_SYMBOL::UpdateFieldOrdinals(), and SCH_SCREEN::UpdateLocalLibSymbolLinks().
Referenced by SCH_SEXPR_PLUGIN::LoadContent(), and SCH_SEXPR_PLUGIN::loadFile().
|
private |
Definition at line 2199 of file sch_sexpr_parser.cpp.
References _, SCH_FIELD::GetId(), EDA_TEXT::GetText(), m_fieldId, m_requiredVersion, MANDATORY_FIELDS, LIB_ID::Parse(), parseBool(), parseDouble(), parseInt(), parseKIID(), parseSchField(), parseXY(), REFERENCE_FIELD, SCH_FIELD::SetId(), SYM_MIRROR_X, SYM_MIRROR_Y, and THROW_PARSE_ERROR.
Referenced by ParseSchematic().
Definition at line 1704 of file sch_sexpr_parser.cpp.
References _, name, parseDouble(), parseEDA_TEXT(), parseInt(), parseXY(), THROW_PARSE_ERROR, and VALUE_FIELD.
Referenced by parseSchematicSymbol(), parseSchText(), and parseSheet().
|
private |
Definition at line 1861 of file sch_sexpr_parser.cpp.
References SCH_SHEET_INSTANCE::m_PageNumber, SCH_SHEET_INSTANCE::m_Path, SCH_SCREEN::m_sheetInstances, and BASE_SCREEN::SetContentModified().
Referenced by ParseSchematic().
|
private |
Definition at line 1775 of file sch_sexpr_parser.cpp.
References _, PNS::angle(), BOTTOM, LEFT, name, parseDouble(), parseEDA_TEXT(), parseKIID(), parseXY(), PS_BIDI, PS_INPUT, PS_OUTPUT, PS_TRISTATE, PS_UNSPECIFIED, RIGHT, THROW_PARSE_ERROR, and TOP.
Referenced by parseSheet().
|
private |
Definition at line 1940 of file sch_sexpr_parser.cpp.
References SYMBOL_INSTANCE_REFERENCE::m_Footprint, SYMBOL_INSTANCE_REFERENCE::m_Path, SYMBOL_INSTANCE_REFERENCE::m_Reference, SCH_SCREEN::m_symbolInstances, SYMBOL_INSTANCE_REFERENCE::m_Unit, SYMBOL_INSTANCE_REFERENCE::m_Value, and parseInt().
Referenced by ParseSchematic().
|
private |
Definition at line 2833 of file sch_sexpr_parser.cpp.
References LABEL_SPIN_STYLE::BOTTOM, SCH_GLOBALLABEL::GetIntersheetRefs(), GR_TEXT_HJUSTIFY_RIGHT, LAYER_GLOBLABEL, LABEL_SPIN_STYLE::LEFT, parseDouble(), parseEDA_TEXT(), parseKIID(), parseSchField(), parseXY(), PS_BIDI, PS_INPUT, PS_OUTPUT, PS_TRISTATE, PS_UNSPECIFIED, LABEL_SPIN_STYLE::RIGHT, SCH_GLOBAL_LABEL_T, SCH_LABEL_T, SCH_TEXT_T, SCH_GLOBALLABEL::SetIntersheetRefs(), EDA_TEXT::SetTextPos(), text, TEXT_ANGLE_HORIZ, TEXT_ANGLE_VERT, and LABEL_SPIN_STYLE::UP.
Referenced by ParseSchematic().
|
private |
Definition at line 2513 of file sch_sexpr_parser.cpp.
References DEFAULT, DEFAULT_LINE_WIDTH_MILS, STROKE_PARAMS::GetColor(), SCH_FIELD::GetId(), STROKE_PARAMS::GetWidth(), FILL_PARAMS::m_Color, m_requiredVersion, parseFill(), parseInternalUnits(), parseKIID(), parseSchField(), parseSchSheetPin(), parseStroke(), parseXY(), SCH_FIELD::SetId(), SHEETFILENAME, and SHEETNAME.
Referenced by ParseSchematic().
|
private |
Parse stroke definition aStroke.
aStrokeDef | A reference to the STROKE_PARAMS structure to write to. |
Definition at line 467 of file sch_sexpr_parser.cpp.
References Clamp(), color, DASH, DASHDOT, DEFAULT, DEFAULT_LINE_WIDTH_MILS, DOT, parseDouble(), parseInt(), parseInternalUnits(), STROKE_PARAMS::SetColor(), STROKE_PARAMS::SetPlotStyle(), STROKE_PARAMS::SetWidth(), and SOLID.
Referenced by parseArc(), parseBezier(), parseBusEntry(), parseCircle(), parseLine(), parsePolyLine(), parseRectangle(), and parseSheet().
LIB_SYMBOL * SCH_SEXPR_PARSER::ParseSymbol | ( | LIB_SYMBOL_MAP & | aSymbolLibMap, |
int | aFileVersion = SEXPR_SYMBOL_LIB_FILE_VERSION |
||
) |
Definition at line 155 of file sch_sexpr_parser.cpp.
References _, m_convert, m_fieldId, m_fieldIDsRead, m_requiredVersion, m_symbolName, m_unit, MANDATORY_FIELDS, name, parseBool(), ParseDrawItem(), parsePinNames(), parseProperty(), EDA_ITEM::SetParent(), and THROW_PARSE_ERROR.
Referenced by ParseLib(), SCH_SEXPR_PLUGIN::ParseLibSymbol(), and ParseSchematic().
|
private |
Definition at line 1499 of file sch_sexpr_parser.cpp.
References _, m_convert, m_unit, parseDouble(), parseEDA_TEXT(), parseXY(), text, and THROW_PARSE_ERROR.
Referenced by ParseDrawItem().
|
private |
Definition at line 1600 of file sch_sexpr_parser.cpp.
References _, parseInt(), TITLE_BLOCK::SetComment(), TITLE_BLOCK::SetCompany(), TITLE_BLOCK::SetDate(), TITLE_BLOCK::SetRevision(), TITLE_BLOCK::SetTitle(), and THROW_PARSE_ERROR.
Referenced by ParseSchematic().
|
inlineprivate |
Definition at line 146 of file sch_sexpr_parser.h.
References parseInternalUnits().
Referenced by parseArc(), parseBezier(), parseBusEntry(), parseCircle(), parseImage(), parseJunction(), parseLine(), parseNoConnect(), parsePin(), parsePolyLine(), parseProperty(), parseRectangle(), parseSchematicSymbol(), parseSchField(), parseSchSheetPin(), parseSchText(), parseSheet(), and parseText().
|
private |
The current body style being parsed.
Definition at line 81 of file sch_sexpr_parser.h.
Referenced by parseArc(), parseBezier(), parseCircle(), ParseLib(), parsePin(), parsePolyLine(), parseRectangle(), ParseSymbol(), and parseText().
|
private |
The current field ID.
Definition at line 79 of file sch_sexpr_parser.h.
Referenced by parseSchematicSymbol(), and ParseSymbol().
|
private |
Field IDs that have been read so far for the current symbol.
Definition at line 85 of file sch_sexpr_parser.h.
Referenced by parseProperty(), and ParseSymbol().
|
private |
Definition at line 91 of file sch_sexpr_parser.h.
Referenced by checkpoint().
|
private |
Definition at line 92 of file sch_sexpr_parser.h.
Referenced by checkpoint().
|
private |
Definition at line 90 of file sch_sexpr_parser.h.
Referenced by checkpoint().
|
private |
Definition at line 89 of file sch_sexpr_parser.h.
Referenced by checkpoint().
|
private |
Set to the symbol library file version required.
Definition at line 78 of file sch_sexpr_parser.h.
Referenced by parseBusAlias(), parseEDA_TEXT(), parseHeader(), ParseLib(), parsePAGE_INFO(), parsePin(), ParseSchematic(), parseSchematicSymbol(), parseSheet(), and ParseSymbol().
|
private |
The current symbol name.
Definition at line 82 of file sch_sexpr_parser.h.
Referenced by ParseSymbol().
|
private |
The current unit being parsed.
Definition at line 80 of file sch_sexpr_parser.h.
Referenced by parseArc(), parseBezier(), parseCircle(), ParseLib(), parsePin(), parsePolyLine(), parseRectangle(), ParseSymbol(), and parseText().
|
private |
Definition at line 87 of file sch_sexpr_parser.h.
Referenced by parseKIID().