summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2010-03-05 12:54:58 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2010-03-05 12:54:58 +0000
commit04791840f4dd4d6bcc96aea133e9fda7c03897de (patch)
treea5281811c502a918ba56050ea37c028672f10a98 /src
parentbc6f7fc139b5a72306a54c89db74bf126cca9ca7 (diff)
downloadguix-04791840f4dd4d6bcc96aea133e9fda7c03897de.tar.gz
* Emit warning='1' or error='1' attributes for lines marked as
  warnings or errors with \e[w or \e[e.

Diffstat (limited to 'src')
-rw-r--r--src/nix-log2xml/log2xml.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/nix-log2xml/log2xml.cc b/src/nix-log2xml/log2xml.cc
index b2a25eefa2..6645dc500f 100644
--- a/src/nix-log2xml/log2xml.cc
+++ b/src/nix-log2xml/log2xml.cc
@@ -18,6 +18,8 @@ struct Decoder
     int priority;
     bool ignoreLF;
     int lineNo, charNo;
+    bool warning;
+    bool error;
 
     Decoder()
     {
@@ -29,6 +31,8 @@ struct Decoder
         ignoreLF = false;
         lineNo = 1;
         charNo = 0;
+        warning = false;
+        error = false;
     }
 
     void pushChar(char c);
@@ -95,6 +99,12 @@ void Decoder::pushChar(char c)
                     case 'b':
                         ignoreLF = false;
                         break;
+                    case 'e':
+                        error = true;
+                        break;
+                    case 'w':
+                        warning = true;
+                        break;
                 }
             } else if (c >= '0' && c <= '9') {
                 int n = 0;
@@ -118,6 +128,8 @@ void Decoder::finishLine()
     string tag = inHeader ? "head" : "line";
     cout << "<" << tag;
     if (priority != 1) cout << " priority='" << priority << "'";
+    if (warning) cout << " warning='1'";
+    if (error) cout << " error='1'";
     cout << ">";
 
     for (unsigned int i = 0; i < line.size(); i++) {
@@ -158,6 +170,8 @@ void Decoder::finishLine()
     line = "";
     inHeader = false;
     priority = 1;
+    warning = false;
+    error = false;
 }