{% from "macros.tmpl" import license %}
{{ license() }}

#ifndef {{namespace}}{{suffix}}Names_h
#define {{namespace}}{{suffix}}Names_h

{% if suffix %}
#include "core/{{namespace}}Names.h"
{% else %}
{% if export %}
#include "platform/PlatformExport.h"
{% endif %}
#include "wtf/text/AtomicString.h"
{% endif %}

namespace blink {
namespace {{namespace}}Names {

{% for entry in entries|sort %}
{% filter enable_conditional(entry.Conditional) %}
{% if export %}
{{export}} extern const WTF::AtomicString& {{entry|symbol}};
{% else %}
extern const WTF::AtomicString& {{entry|symbol}};
{% endif %}
{% endfilter %}
{% endfor %}

{{export}} void init{{suffix}}();

} // {{namespace}}Names
} // namespace blink

#endif
