Initial commit
This commit is contained in:
92
engines/director/lingo/lingodec/codewritervisitor.h
Normal file
92
engines/director/lingo/lingodec/codewritervisitor.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#ifndef LINGODEC_CODEWRITERVISITOR_H
|
||||
#define LINGODEC_CODEWRITERVISITOR_H
|
||||
|
||||
#include "./ast.h"
|
||||
|
||||
namespace LingoDec {
|
||||
|
||||
class CodeWriterVisitor: public LingoDec::NodeVisitor {
|
||||
public:
|
||||
CodeWriterVisitor(bool dotSyntax, bool sum, const Common::String &lineEnding = "\n", const Common::String &indentation = " ")
|
||||
: _dot(dotSyntax), _sum(sum), _lineEnding(lineEnding), _indentation(indentation) {}
|
||||
virtual ~CodeWriterVisitor() {}
|
||||
virtual void visit(const LingoDec::HandlerNode& node) override;
|
||||
virtual void visit(const LingoDec::ErrorNode& node) override;
|
||||
virtual void visit(const LingoDec::CommentNode& node) override;
|
||||
virtual void visit(const LingoDec::NewObjNode& node) override;
|
||||
virtual void visit(const LingoDec::LiteralNode& node) override;
|
||||
virtual void visit(const LingoDec::IfStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::EndCaseNode& node) override;
|
||||
virtual void visit(const LingoDec::ObjCallNode& node) override;
|
||||
virtual void visit(const LingoDec::PutStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::TheExprNode& node) override;
|
||||
virtual void visit(const LingoDec::BinaryOpNode& node) override;
|
||||
virtual void visit(const LingoDec::CaseStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::ExitStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::TellStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::WhenStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::CaseLabelNode& node) override;
|
||||
virtual void visit(const LingoDec::ChunkExprNode& node) override;
|
||||
virtual void visit(const LingoDec::InverseOpNode& node) override;
|
||||
virtual void visit(const LingoDec::ObjCallV4Node& node) override;
|
||||
virtual void visit(const LingoDec::OtherwiseNode& node) override;
|
||||
virtual void visit(const LingoDec::MemberExprNode& node) override;
|
||||
virtual void visit(const LingoDec::ObjPropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::PlayCmdStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::ThePropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::MenuPropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::SoundCmdStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::SoundPropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::AssignmentStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::ExitRepeatStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::NextRepeatStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::ObjBracketExprNode& node) override;
|
||||
virtual void visit(const LingoDec::SpritePropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::ChunkDeleteStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::ChunkHiliteStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::RepeatWhileStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::MenuItemPropExprNode& node) override;
|
||||
virtual void visit(const LingoDec::ObjPropIndexExprNode& node) override;
|
||||
virtual void visit(const LingoDec::RepeatWithInStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::RepeatWithToStmtNode& node) override;
|
||||
virtual void visit(const LingoDec::SpriteWithinExprNode& node) override;
|
||||
virtual void visit(const LingoDec::LastStringChunkExprNode& node) override;
|
||||
virtual void visit(const LingoDec::SpriteIntersectsExprNode& node) override;
|
||||
virtual void visit(const LingoDec::StringChunkCountExprNode& node) override;
|
||||
virtual void visit(const LingoDec::VarNode& node) override;
|
||||
virtual void visit(const LingoDec::CallNode& node) override;
|
||||
virtual void visit(const LingoDec::BlockNode& node) override;
|
||||
virtual void visit(const LingoDec::NotOpNode& node) override;
|
||||
|
||||
size_t lineWidth() const { return _lineWidth; }
|
||||
void indent();
|
||||
void unindent();
|
||||
void writeIndentation();
|
||||
void write(char c);
|
||||
void write(const Common::String& s);
|
||||
void writeLine();
|
||||
void writeLine(const Common::String& s);
|
||||
void write(LingoDec::Datum& datum);
|
||||
|
||||
public:
|
||||
Common::String _str;
|
||||
|
||||
private:
|
||||
bool _dot = false;
|
||||
bool _sum = false;
|
||||
Common::String _lineEnding;
|
||||
Common::String _indentation = " ";
|
||||
bool _indentWritten = false;
|
||||
int _indent = 0;
|
||||
size_t _lineWidth = 0;
|
||||
};
|
||||
|
||||
} // namespace LingoDec
|
||||
|
||||
#endif // LINGODEC_CODEWRITERVISITOR_H
|
||||
Reference in New Issue
Block a user