# Additional meta information (attributes for matched entries, as well as tags)
# to be added to manifest.xml files.
#
# manifestmeta.filters = <filter1>,<filter2>,...
#
# manifestmeta.<filter>.names = <Module1>/<name1>,<Module2>/<name2>,..
# manifestmeta.<filter>.attributes = <attribute1:value1>,<attribute2:value2>,..
# manifestmeta.<filter>.tags = <tag1>,<tag2>,..
#
# <filter>.names specify all the module/name combinations to apply the
# attributes/tags to. You can use simple wildcard matching by appending
# '*' at the end of name.
#
# Note: You cannot use operators (+, =, -) in the names.
#
# Examples: add a 'isHighlighted' attribute for two 'Analog Clock' examples,
# add a 'database' tag for QtSql examples, and a 'qt5' tag for all examples
#
# manifestmeta.filters                = highlighted sql global
#
# manifestmeta.highlighted.names      = "QtGui/Analog Clock Window Example" \
#                                       "QtWidgets/Analog Clock Example"
# manifestmeta.highlighted.attributes = isHighlighted:true
#
# manifestmeta.sql.names              = "QtSql/*"
# manifestmeta.sql.tags               = database
#
# manifestmeta.global.names           = *
# manifestmeta.global.tags            = qt5

manifestmeta.highlighted.names      =  "QtQuickControls2/Qt Quick Controls 2 - Gallery" \
                                       "QtQuickControls2/Qt Quick Controls 2 - Wearable Demo" \
                                       "QtQuickControls2/Qt Quick Controls 2 - Text Editor" \
                                       "QtQuickControls2/Qt Quick Controls 2 - Contact List" \
                                       "QtQuickControls2/Qt Quick Controls 2 - Side Panel"
