////////////////////////////////////////////////////////////////////////////////// // // print, pprint, and tostring // // This module implements the heart of the lua 'print', lua 'pprint', and lua // 'tostring' functions. Note that we have to override the lua builtins 'print' // and 'tostring' for two reasons: // // * We need to suppress the printing of table addresses, for determinism. // * We need to channel the output to a PrintBuffer in the world model. // // Note that the actual lua 'print' and 'pprint' routines aren't defined in this // module, they're in the World module, because they send their output into the // PrintBuffer of the world model. But all the tricky code to implement 'print' // and 'pprint' are in this module. // ////////////////////////////////////////////////////////////////////////////////// #ifndef PPRINT_HPP #define PPRINT_HPP #include "luastack.hpp" #include struct PrettyPrintOptions { bool indent; int level; bool expand; PrettyPrintOptions() : indent(true), level(0), expand(true) {} void parse(LuaKeywordParser &kp); }; // Atomic print to a stream. // // This prints an atomic value to a stream. If you give it a table, // it just prints "". This routine is the heart of the lua // primitives 'print' and 'tostring'. // void atomic_print(LuaCoreStack &LS, LuaSlot val, bool quote, std::ostream *os); // Pretty print to a stream. // void pprint(LuaCoreStack &LS, LuaSlot val, const PrettyPrintOptions &opts, std::ostream *os); #endif // PPRINT_HPP