1
2
3
4
5
6 #include <sngcpp/symbols/EnumerationSymbol.hpp>
7 #include <soulng/util/Unicode.hpp>
8
9 namespace sngcpp { namespace symbols {
10
11 using namespace soulng::unicode;
12
13 EnumTypeSymbol::EnumTypeSymbol(const Span& span_, const std::u32string& name_, EnumKey enumKey_) : TypeSymbol(span_, name_), enumKey(enumKey_), baseType(nullptr)
14 {
15 }
16
17 std::std::unique_ptr<sngxml::dom::Element>EnumTypeSymbol::CreateElement()
18 {
19 std::unique_ptr<sngxml::dom::Element> enumTypeElement(new sngxml::dom::Element(U"enumType"));
20 enumTypeElement->SetAttribute(U"key", ToString(enumKey));
21 if (baseType)
22 {
23 enumTypeElement->SetAttribute(U"baseType", baseType->Id());
24 }
25 if (GetSpan().Valid())
26 {
27 enumTypeElement->SetAttribute(U"definitionFile", ToUtf32(fileName));
28 enumTypeElement->SetAttribute(U"definitionLine", ToUtf32(std::to_string(GetSpan().line)));
29 enumTypeElement->SetAttribute(U"definitionFileId", fileId);
30 }
31 return enumTypeElement;
32 }
33
34 EnumeratorSymbol::EnumeratorSymbol(const Span& span_, const std::u32string& name_, const std::u32string& value_) : Symbol(span_, name_), value(value_)
35 {
36 }
37
38 std::std::unique_ptr<sngxml::dom::Element>EnumeratorSymbol::CreateElement()
39 {
40 std::unique_ptr<sngxml::dom::Element> enumeratorElement(new sngxml::dom::Element(U"enumerator"));
41 enumeratorElement->SetAttribute(U"value", value);
42 return enumeratorElement;
43 }
44
45 } }