From dfb1415d5eaf006ee45235f275d17f52d3db38e5 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 18 May 2020 12:06:16 +0300 Subject: Add dump(ostream,script::lines) (partial implementation) --- libbuild2/token.cxx | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) (limited to 'libbuild2/token.cxx') diff --git a/libbuild2/token.cxx b/libbuild2/token.cxx index 4975a02..ebbdd83 100644 --- a/libbuild2/token.cxx +++ b/libbuild2/token.cxx @@ -8,18 +8,45 @@ using namespace std; namespace build2 { void - token_printer (ostream& os, const token& t, bool d) + token_printer (ostream& os, const token& t, print_mode m) { // Only quote non-name tokens for diagnostics. // - const char* q (d ? "'" : ""); + const char* q (m == print_mode::diagnostics ? "'" : ""); + bool r (m == print_mode::raw); switch (t.type) { - case token_type::eos: os << ""; break; - case token_type::newline: os << ""; break; - case token_type::pair_separator: os << ""; break; - case token_type::word: os << '\'' << t.value << '\''; break; + case token_type::eos: + { + if (!r) + os <<""; + + break; + } + case token_type::newline: + { + os << (r ? "\n" : ""); + break; + } + case token_type::pair_separator: + { + if (r) + os << t.value[0]; + else + os << ""; + + break; + } + case token_type::word: + { + if (r) + os << t.value; + else + os << '\'' << t.value << '\''; + + break; + } case token_type::colon: os << q << ':' << q; break; case token_type::dollar: os << q << '$' << q; break; -- cgit v1.1