module matplotlibd.pyplot; import matplotlibd.core.pycall; import matplotlibd.core.translate; private: string py_script = "import matplotlib.pyplot as plt\n"; immutable string plt_funcs = (){ import std.string: splitLines; string[] method_names = import("pyplot_functions.txt").splitLines; string plt_funcs; foreach(name; method_names) { plt_funcs ~= "void " ~ name ~ "(T...)(T a)" ~ "{import std.format: format;" ~ "string p;if(a.length>0){foreach(i;a){p~=parseArgs(i);}" ~ "p = p[0..$-1];}py_script~=format(\"plt."~ name ~ "(%s)\n\",p);"; if (name == "show" || name == "savefig") plt_funcs ~= "call(py_script);}\n"; else plt_funcs ~= "}\n"; } return plt_funcs; }(); public: import matplotlibd.core.translate: False, True, None; void clear() { py_script = "import matplotlib.pyplot as plt\n"; } mixin(plt_funcs); unittest { import std.string; auto script = py_script ~ "plt.plot([1, 2],[2, 4],\"r-\",lw=2)\n"; plot([1, 2], [2, 4], "r-", ["lw": 2]); assert(script == py_script); clear(); assert(py_script == "import matplotlib.pyplot as plt\n"); }