mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-10 13:01:18 +00:00
Moved all code to src/ and include/ directories.
This commit is contained in:
85
src/scanner.h
Normal file
85
src/scanner.h
Normal file
@@ -0,0 +1,85 @@
|
||||
#pragma once
|
||||
|
||||
#include <ios>
|
||||
#include <string>
|
||||
#include <queue>
|
||||
#include <stack>
|
||||
#include <set>
|
||||
#include "stream.h"
|
||||
|
||||
namespace YAML
|
||||
{
|
||||
struct Token;
|
||||
|
||||
class Scanner
|
||||
{
|
||||
public:
|
||||
Scanner(std::istream& in);
|
||||
~Scanner();
|
||||
|
||||
Token *GetNextToken();
|
||||
void EatNextToken();
|
||||
void PopNextToken();
|
||||
Token *PeekNextToken();
|
||||
|
||||
private:
|
||||
// scanning
|
||||
void StartStream();
|
||||
void EndStream();
|
||||
void ScanNextToken();
|
||||
void ScanToNextToken();
|
||||
Token *PushIndentTo(int column, bool sequence);
|
||||
void PopIndentTo(int column);
|
||||
|
||||
// checking input
|
||||
void InsertSimpleKey();
|
||||
bool VerifySimpleKey();
|
||||
void VerifyAllSimpleKeys();
|
||||
|
||||
bool IsWhitespaceToBeEaten(char ch);
|
||||
|
||||
struct SimpleKey {
|
||||
SimpleKey(int pos_, int line_, int column_, int flowLevel_);
|
||||
|
||||
void Validate();
|
||||
void Invalidate();
|
||||
|
||||
int pos, line, column, flowLevel;
|
||||
Token *pMapStart, *pKey;
|
||||
};
|
||||
|
||||
// and the tokens
|
||||
void ScanDirective();
|
||||
void ScanDocStart();
|
||||
void ScanDocEnd();
|
||||
void ScanBlockSeqStart();
|
||||
void ScanBlockMapSTart();
|
||||
void ScanBlockEnd();
|
||||
void ScanBlockEntry();
|
||||
void ScanFlowStart();
|
||||
void ScanFlowEnd();
|
||||
void ScanFlowEntry();
|
||||
void ScanKey();
|
||||
void ScanValue();
|
||||
void ScanAnchorOrAlias();
|
||||
void ScanTag();
|
||||
void ScanPlainScalar();
|
||||
void ScanQuotedScalar();
|
||||
void ScanBlockScalar();
|
||||
|
||||
private:
|
||||
// the stream
|
||||
Stream INPUT;
|
||||
|
||||
// the output (tokens)
|
||||
std::queue <Token *> m_tokens;
|
||||
|
||||
// state info
|
||||
bool m_startedStream, m_endedStream;
|
||||
bool m_simpleKeyAllowed;
|
||||
int m_flowLevel; // number of unclosed '[' and '{' indicators
|
||||
bool m_isLastKeyValid;
|
||||
std::stack <SimpleKey> m_simpleKeys;
|
||||
std::stack <int> m_indents;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user