← Back to file list Raw

src/CLuaPreProcessor.h

#pragma once
#include <string>
#include <vector>
#include <utility>
#include <map>
class CLuaPreProcessor
{
public:
void ProcessText(const std::wstring& str);
void Dump(const std::wstring& outName);
bool IsDirectivePresent(const std::wstring& name);
std::wstring GetDirectiveValue(const std::wstring& name);
bool IsDirectivePresent(const std::string& name);
std::wstring GetDirectiveValue(const std::string& name);
std::wstring CodeString;
private:
struct DirectiveResult
{
std::map<std::wstring, std::wstring> directives;
std::vector<std::pair<size_t, size_t>> directiveRanges;
};
struct OperatorPattern
{
std::wstring symbol;
std::wstring replacementOp;
};
std::vector<std::pair<size_t, size_t>> FindProtectedRanges(const std::wstring& str);
void FindSkipRanges();
DirectiveResult FindDirectives(const std::wstring& str);
std::wstring ApplyCustomOperators(const std::wstring& source);
std::wstring GetIdentifierBackwards(const std::wstring& text, size_t pos);
std::wstring GetIdentifierForward(const std::wstring& text, size_t pos);
std::pair<size_t, size_t> FindLeftExpression(const std::wstring& text, size_t operPos);
std::pair<size_t, size_t> FindRightExpression(const std::wstring& text, size_t startPos);
bool IsInProtectedRange(size_t pos);
bool IsInProtectedRange(size_t rangeStart, size_t rangeEnd);
bool IsInSkipRange(size_t pos);
bool IsInSkipRange(size_t rangeStart, size_t rangeEnd);
std::wstring DeleteDirectives();
void UpdateInternalRanges();
void UpdateInternalDirectives();
std::vector<std::pair<size_t, size_t>> Ranges;
std::vector<std::pair<size_t, size_t>> SkipRanges;
DirectiveResult Directives;
};