Added display name
This commit is contained in:
1 parent
7be3a1b5bc
commit
eaa115d115
15 files changed
+120
-40
No files matched your search
@@ -256,6 +256,8 @@ struct AttributeNode : public AstNode {
|
||||
ValueNode::ValueType type;
|
||||
/** Name of attribute */
|
||||
IdentifierNode name;
|
||||
/** Display name */
|
||||
std::optional<StringNode> displayName;
|
||||
/** Default type of attribute */
|
||||
std::optional<ValueNode> defaultValue;
|
||||
/** Popup used to change attribute value */
|
||||
@@ -360,6 +362,8 @@ struct ComponentNode : public AstNode {
|
||||
|
||||
/** Component name */
|
||||
IdentifierNode name;
|
||||
/** Component name */
|
||||
std::optional<StringNode> displayName;
|
||||
/** Tooltip displayed on hover */
|
||||
std::optional<StringNode> tooltip;
|
||||
/** Contains path to COMDEL source containing current component */
|
||||
@@ -425,7 +429,10 @@ struct BusNode : public AstNode {
|
||||
};
|
||||
|
||||
EnumNode<BusType> type;
|
||||
/** Bus name */
|
||||
IdentifierNode name;
|
||||
/** Display name */
|
||||
std::optional<StringNode> displayName;
|
||||
/** Default used to name instances */
|
||||
std::optional<IdentifierNode> instanceName;
|
||||
/** Tooltip displayed on hover */
|
||||
|
||||
@@ -481,6 +481,7 @@ PResult<AddressSpaceNode> ComdelParser::parseAddress() {
|
||||
*
|
||||
* ComponentNode := "@component" + IdentifierNode + ComponentType + "{"
|
||||
* "@instanceName" + IdentifierNode
|
||||
* ["@displayName" + StringNode]{0,1}
|
||||
* "@tooltip" + StringNode
|
||||
* "@source" + StringNode
|
||||
* "@tooltip" + StringNode
|
||||
@@ -507,6 +508,8 @@ PResult<ComponentNode> ComdelParser::parseComponent() {
|
||||
PResult<poly<AstNode>> err;
|
||||
if (consume(TokenType::KW_INSTANCE_NAME)) {
|
||||
ASSIGN_OR_SET_ERR(component.instanceName, parseIdentifier());
|
||||
} else if (consume(TokenType::KW_DISPLAY_NAME)) {
|
||||
ASSIGN_OR_SET_ERR(component.displayName, parseString());
|
||||
} else if (consume(TokenType::KW_TOOLTIP)) {
|
||||
ASSIGN_OR_SET_ERR(component.tooltip, parseString());
|
||||
} else if (consume(TokenType::KW_SOURCE)) {
|
||||
@@ -608,6 +611,7 @@ PResult<DisplayItemNode> ComdelParser::parseDisplayItem() {
|
||||
* BusNode := "@bus " + IdentifierNode + BusType + "{"
|
||||
* "@tooltip" + StringNode
|
||||
* "@instanceName" + StringNode
|
||||
* ["@displayName" + StringNode]{0,1}
|
||||
* DisplayNode
|
||||
* "@wires {" + [WireNode + ","]{0..N} + WireNode "}"
|
||||
* "}"
|
||||
@@ -628,6 +632,8 @@ PResult<BusNode> ComdelParser::parseBus() {
|
||||
PResult<poly<AstNode>> err;
|
||||
if (consume(TokenType::KW_TOOLTIP)) {
|
||||
ASSIGN_OR_SET_ERR(bus.tooltip, parseString());
|
||||
} else if (consume(TokenType::KW_DISPLAY_NAME)) {
|
||||
ASSIGN_OR_SET_ERR(bus.displayName, parseString());
|
||||
} else if (consume(TokenType::KW_INSTANCE_NAME)) {
|
||||
ASSIGN_OR_SET_ERR(bus.instanceName, parseIdentifier());
|
||||
} else if (consume(TokenType::KW_COUNT)) {
|
||||
@@ -810,10 +816,13 @@ PResult<PinNode> ComdelParser::parsePin() {
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
*
|
||||
* AttributeNode := "@attribute " + IdentifierNode + ValueType + ("default" + ValueNode){0,1} + ("{" PopupNode "}"){0,1}
|
||||
*
|
||||
****************************************************************************/
|
||||
*
|
||||
* AttributeNode := "@attribute " + IdentifierNode + ValueType + ("default" + ValueNode){0,1} + ("{"
|
||||
* [PopupNode]
|
||||
* ["@displayName" + StringNode]{0,1}
|
||||
* "}"){0,1}
|
||||
*
|
||||
****************************************************************************/
|
||||
PResult<AttributeNode> ComdelParser::parseAttribute() {
|
||||
auto spanner = getSpanner();
|
||||
AttributeNode attribute;
|
||||
@@ -889,16 +898,27 @@ PResult<AttributeNode> ComdelParser::parseAttribute() {
|
||||
}
|
||||
}
|
||||
|
||||
if (check(TokenType::LBRACE)) {
|
||||
RETURN_IF_NOT_TOKEN(TokenType::LBRACE);
|
||||
if (!check(TokenType::KW_POPUP)) {
|
||||
return unexpected();
|
||||
if (consume(TokenType::LBRACE)) {
|
||||
while(!consume(TokenType::RBRACE)) {
|
||||
PResult<poly<AstNode>> err;
|
||||
if (check(TokenType::KW_POPUP)) {
|
||||
PopupNode popup;
|
||||
ASSIGN_OR_SET_ERR(popup, parsePopup());
|
||||
attribute.popup = std::optional<PopupNode>(popup);
|
||||
} else if (consume(TokenType::KW_DISPLAY_NAME)) {
|
||||
ASSIGN_OR_SET_ERR(attribute.displayName, parseString());
|
||||
} else {
|
||||
err = unexpected();
|
||||
bump();
|
||||
}
|
||||
if (!err.has_value()) {
|
||||
errors.push_back(err.error());
|
||||
skipUntilNextKeyword();
|
||||
if (check(TokenType::END_OF_FILE)) {
|
||||
return PError({Span(spanner.lo), "Reached EOF"});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PopupNode popup;
|
||||
ASSIGN_OR_RETURN_IF_ERR(popup, parsePopup());
|
||||
attribute.popup = std::optional<PopupNode>(popup);
|
||||
RETURN_IF_NOT_TOKEN(TokenType::RBRACE);
|
||||
}
|
||||
|
||||
return spanner(attribute);
|
||||
|
||||
@@ -101,6 +101,7 @@ enum class TokenType {
|
||||
KW_SCHEMA,
|
||||
KW_POSITION,
|
||||
KW_SIZE,
|
||||
KW_DISPLAY_NAME,
|
||||
|
||||
// TYPES
|
||||
INT_TYPE,
|
||||
|
||||
@@ -106,6 +106,7 @@ TokenTables::TokenTables() {
|
||||
add(TokenType::KW_SCHEMA, "@schema", TOKENIZABLE | KEYWORD_NAME);
|
||||
add(TokenType::KW_POSITION, "@position", TOKENIZABLE | KEYWORD_NAME);
|
||||
add(TokenType::KW_SIZE, "@size", TOKENIZABLE | KEYWORD_NAME);
|
||||
add(TokenType::KW_DISPLAY_NAME, "@displayName", TOKENIZABLE | KEYWORD_NAME);
|
||||
|
||||
// All types
|
||||
add(TokenType::INT_TYPE, "int", TOKENIZABLE);
|
||||
|
||||
Reference in new issue
Block a user