6#ifndef MATERIALX_SYNTAX_H
7#define MATERIALX_SYNTAX_H
19MATERIALX_NAMESPACE_BEGIN
52 DOUBLE_SQUARE_BRACKETS
73 virtual void registerStructTypeDescSyntax();
113 [[deprecated]]
string getValue(
const TypeDesc* type,
const Value& value,
bool uniform =
false)
const {
return getValue(*type, value, uniform); }
163 [[deprecated]]
string getArrayTypeSuffix(
const TypeDesc* type,
const Value& value)
const {
return getArrayTypeSuffix(*type, value); }
196 std::pair<TypeDesc, ValuePtr>& result)
const;
200 static const string SEMICOLON;
201 static const string COMMA;
207 virtual StructTypeSyntaxPtr createStructSyntax(
const string& structTypeName,
const string& defaultValue,
208 const string& uniformDefaultValue,
const string& typeAlias,
209 const string& typeDefinition)
const
211 return std::make_shared<StructTypeSyntax>(
220 vector<TypeSyntaxPtr> _typeSyntaxes;
221 std::unordered_map<TypeDesc, size_t, TypeDesc::Hasher> _typeSyntaxIndexByType;
226 static const string INDENTATION;
227 static const string STRING_QUOTE;
228 static const string INCLUDE_STATEMENT;
229 static const string SINGLE_LINE_COMMENT;
230 static const string BEGIN_MULTI_LINE_COMMENT;
231 static const string END_MULTI_LINE_COMMENT;
233 static const std::unordered_map<char, size_t> CHANNELS_MAPPING;
244 const string&
getName()
const {
return _name; }
253 const string&
getDefaultValue(
bool uniform)
const {
return uniform ? _uniformDefaultValue : _defaultValue; }
269 TypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
270 const string& typeAlias,
const string& typeDefinition,
const StringVec& members);
273 string _defaultValue;
274 string _uniformDefaultValue;
276 string _typeDefinition;
286 ScalarTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
287 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING);
293class MX_GENSHADER_API StringTypeSyntax :
public ScalarTypeSyntax
296 StringTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
297 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING);
303class MX_GENSHADER_API AggregateTypeSyntax :
public TypeSyntax
306 AggregateTypeSyntax(
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
307 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING,
308 const StringVec& members = EMPTY_MEMBERS);
317 StructTypeSyntax(
const Syntax* parentSyntax,
const string& name,
const string& defaultValue,
const string& uniformDefaultValue,
318 const string& typeAlias = EMPTY_STRING,
const string& typeDefinition = EMPTY_STRING,
319 const StringVec& members = EMPTY_MEMBERS);
324 const Syntax* _parentSyntax;
327MATERIALX_NAMESPACE_END
Definition element subclasses.
Library-wide includes and types.
std::set< string > StringSet
A set of strings.
Definition Library.h:64
vector< string > StringVec
A vector of strings.
Definition Library.h:60
std::unordered_map< string, string > StringMap
An unordered map with strings as both keys and values.
Definition Library.h:62
Macros for declaring imported and exported symbols.
shared_ptr< TypeSyntax > TypeSyntaxPtr
Shared pointer to a TypeSyntax.
Definition Syntax.h:32
shared_ptr< const Syntax > ConstSyntaxPtr
Shared pointer to a constant Syntax.
Definition Syntax.h:30
shared_ptr< StructTypeSyntax > StructTypeSyntaxPtr
Shared pointer to a StructTypeSyntax.
Definition Syntax.h:34
shared_ptr< Syntax > SyntaxPtr
Shared pointer to a Syntax.
Definition Syntax.h:28
std::unordered_map< string, size_t > IdentifierMap
Map holding identifier names and a counter for creating unique names from them.
Definition Syntax.h:38
Type descriptor for a MaterialX data type.
string getValue(const Value &value, bool uniform) const override
Returns a value formatted according to this type syntax.
string getValue(const Value &value, bool uniform) const override
Returns a value formatted according to this type syntax.
An input or output port on a ShaderNode.
Definition ShaderNode.h:123
string getValue(const Value &value, bool uniform) const override
Returns a value formatted according to this type syntax.
Specialization of TypeSyntax for aggregate types.
Definition Syntax.h:315
string getValue(const Value &value, bool uniform) const override
Returns a value formatted according to this type syntax.
Base class for syntax objects used by shader generators to emit code with correct syntax for each lan...
Definition Syntax.h:44
virtual string getArrayVariableSuffix(TypeDesc type, const Value &value) const
Return the array suffix to use for declaring an array variable.
virtual string getArrayTypeSuffix(TypeDesc, const Value &) const
Return the array suffix to use for declaring an array type.
Definition Syntax.h:162
virtual string getValue(const ShaderPort *port, bool uniform=false) const
Returns the value string for a given shader port object.
virtual const string & getBeginMultiLineComment() const
Return the characters used to begin a multi line comments block.
Definition Syntax.h:153
virtual const string & getIndentation() const
Return the characters used for a single indentation level.
Definition Syntax.h:141
virtual const string & getSourceFileExtension() const =0
Return the file extension used for source code files in this language.
const string & getDefaultValue(TypeDesc type, bool uniform=false) const
Returns the default value string for the given type.
const vector< TypeSyntaxPtr > & getTypeSyntaxes() const
Returns an array of all registered type syntax objects.
Definition Syntax.h:87
virtual void makeValidName(string &name) const
Modify the given name string to remove any invalid characters or tokens.
const StringMap & getInvalidTokens() const
Returns a mapping from disallowed tokens to replacement strings for this language syntax.
Definition Syntax.h:79
virtual const string & getStringQuote() const
Return the characters used to begin/end a string definition.
Definition Syntax.h:144
virtual const string & getNewline() const
Return the characters used for a newline.
Definition Syntax.h:138
const string & getTypeAlias(TypeDesc type) const
Returns a type alias for the given data type.
virtual bool typeSupported(const TypeDesc *type) const
Query if given type is supported in the syntax.
const string & getTypeDefinition(TypeDesc type) const
Returns a custom type definition if needed for the given data type.
void registerReservedWords(const StringSet &names)
Register names that are reserved words not to be used by a code generator when naming variables and f...
Syntax()
Protected constructor.
virtual string getVariableName(const string &name, TypeDesc type, IdentifierMap &identifiers) const
Create a unique identifier for the given variable name and type.
virtual const string & getOutputQualifier() const
Returns a type qualifier to be used when declaring types for output variables.
Definition Syntax.h:126
void registerTypeSyntax(TypeDesc type, TypeSyntaxPtr syntax)
Register syntax handling for a data type.
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:147
virtual string getOutputTypeName(TypeDesc type) const
Returns the type name in an output context.
Punctuation
Punctuation types.
Definition Syntax.h:48
void registerInvalidTokens(const StringMap &tokens)
Register a set string replacements for disallowed tokens for a code generator when naming variables a...
virtual const string & getEndMultiLineComment() const
Return the characters used to end a multi line comments block.
Definition Syntax.h:156
virtual const string & getSingleLineComment() const
Return the characters used for single line comment.
Definition Syntax.h:150
const string & getTypeName(TypeDesc type) const
Returns the name syntax of the given type.
const TypeSyntax & getTypeSyntax(TypeDesc type) const
Returns the type syntax object for a named type.
static const string NEWLINE
Constants with commonly used strings.
Definition Syntax.h:199
virtual const string & getUniformQualifier() const
Get the qualifier used when declaring uniform variables.
Definition Syntax.h:135
virtual const string & getInputQualifier() const
Returns a type qualifier to be used when declaring types for input variables.
Definition Syntax.h:121
virtual void makeIdentifier(string &name, IdentifierMap &identifiers) const
Make sure the given name is a unique identifier, updating it if needed to make it unique.
virtual string getValue(TypeDesc type, const Value &value, bool uniform=false) const
Returns the value string for a given type and value object.
virtual bool remapEnumeration(const string &value, TypeDesc type, const string &enumNames, std::pair< TypeDesc, ValuePtr > &result) const
Given an input specification attempt to remap this to an enumeration which is accepted by the shader ...
const StringSet & getReservedWords() const
Returns a set of names that are reserved words for this language syntax.
Definition Syntax.h:76
A type descriptor for MaterialX data types.
Definition TypeDesc.h:36
Base class for syntax handling of types.
Definition Syntax.h:239
const string & getDefaultValue(bool uniform) const
Returns the default value for this type.
Definition Syntax.h:253
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:244
virtual string getValue(const ShaderPort *port, bool uniform) const
Returns a value formatted according to this type syntax.
const string & getTypeAlias() const
Returns a type alias if needed to define the type in the target language.
Definition Syntax.h:247
TypeSyntax(const string &name, const string &defaultValue, const string &uniformDefaultValue, const string &typeAlias, const string &typeDefinition, const StringVec &members)
Protected constructor.
const StringVec & getMembers() const
Returns the syntax for accessing type members if the type can be swizzled.
Definition Syntax.h:257
const string & getTypeDefinition() const
Returns a type definition if needed to define the type in the target language.
Definition Syntax.h:250
A generic, discriminated value, whose type may be queried dynamically.
Definition Value.h:46