summaryrefslogtreecommitdiffstats
path: root/src/BookContent.cpp
blob: 4163d77d173ae7017da2c86cff85ed1ac2cb6475 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

// BookContent.cpp

#include "Globals.h"
#include "BookContent.h"
#include "json/json.h"





void cBookContent::Clear()
{
	m_Author.clear();
	m_Title.clear();
	m_Pages.clear();
}





bool cBookContent::IsEmpty(void) const
{
	return (
		m_Author.empty() &&
		m_Title.empty() &&
		m_Pages.empty()
	);
}





void cBookContent::ParseFromNBT(int TagTag, cBookContent & a_BookContent, const cParsedNBT & a_NBT, bool a_SaveAsJson)
{
	int AuthorTag = a_NBT.FindChildByName(TagTag, "author");
	if ((AuthorTag > 0) && (a_NBT.GetType(AuthorTag) == TAG_String))
	{
		a_BookContent.SetAuthor(a_NBT.GetString(AuthorTag));
	}

	int TitleTag = a_NBT.FindChildByName(TagTag, "title");
	if ((TitleTag > 0) && (a_NBT.GetType(TitleTag) == TAG_String))
	{
		a_BookContent.SetTitle(a_NBT.GetString(TitleTag));
	}

	int PagesTag = a_NBT.FindChildByName(TagTag, "pages");
	if ((PagesTag > 0) && (a_NBT.GetType(PagesTag) == TAG_List))
	{
		for (int PageTag = a_NBT.GetFirstChild(PagesTag); PageTag >= 0; PageTag = a_NBT.GetNextSibling(PageTag))
		{
			if (a_NBT.GetType(PageTag) == TAG_String)
			{
				if (a_SaveAsJson)
				{
					Json::Value Page;
					Page["text"] = a_NBT.GetString(PageTag);
					a_BookContent.AddPage(Page.toStyledString());
				}
				else
				{
					a_BookContent.AddPage(a_NBT.GetString(PageTag));
				}
			}
		}
	}
}





void cBookContent::WriteToNBTCompound(const cBookContent & a_BookContent, cFastNBTWriter & a_Writer)
{
	if (a_BookContent.IsEmpty())
	{
		return;
	}

	a_Writer.AddString("author", a_BookContent.GetAuthor());
	a_Writer.AddString("title", a_BookContent.GetTitle());
	a_Writer.BeginList("pages", TAG_String);
	for (const auto & Page : a_BookContent.GetPages())
	{
		a_Writer.AddString("", Page);
	}
	a_Writer.EndList();
}