mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
92 lines
4.3 KiB
C++
92 lines
4.3 KiB
C++
/*
|
|
* 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
|