mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 14:01:25 +12:00
54 lines
1 KiB
C++
54 lines
1 KiB
C++
#include "document.h"
|
|
#include "node.h"
|
|
#include "token.h"
|
|
#include "scanner.h"
|
|
|
|
namespace YAML
|
|
{
|
|
Document::Document(): m_pRoot(0)
|
|
{
|
|
}
|
|
|
|
Document::~Document()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
void Document::Clear()
|
|
{
|
|
delete m_pRoot;
|
|
m_pRoot = 0;
|
|
}
|
|
|
|
void Document::Parse(Scanner *pScanner, const ParserState& state)
|
|
{
|
|
Clear();
|
|
|
|
// we better have some tokens in the queue
|
|
if(!pScanner->PeekNextToken())
|
|
return;
|
|
|
|
// first eat doc start (optional)
|
|
if(pScanner->PeekNextToken()->type == TT_DOC_START)
|
|
pScanner->EatNextToken();
|
|
|
|
// now create our root node and parse it
|
|
m_pRoot = new Node;
|
|
m_pRoot->Parse(pScanner, state);
|
|
|
|
// and finally eat any doc ends we see
|
|
while(pScanner->PeekNextToken() && pScanner->PeekNextToken()->type == TT_DOC_END)
|
|
pScanner->EatNextToken();
|
|
}
|
|
|
|
std::ostream& operator << (std::ostream& out, const Document& doc)
|
|
{
|
|
if(!doc.m_pRoot) {
|
|
out << "{empty node}\n";
|
|
return out;
|
|
}
|
|
|
|
doc.m_pRoot->Write(out, 0);
|
|
return out;
|
|
}
|
|
}
|