diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-03-18 21:04:14 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-03-18 21:04:14 +0000 |
commit | 3f3c4cce5a6552016a040999f64dc989d203a9ef (patch) | |
tree | c6b57dfa79f336a746bddb8110132b312da375e5 /src/log2xml/log2xml.cc | |
parent | 84c617966b8a78b7385aff04f1ac9b3bb7391898 (diff) |
* Added an extra escape code to signal "unimportant" messages. If a tree only has
unimportant messages, it is collapsed by the default.
* Also added an optional integer argument to the escape code for opening a nesting
level to indicate lack of importance. If set, the tree is collapsed by default.
Diffstat (limited to 'src/log2xml/log2xml.cc')
-rw-r--r-- | src/log2xml/log2xml.cc | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/log2xml/log2xml.cc b/src/log2xml/log2xml.cc index f3e976fd9..cf56374cb 100644 --- a/src/log2xml/log2xml.cc +++ b/src/log2xml/log2xml.cc @@ -1,3 +1,4 @@ +#include <vector> #include <iostream> #include <cstdio> #include <string> @@ -11,6 +12,9 @@ struct Decoder string line; bool inHeader; int level; + vector<int> args; + bool newNumber; + int priority; Decoder() { @@ -18,6 +22,7 @@ struct Decoder line = ""; inHeader = false; level = 0; + priority = 1; } void pushChar(char c); @@ -39,9 +44,11 @@ void Decoder::pushChar(char c) break; case stEscape: - if (c == '[') + if (c == '[') { state = stCSI; - else + args.clear(); + newNumber = true; + } else state = stTop; /* !!! wrong */ break; @@ -54,6 +61,7 @@ void Decoder::pushChar(char c) level++; inHeader = true; cout << "<nest>" << endl; + priority = args.size() >= 1 ? args[0] : 1; break; case 'q': if (line.size()) finishLine(); @@ -63,7 +71,19 @@ void Decoder::pushChar(char c) } else cerr << "not enough nesting levels" << endl; break; + case 's': + if (line.size()) finishLine(); + priority = args.size() >= 1 ? args[0] : 1; + break; + } + } else if (c >= '0' && c <= '9') { + int n = 0; + if (!newNumber) { + n = args.back() * 10; + args.pop_back(); } + n += c - '0'; + args.push_back(n); } break; @@ -76,7 +96,9 @@ void Decoder::finishLine() string storeDir = "/nix/store/"; int sz = storeDir.size(); string tag = inHeader ? "head" : "line"; - cout << "<" << tag << ">"; + cout << "<" << tag; + if (priority != 1) cout << " priority='" << priority << "'"; + cout << ">"; for (int i = 0; i < line.size(); i++) { @@ -113,6 +135,7 @@ void Decoder::finishLine() cout << "</" << tag << ">" << endl; line = ""; inHeader = false; + priority = 1; } |