dlxjj/imradv3
0263
1#pragma once2#include <string>3#include <vector>4#include <map>5#include "node_window.h"6 7//------------------------------------------------------8class CppGen9{10public:11 static const std::string_view INDENT;12 static const std::string_view FOR_VAR_NAME;13 static const std::string_view CUR_ITEM_VAR_NAME;14 static const std::string_view HBOX_NAME;15 static const std::string_view VBOX_NAME;16 17 CppGen();18 bool ExportUpdate(const std::string& fname, TopWindow* node, const std::map<std::string, std::string>& params, std::string& err);19 auto Import(const std::string& path, std::map<std::string, std::string>& params, std::string& err) -> std::unique_ptr<TopWindow>;20 auto AltFName(const std::string& path) const -> std::string;21 int ReadGenVersion(const std::string& fname) const;22 23 const std::string& GetName() const { return m_name; }24 const std::string& GetVName() const { return m_vname; }25 //void SetName(const std::string& name) { m_name = name; }26 //void SetVName(const std::string& name) { m_vname = name; }27 void SetNamesFromId(const std::string& fname);28 29 struct Var30 {31 std::string type;32 std::string name;33 std::string init;34 enum { UserCode = 0x1, Interface = 0x2, Impl = 0x4 };35 int flags = 0;36 Var(const std::string& n, const std::string& t, const std::string& i, int f)37 : name(n), type(t), init(i), flags(f) {}38 };39 40 std::string CreateVar(const std::string& type, const std::string& init, int flags, const std::string& scope = "");41 bool CreateNamedVar(const std::string& name, const std::string& type, const std::string& init, int flags, const std::string& scope = "");42 bool RenameVar(const std::string& oldn, const std::string& newn, const std::string& scope = "");43 bool RemoveVar(const std::string& name, const std::string& scope = "");44 void RemovePrefixedVars(const std::string& prefix, const std::string& scope = "");45 bool ChangeVar(const std::string& name, const std::string& type, const std::string& init, int flags = -1, const std::string& scope = "");46 const Var* GetVar(const std::string& name, const std::string& scope = "") const;47 bool RenameStruct(const std::string& oldn, const std::string& newn);48 const std::vector<Var>& GetVars(const std::string& scope = "");49 std::vector<std::string> GetLayoutVars();50 std::vector<std::string> GetStructTypes();51 enum VarExprResult { SyntaxError, ConflictError, Existing, New, New_ImplicitStruct };52 VarExprResult CheckVarExpr(const std::string& name, const std::string& type, const std::string& scope = "");53 bool CreateVarExpr(std::string& name, const std::string& type, const std::string& init, int flags, const std::string& scope = "");54 auto GetVarExprs(const std::string& type, bool reference, const std::string& curArray = "") ->std::vector<std::pair<std::string, std::string>>;55 56private:57 Var* FindVar(const std::string& name, const std::string& scope);58 auto MatchType(const std::string& name, std::string_view type, std::string_view match, bool reference, const std::string& curArray) -> std::vector<std::pair<std::string, std::string>>;59 60 void CreateH(std::ostream& out);61 void CreateCpp(std::ostream& out);62 auto ExportH(std::ostream& out, std::istream& prev, const std::string& origHName, TopWindow* node) -> std::array<std::string, 3>;63 void ExportCpp(std::ostream& out, std::istream& prev, const std::array<std::string, 3>& origNames, const std::map<std::string, std::string>& params, TopWindow* node, const std::string& code);64 bool WriteStub(std::ostream& fout, const std::string& id, TopWindow::Kind kind, TopWindow::Placement animPos, const std::map<std::string, std::string>& params = {}, const std::string& code = {});65 auto ImportCode(std::istream& in, const std::string& fname, std::map<std::string, std::string>& params) -> std::unique_ptr<TopWindow>;66 67 bool ParseFieldDecl(const std::string& stype, const std::vector<std::string>& line, int flags);68 auto IsMemFun(const std::vector<std::string>& line)->std::string;69 bool IsMemDrawFun(const std::vector<std::string>& line);70 auto ParseDrawFun(const std::vector<std::string>& line, cpp::token_iterator& iter, std::map<std::string, std::string>& params) -> std::unique_ptr<TopWindow>;71 72 std::map<std::string, std::vector<Var>> m_fields;73 std::string m_name, m_vname, m_hname;74 std::string ctx_workingDir;75 int ctx_importVersion;76 std::string m_error;77};