From 0e38578433f5626a33647d8d1332affe1b10b94c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 5 Oct 2005 09:42:13 +0000 Subject: * log2xml -> nix-log2xml. --- src/Makefile.am | 2 +- src/log2xml/Makefile.am | 17 ---- src/log2xml/log2html.xsl | 76 ------------------ src/log2xml/log2xml.cc | 172 ---------------------------------------- src/log2xml/logfile.css | 86 -------------------- src/log2xml/mark-errors.xsl | 24 ------ src/log2xml/treebits.js | 50 ------------ src/nix-log2xml/Makefile.am | 17 ++++ src/nix-log2xml/log2html.xsl | 76 ++++++++++++++++++ src/nix-log2xml/log2xml.cc | 172 ++++++++++++++++++++++++++++++++++++++++ src/nix-log2xml/logfile.css | 86 ++++++++++++++++++++ src/nix-log2xml/mark-errors.xsl | 24 ++++++ src/nix-log2xml/treebits.js | 50 ++++++++++++ 13 files changed, 426 insertions(+), 426 deletions(-) delete mode 100644 src/log2xml/Makefile.am delete mode 100644 src/log2xml/log2html.xsl delete mode 100644 src/log2xml/log2xml.cc delete mode 100644 src/log2xml/logfile.css delete mode 100644 src/log2xml/mark-errors.xsl delete mode 100644 src/log2xml/treebits.js create mode 100644 src/nix-log2xml/Makefile.am create mode 100644 src/nix-log2xml/log2html.xsl create mode 100644 src/nix-log2xml/log2xml.cc create mode 100644 src/nix-log2xml/logfile.css create mode 100644 src/nix-log2xml/mark-errors.xsl create mode 100644 src/nix-log2xml/treebits.js (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 7753a77d490c..3167105ffcc7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ SUBDIRS = bin2c boost libutil libstore libmain nix-store nix-hash \ - libexpr nix-instantiate nix-env log2xml bsdiff-4.2 + libexpr nix-instantiate nix-env nix-log2xml bsdiff-4.2 EXTRA_DIST = aterm-helper.pl diff --git a/src/log2xml/Makefile.am b/src/log2xml/Makefile.am deleted file mode 100644 index 4b6c76c24355..000000000000 --- a/src/log2xml/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -bin_PROGRAMS = nix-log2xml - -nix_log2xml_SOURCES = log2xml.cc - -%.xml: %.log nix-log2xml - ./nix-log2xml < $< > $@ - -%.html: %.xml mark-errors.xsl log2html.xsl - $(xsltproc) mark-errors.xsl $< | $(xsltproc) log2html.xsl - > $@ - -LOG2HTML = mark-errors.xsl log2html.xsl treebits.js - -EXTRA_DIST = $(LOG2HTML) - -install-data-local: - $(INSTALL) -d $(DESTDIR)$(datadir)/nix/log2html - $(INSTALL_DATA) $(LOG2HTML) $(DESTDIR)$(datadir)/nix/log2html diff --git a/src/log2xml/log2html.xsl b/src/log2xml/log2html.xsl deleted file mode 100644 index 0718df230f26..000000000000 --- a/src/log2xml/log2html.xsl +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - -
    - - - - linelastline - -
  • - - - - -
  • -
    -
-
- - - - - - error - - - - - - - - - - /... - - - -
\ No newline at end of file diff --git a/src/log2xml/log2xml.cc b/src/log2xml/log2xml.cc deleted file mode 100644 index c30fa5b02667..000000000000 --- a/src/log2xml/log2xml.cc +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include -#include -#include - -using namespace std; - - -struct Decoder -{ - enum { stTop, stEscape, stCSI } state; - string line; - bool inHeader; - int level; - vector args; - bool newNumber; - int priority; - bool ignoreLF; - int lineNo, charNo; - - Decoder() - { - state = stTop; - line = ""; - inHeader = false; - level = 0; - priority = 1; - ignoreLF = false; - lineNo = 1; - charNo = 0; - } - - void pushChar(char c); - - void finishLine(); -}; - - -void Decoder::pushChar(char c) -{ - if (c == '\n') { - lineNo++; - charNo = 0; - } else charNo++; - - switch (state) { - - case stTop: - if (c == '\e') { - state = stEscape; - } else if (c == '\n' && !ignoreLF) { - finishLine(); - } else line += c; - break; - - case stEscape: - if (c == '[') { - state = stCSI; - args.clear(); - newNumber = true; - } else - state = stTop; /* !!! wrong */ - break; - - case stCSI: - if (c >= 0x40 && c != 0x7e) { - state = stTop; - switch (c) { - case 'p': - if (line.size()) finishLine(); - level++; - inHeader = true; - cout << "" << endl; - priority = args.size() >= 1 ? args[0] : 1; - break; - case 'q': - if (line.size()) finishLine(); - if (level > 0) { - level--; - cout << "" << endl; - } else - cerr << "not enough nesting levels at line " - << lineNo << ", character " << charNo << endl; - break; - case 's': - if (line.size()) finishLine(); - priority = args.size() >= 1 ? args[0] : 1; - break; - case 'a': - ignoreLF = true; - break; - case 'b': - ignoreLF = false; - 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; - - } -} - - -void Decoder::finishLine() -{ - string storeDir = "/nix/store/"; - int sz = storeDir.size(); - string tag = inHeader ? "head" : "line"; - cout << "<" << tag; - if (priority != 1) cout << " priority='" << priority << "'"; - cout << ">"; - - for (unsigned int i = 0; i < line.size(); i++) { - - if (line[i] == '<') cout << "<"; - else if (line[i] == '&') cout << "&"; - else if (line[i] < 32 && line[i] != 9) cout << "�"; - else if (i + sz + 33 < line.size() && - string(line, i, sz) == storeDir && - line[i + sz + 32] == '-') - { - int j = i + sz + 32; - /* skip name */ - while (!strchr("/\n\r\t ()[]:;?<>", line[j])) j++; - int k = j; - while (!strchr("\n\r\t ()[]:;?<>", line[k])) k++; - // !!! escaping - cout << "" - << "" - << string(line, i, sz) - << "" - << "" - << string(line, i + sz, 32) - << "" - << "" - << string(line, i + sz + 32, j - (i + sz + 32)) - << "" - << "" - << string(line, j, k - j) - << "" - << ""; - i = k - 1; - } else cout << line[i]; - } - - cout << "" << endl; - line = ""; - inHeader = false; - priority = 1; -} - - -int main(int argc, char * * argv) -{ - Decoder dec; - int c; - - cout << "" << endl; - - while ((c = getchar()) != EOF) { - dec.pushChar(c); - } - - cout << "" << endl; -} diff --git a/src/log2xml/logfile.css b/src/log2xml/logfile.css deleted file mode 100644 index ed390d64a9ef..000000000000 --- a/src/log2xml/logfile.css +++ /dev/null @@ -1,86 +0,0 @@ -body { - font-family: sans-serif; - background: white; -} - - -ul.nesting, ul.toplevel { - padding: 0; - margin: 0; -} - -ul.toplevel { - list-style-type: none; -} - -ul.nesting li.line, ul.nesting li.lastline { - position: relative; - list-style-type: none; -} - -ul.nesting li.line { - padding-left: 1.1em; -} - -ul.nesting li.lastline { - padding-left: 1.2em; // for the 0.1em border-left in .lastline > .lineconn -} - -li.line { - border-left: 0.1em solid #6185a0; -} - -li.line > span.lineconn, li.lastline > span.lineconn { - position: absolute; - height: 0.65em; - left: 0em; - width: 1em; - border-bottom: 0.1em solid #6185a0; -} - -li.lastline > span.lineconn { - border-left: 0.1em solid #6185a0; -} - - -em.storeref { - color: #500000; - position: relative; - width: 100%; -} - -em.storeref:hover { - background-color: #eeeeee; -} - -*.popup { - display: none; -/* background: url('http://losser.st-lab.cs.uu.nl/~mbravenb/menuback.png') repeat; */ - background: #ffffcd; - border: solid #555555 1px; - position: absolute; - top: 0em; - left: 0em; - margin: 0; - padding: 0; - z-index: 100; -} - -em.storeref:hover span.popup { - display: inline; -} - - -.toggle { - text-decoration: none; -} - -.showTree, .hideTree { - font-family: monospace; - font-size: larger; -} - -.error { - color: #ff0000; - font-weight: bold; -} \ No newline at end of file diff --git a/src/log2xml/mark-errors.xsl b/src/log2xml/mark-errors.xsl deleted file mode 100644 index 4e91913e570a..000000000000 --- a/src/log2xml/mark-errors.xsl +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/log2xml/treebits.js b/src/log2xml/treebits.js deleted file mode 100644 index 3011b391d88b..000000000000 --- a/src/log2xml/treebits.js +++ /dev/null @@ -1,50 +0,0 @@ -/* Acknowledgement: this is based on the Wikipedia table-of-contents - * toggle. */ - - -var idCounter = 0; - - -function showTreeToggle(isHidden) { - if (document.getElementById) { - var id = "toggle_" + idCounter; - document.writeln( - '' + - '+' + - '-' + - ''); - idCounter = idCounter + 1; - } -} - - -function toggleTree(id) { - - var href = document.getElementById(id); - - var node = href; - var tree = null; - while (node != null) { - if (node.className == "nesting") tree = node; - node = node.nextSibling; - } - - node = href.firstChild; - var hideTree = null; - var showTree = null; - while (node != null) { - if (node.className == "showTree") showTree = node; - else if (node.className == "hideTree") hideTree = node; - node = node.nextSibling; - } - - if (tree.style.display == 'none') { - tree.style.display = ''; - hideTree.style.display = ''; - showTree.style.display = 'none'; - } else { - tree.style.display = 'none'; - hideTree.style.display = 'none'; - showTree.style.display = ''; - } -} diff --git a/src/nix-log2xml/Makefile.am b/src/nix-log2xml/Makefile.am new file mode 100644 index 000000000000..4b6c76c24355 --- /dev/null +++ b/src/nix-log2xml/Makefile.am @@ -0,0 +1,17 @@ +bin_PROGRAMS = nix-log2xml + +nix_log2xml_SOURCES = log2xml.cc + +%.xml: %.log nix-log2xml + ./nix-log2xml < $< > $@ + +%.html: %.xml mark-errors.xsl log2html.xsl + $(xsltproc) mark-errors.xsl $< | $(xsltproc) log2html.xsl - > $@ + +LOG2HTML = mark-errors.xsl log2html.xsl treebits.js + +EXTRA_DIST = $(LOG2HTML) + +install-data-local: + $(INSTALL) -d $(DESTDIR)$(datadir)/nix/log2html + $(INSTALL_DATA) $(LOG2HTML) $(DESTDIR)$(datadir)/nix/log2html diff --git a/src/nix-log2xml/log2html.xsl b/src/nix-log2xml/log2html.xsl new file mode 100644 index 000000000000..0718df230f26 --- /dev/null +++ b/src/nix-log2xml/log2html.xsl @@ -0,0 +1,76 @@ + + + + + + + + + + + + +
    + + + + linelastline + +
  • + + + + +
  • +
    +
+
+ + + + + + error + + + + + + + + + + /... + + + +
\ No newline at end of file diff --git a/src/nix-log2xml/log2xml.cc b/src/nix-log2xml/log2xml.cc new file mode 100644 index 000000000000..c30fa5b02667 --- /dev/null +++ b/src/nix-log2xml/log2xml.cc @@ -0,0 +1,172 @@ +#include +#include +#include +#include + +using namespace std; + + +struct Decoder +{ + enum { stTop, stEscape, stCSI } state; + string line; + bool inHeader; + int level; + vector args; + bool newNumber; + int priority; + bool ignoreLF; + int lineNo, charNo; + + Decoder() + { + state = stTop; + line = ""; + inHeader = false; + level = 0; + priority = 1; + ignoreLF = false; + lineNo = 1; + charNo = 0; + } + + void pushChar(char c); + + void finishLine(); +}; + + +void Decoder::pushChar(char c) +{ + if (c == '\n') { + lineNo++; + charNo = 0; + } else charNo++; + + switch (state) { + + case stTop: + if (c == '\e') { + state = stEscape; + } else if (c == '\n' && !ignoreLF) { + finishLine(); + } else line += c; + break; + + case stEscape: + if (c == '[') { + state = stCSI; + args.clear(); + newNumber = true; + } else + state = stTop; /* !!! wrong */ + break; + + case stCSI: + if (c >= 0x40 && c != 0x7e) { + state = stTop; + switch (c) { + case 'p': + if (line.size()) finishLine(); + level++; + inHeader = true; + cout << "" << endl; + priority = args.size() >= 1 ? args[0] : 1; + break; + case 'q': + if (line.size()) finishLine(); + if (level > 0) { + level--; + cout << "" << endl; + } else + cerr << "not enough nesting levels at line " + << lineNo << ", character " << charNo << endl; + break; + case 's': + if (line.size()) finishLine(); + priority = args.size() >= 1 ? args[0] : 1; + break; + case 'a': + ignoreLF = true; + break; + case 'b': + ignoreLF = false; + 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; + + } +} + + +void Decoder::finishLine() +{ + string storeDir = "/nix/store/"; + int sz = storeDir.size(); + string tag = inHeader ? "head" : "line"; + cout << "<" << tag; + if (priority != 1) cout << " priority='" << priority << "'"; + cout << ">"; + + for (unsigned int i = 0; i < line.size(); i++) { + + if (line[i] == '<') cout << "<"; + else if (line[i] == '&') cout << "&"; + else if (line[i] < 32 && line[i] != 9) cout << "�"; + else if (i + sz + 33 < line.size() && + string(line, i, sz) == storeDir && + line[i + sz + 32] == '-') + { + int j = i + sz + 32; + /* skip name */ + while (!strchr("/\n\r\t ()[]:;?<>", line[j])) j++; + int k = j; + while (!strchr("\n\r\t ()[]:;?<>", line[k])) k++; + // !!! escaping + cout << "" + << "" + << string(line, i, sz) + << "" + << "" + << string(line, i + sz, 32) + << "" + << "" + << string(line, i + sz + 32, j - (i + sz + 32)) + << "" + << "" + << string(line, j, k - j) + << "" + << ""; + i = k - 1; + } else cout << line[i]; + } + + cout << "" << endl; + line = ""; + inHeader = false; + priority = 1; +} + + +int main(int argc, char * * argv) +{ + Decoder dec; + int c; + + cout << "" << endl; + + while ((c = getchar()) != EOF) { + dec.pushChar(c); + } + + cout << "" << endl; +} diff --git a/src/nix-log2xml/logfile.css b/src/nix-log2xml/logfile.css new file mode 100644 index 000000000000..ed390d64a9ef --- /dev/null +++ b/src/nix-log2xml/logfile.css @@ -0,0 +1,86 @@ +body { + font-family: sans-serif; + background: white; +} + + +ul.nesting, ul.toplevel { + padding: 0; + margin: 0; +} + +ul.toplevel { + list-style-type: none; +} + +ul.nesting li.line, ul.nesting li.lastline { + position: relative; + list-style-type: none; +} + +ul.nesting li.line { + padding-left: 1.1em; +} + +ul.nesting li.lastline { + padding-left: 1.2em; // for the 0.1em border-left in .lastline > .lineconn +} + +li.line { + border-left: 0.1em solid #6185a0; +} + +li.line > span.lineconn, li.lastline > span.lineconn { + position: absolute; + height: 0.65em; + left: 0em; + width: 1em; + border-bottom: 0.1em solid #6185a0; +} + +li.lastline > span.lineconn { + border-left: 0.1em solid #6185a0; +} + + +em.storeref { + color: #500000; + position: relative; + width: 100%; +} + +em.storeref:hover { + background-color: #eeeeee; +} + +*.popup { + display: none; +/* background: url('http://losser.st-lab.cs.uu.nl/~mbravenb/menuback.png') repeat; */ + background: #ffffcd; + border: solid #555555 1px; + position: absolute; + top: 0em; + left: 0em; + margin: 0; + padding: 0; + z-index: 100; +} + +em.storeref:hover span.popup { + display: inline; +} + + +.toggle { + text-decoration: none; +} + +.showTree, .hideTree { + font-family: monospace; + font-size: larger; +} + +.error { + color: #ff0000; + font-weight: bold; +} \ No newline at end of file diff --git a/src/nix-log2xml/mark-errors.xsl b/src/nix-log2xml/mark-errors.xsl new file mode 100644 index 000000000000..4e91913e570a --- /dev/null +++ b/src/nix-log2xml/mark-errors.xsl @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/nix-log2xml/treebits.js b/src/nix-log2xml/treebits.js new file mode 100644 index 000000000000..3011b391d88b --- /dev/null +++ b/src/nix-log2xml/treebits.js @@ -0,0 +1,50 @@ +/* Acknowledgement: this is based on the Wikipedia table-of-contents + * toggle. */ + + +var idCounter = 0; + + +function showTreeToggle(isHidden) { + if (document.getElementById) { + var id = "toggle_" + idCounter; + document.writeln( + '' + + '+' + + '-' + + ''); + idCounter = idCounter + 1; + } +} + + +function toggleTree(id) { + + var href = document.getElementById(id); + + var node = href; + var tree = null; + while (node != null) { + if (node.className == "nesting") tree = node; + node = node.nextSibling; + } + + node = href.firstChild; + var hideTree = null; + var showTree = null; + while (node != null) { + if (node.className == "showTree") showTree = node; + else if (node.className == "hideTree") hideTree = node; + node = node.nextSibling; + } + + if (tree.style.display == 'none') { + tree.style.display = ''; + hideTree.style.display = ''; + showTree.style.display = 'none'; + } else { + tree.style.display = 'none'; + hideTree.style.display = 'none'; + showTree.style.display = ''; + } +} -- cgit 1.4.1