6#ifndef MATERIALX_SYNTAX_H
7#define MATERIALX_SYNTAX_H
18MATERIALX_NAMESPACE_BEGIN
48 DOUBLE_SQUARE_BRACKETS
61 void registerReservedWords(
const StringSet& names);
66 void registerInvalidTokens(
const StringMap& tokens);
86 const string& getTypeName(
const TypeDesc* type)
const;
89 virtual string getOutputTypeName(
const TypeDesc* type)
const;
93 const string& getTypeAlias(
const TypeDesc* type)
const;
97 const string& getTypeDefinition(
const TypeDesc* type)
const;
100 const string& getDefaultValue(
const TypeDesc* type,
bool uniform =
false)
const;
103 virtual string getValue(
const TypeDesc* type,
const Value& value,
bool uniform =
false)
const;
106 virtual string getValue(
const ShaderPort* port,
bool uniform =
false)
const;
109 virtual string getSwizzledVariable(
const string& srcName,
const TypeDesc* srcType,
const string& channels,
const TypeDesc* dstType)
const;
134 virtual const string&
getNewline()
const {
return NEWLINE; };
161 virtual string getArrayVariableSuffix(
const TypeDesc* type,
const Value& value)
const;
165 virtual bool typeSupported(
const TypeDesc* type)
const;
168 virtual void makeValidName(
string& name)
const;
172 virtual void makeIdentifier(
string& name,
IdentifierMap& identifiers)
const;
179 virtual string getVariableName(
const string& name,
const TypeDesc* type,
IdentifierMap& identifiers)
const;
188 virtual bool remapEnumeration(
const string& value,
const TypeDesc* type,
const string& enumNames,
189 std::pair<const TypeDesc*, ValuePtr>& result)
const;
193 static const string SEMICOLON;
194 static const string COMMA;
200 vector<TypeSyntaxPtr> _typeSyntaxes;
201 std::unordered_map<const TypeDesc*, size_t> _typeSyntaxByType;
206 static const string INDENTATION;
207 static const string STRING_QUOTE;
208 static const string INCLUDE_STATEMENT;
209 static const string SINGLE_LINE_COMMENT;
210 static const string BEGIN_MULTI_LINE_COMMENT;
211 static const string END_MULTI_LINE_COMMENT;
213 static const std::unordered_map<char, size_t> CHANNELS_MAPPING;
224 const string&
getName()
const {
return _name; }
233 const string&
getDefaultValue(
bool uniform)
const {
return uniform ? _uniformDefaultValue : _defaultValue; }
241 virtual string getValue(
const ShaderPort* port,
bool uniform)
const;
254 TypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
255 const string& typeAlias,
const string& typeDefinition,
const StringVec& members);
258 string _defaultValue;
259 string _uniformDefaultValue;
261 string _typeDefinition;
271 ScalarTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
272 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING);
274 string getValue(
const Value& value,
bool uniform)
const override;
275 string getValue(
const StringVec& values,
bool uniform)
const override;
282 StringTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
283 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING);
285 string getValue(
const Value& value,
bool uniform)
const override;
292 AggregateTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
293 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING,
294 const StringVec& members = EMPTY_MEMBERS);
296 string getValue(
const Value& value,
bool uniform)
const override;
297 string getValue(
const StringVec& values,
bool uniform)
const override;
300MATERIALX_NAMESPACE_END
Definition element subclasses.
Library-wide includes and types.
std::set< string > StringSet
A set of strings.
Definition: Library.h:61
vector< string > StringVec
A vector of strings.
Definition: Library.h:57
std::unordered_map< string, string > StringMap
An unordered map with strings as both keys and values.
Definition: Library.h:59
Macros for declaring imported and exported symbols.
shared_ptr< TypeSyntax > TypeSyntaxPtr
Shared pointer to a TypeSyntax.
Definition: Syntax.h:30
shared_ptr< const Syntax > ConstSyntaxPtr
Shared pointer to a constant Syntax.
Definition: Syntax.h:28
shared_ptr< Syntax > SyntaxPtr
Shared pointer to a Syntax.
Definition: Syntax.h:26
std::unordered_map< string, size_t > IdentifierMap
Map holding identifier names and a counter for creating unique names from them.
Definition: Syntax.h:34
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
Specialization of TypeSyntax for aggregate types.
Definition: Syntax.h:290
Specialization of TypeSyntax for scalar types.
Definition: Syntax.h:269
An input or output port on a ShaderNode.
Definition: ShaderNode.h:123
Specialization of TypeSyntax for string types.
Definition: Syntax.h:280
Base class for syntax objects used by shader generators to emit code with correct syntax for each lan...
Definition: Syntax.h:40
virtual const string & getBeginMultiLineComment() const
Return the characters used to begin a multi line comments block.
Definition: Syntax.h:149
virtual const string & getIndentation() const
Return the characters used for a single indentation level.
Definition: Syntax.h:137
virtual const string & getSourceFileExtension() const =0
Return the file extension used for source code files in this language.
const vector< TypeSyntaxPtr > & getTypeSyntaxes() const
Returns an array of all registered type syntax objects.
Definition: Syntax.h:79
const StringMap & getInvalidTokens() const
Returns a mapping from disallowed tokens to replacement strings for this language syntax.
Definition: Syntax.h:72
virtual const string & getStringQuote() const
Return the characters used to begin/end a string definition.
Definition: Syntax.h:140
virtual const string & getNewline() const
Return the characters used for a newline.
Definition: Syntax.h:134
virtual const string & getOutputQualifier() const
Returns a type qualifier to be used when declaring types for output variables.
Definition: Syntax.h:122
static const string NEWLINE
Constants with commonly used strings.
Definition: Syntax.h:192
virtual const string & getConstantQualifier() const =0
Get the qualifier used when declaring constant variables.
virtual const string & getIncludeStatement() const
Return the string pattern used for a file include statement.
Definition: Syntax.h:143
Punctuation
Punctuation types.
Definition: Syntax.h:44
virtual const string & getEndMultiLineComment() const
Return the characters used to end a multi line comments block.
Definition: Syntax.h:152
virtual const string & getSingleLineComment() const
Return the characters used for single line comment.
Definition: Syntax.h:146
virtual string getArrayTypeSuffix(const TypeDesc *, const Value &) const
Return the array suffix to use for declaring an array type.
Definition: Syntax.h:158
virtual const string & getUniformQualifier() const
Get the qualifier used when declaring uniform variables.
Definition: Syntax.h:131
virtual const string & getInputQualifier() const
Returns a type qualifier to be used when declaring types for input variables.
Definition: Syntax.h:117
const StringSet & getReservedWords() const
Returns a set of names that are reserved words for this language syntax.
Definition: Syntax.h:69
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:28
Base class for syntax handling of types.
Definition: Syntax.h:219
const string & getDefaultValue(bool uniform) const
Returns the default value for this type.
Definition: Syntax.h:233
virtual string getValue(const StringVec &values, bool uniform) const =0
Returns a value formatted according to this type syntax.
virtual string getValue(const Value &value, bool uniform) const =0
Returns a value formatted according to this type syntax.
const string & getName() const
Returns the type name.
Definition: Syntax.h:224
const string & getTypeAlias() const
Returns a type alias if needed to define the type in the target language.
Definition: Syntax.h:227
const StringVec & getMembers() const
Returns the syntax for accessing type members if the type can be swizzled.
Definition: Syntax.h:237
const string & getTypeDefinition() const
Returns a type definition if needed to define the type in the target language.
Definition: Syntax.h:230
A generic, discriminated value, whose type may be queried dynamically.
Definition: Value.h:45