• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1{% from "macros.tmpl" import license %}
2{{ license() }}
3
4#include "config.h"
5
6#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC
7#define {{namespace|to_macro_style}}_NAMES_HIDE_GLOBALS 1
8#else
9#define QNAME_DEFAULT_CONSTRUCTOR 1
10#endif
11
12#include "{{namespace}}Names.h"
13
14#include "wtf/StaticConstructors.h"
15
16namespace WebCore {
17namespace {{namespace}}Names {
18
19using namespace WebCore;
20
21DEFINE_GLOBAL(AtomicString, {{namespace_prefix}}NamespaceURI)
22
23{% if tags %}
24// Tags
25{% for tag in tags|sort %}
26DEFINE_GLOBAL(QualifiedName, {{tag|symbol}}Tag)
27{% endfor %}
28
29
30PassOwnPtr<const QualifiedName*[]> get{{namespace}}Tags()
31{
32    OwnPtr<const QualifiedName*[]> tags = adoptArrayPtr(new const QualifiedName*[{{namespace}}TagsCount]);
33    {% for tag in tags|sort %}
34    tags[{{loop.index0}}] = reinterpret_cast<const QualifiedName*>(&{{tag|symbol}}Tag);
35    {% endfor %}
36    return tags.release();
37}
38
39{% endif %}
40// Attributes
41{% for attr in attrs|sort %}
42DEFINE_GLOBAL(QualifiedName, {{attr|symbol}}Attr)
43{% endfor %}
44
45PassOwnPtr<const QualifiedName*[]> get{{namespace}}Attrs()
46{
47    OwnPtr<const QualifiedName*[]> attrs = adoptArrayPtr(new const QualifiedName*[{{namespace}}AttrsCount]);
48    {% for attr in attrs|sort %}
49    attrs[{{loop.index0}}] = reinterpret_cast<const WebCore::QualifiedName*>(&{{attr|symbol}}Attr);
50    {% endfor %}
51    return attrs.release();
52}
53
54void init()
55{
56    // Use placement new to initialize the globals.
57    AtomicString {{namespace_prefix}}NS("{{namespace_uri}}", AtomicString::ConstructFromLiteral);
58
59    // Namespace
60    new ((void*)&{{namespace_prefix}}NamespaceURI) AtomicString({{namespace_prefix}}NS);
61    {% for name, tag_list in (tags + attrs)|groupby('name')|sort %}
62    StringImpl* {{tag_list[0]|symbol}}Impl = StringImpl::createStatic("{{name}}", {{name|length}}, {{name|hash}});
63    {% endfor %}
64
65    // Tags
66    {% for tag in tags|sort %}
67    QualifiedName::createStatic((void*)&{{tag|symbol}}Tag, {{tag|symbol}}Impl, {{namespace_prefix}}NS);
68    {% endfor %}
69
70    // Attrs
71    {% for attr in attrs|sort %}
72    {% if use_namespace_for_attrs %}
73    QualifiedName::createStatic((void*)&{{attr|symbol}}Attr, {{attr|symbol}}Impl, {{namespace_prefix}}NS);
74    {% else %}
75    QualifiedName::createStatic((void*)&{{attr|symbol}}Attr, {{attr|symbol}}Impl);
76    {% endif %}
77    {% endfor %}
78}
79
80} // {{namespace}}
81} // WebCore
82