| 62 | ElementGuard element(std::string tag) { return ElementGuard{this, tag}; } |
| 63 | void text(std::string text) { elements.back().push_back(text); } |
| 64 | void doctype(std::string element, std::string dtd, std::vector<std::string> args) { |
| 65 | std::string builder = ssprintf("<!DOCTYPE %s %s", element.c_str(), dtd.c_str()); |
| 66 | for (auto&& arg : args) { |
| 67 | builder.append(ssprintf(" %s", arg.c_str())); |
| 68 | } |
| 69 | builder.append(">\n"); |
| 70 | elements.back().push_back(builder); |
| 71 | } |
| 72 | std::string to_string() const { |
| 73 | mgb_assert(elements.size() == 1 && elements[0].size() >= 1); |
| 74 | std::string builder; |