From fd475aa358ed4e811c704eebf1d6f73f70b753c2 Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 9 Apr 2022 00:50:54 +0200 Subject: [PATCH] textviewer: translate basic ansi/sgr colors --- copyparty/web/browser.js | 69 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 8fafae85..6c6729b0 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -2314,10 +2314,12 @@ var showfile = (function () { '.bas': 'basic', '.bat': 'batch', '.cxx': 'cpp', + '.diz': 'ans', '.h': 'c', '.hpp': 'cpp', '.htm': 'html', '.hxx': 'cpp', + '.log': 'ans', '.patch': 'diff', '.ps1': 'powershell', '.psm1': 'powershell', @@ -2334,7 +2336,7 @@ var showfile = (function () { 'cmakelists.txt': 'cmake', 'dockerfile': 'docker' }; - var x = txt_ext + ' c cfg conf cpp cs css diff go html ini java js json jsx kt kts less latex lisp lua makefile md py r rss rb ruby sass scss sql svg swift tex toml ts vhdl xml yaml'; + var x = txt_ext + ' ans c cfg conf cpp cs css diff go html ini java js json jsx kt kts latex less lisp lua makefile md py r rss rb ruby sass scss sql svg swift tex toml ts vhdl xml yaml'; x = x.split(/ +/g); for (var a = 0; a < x.length; a++) r.map["." + x[a]] = x[a]; @@ -2441,7 +2443,10 @@ var showfile = (function () { if (lnh.slice(0, 5) == '#doc.') sethash(lnh.slice(1)); - Prism.highlightElement(el || QS('#doc>code')); + el = el || QS('#doc>code'); + Prism.highlightElement(el); + if (el.getAttribute('class') == 'language-ans') + r.ansify(el); } catch (ex) { } } @@ -2489,6 +2494,66 @@ var showfile = (function () { tree_scrollto(); } + r.ansify = function (el) { + var ctab = (light ? + //'bfbfbf c90f42 8eb91c fda200 00a0fd a40991 59c2b4 2d2d2d 9f9f9f a43856 66811c b57400 005a8e 531c80 0f6360 000000' : + 'bfbfbf d30253 497600 b96900 006fbb a50097 288276 2d2d2d 9f9f9f 943b55 3a5600 7f4f00 00507d 683794 004343 000000' : + '404040 f03669 b8e346 ffa402 02a2ff f65be3 3da698 d2d2d2 606060 c75b79 c8e37e ffbe4a 71cbff b67fe3 9cf0ed ffffff').split(/ /g), + src = el.innerHTML.split(/\x1b\[/g), + out = [''], fg = 7, bg = null, bfg = 0, bbg = 0, inv = 0, bold = 0; + + for (var a = 0; a < src.length; a++) { + var m = /^([0-9;]+)m/.exec(src[a]); + if (!m) { + if (a || src[a]) + out.push('\x1b[' + src[a]); + + continue; + } + + var cs = m[1].split(/;/g), + txt = src[a].slice(m[1].length + 1); + + for (var b = 0; b < cs.length; b++) { + var c = parseInt(cs[b]); + if (c == 0) { + fg = 7; + bg = null; + bfg = bbg = bold = inv = 0; + } + if (c == 1) bfg = bold = 1; + if (c == 7) inv = 1; + if (c == 22) bfg = bold = 0; + if (c == 27) inv = 0; + if (c >= 30 && c <= 37) fg = c - 30; + if (c >= 40 && c <= 47) bg = c - 40; + if (c >= 90 && c <= 97) { + fg = c - 90; + bfg = 1; + } + if (c >= 100 && c <= 107) { + bg = c - 100; + bbg = 1; + } + } + + var cfg = fg, cbg = bg; + if (inv) { + cbg = fg; + cfg = bg || 0; + } + + var s = '' + txt); + } + el.innerHTML = out.join(''); + }; + r.mktree = function () { var html = ['
  • list of textfiles in
    ' + linksplit(get_vpath()).join('') + '
  • ']; for (var a = 0; a < r.files.length; a++) {