sfeed_content: optimizations - sfeed_curses - sfeed curses UI (now part of sfeed, development is in sfeed)
(HTM) git clone git://git.codemadness.org/sfeed_curses
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 8e151ce48b503ad0ff0e24cb1be3bc93d6fbd895
(DIR) parent 7bf22e2b26d6e81c28404cc0230b7a0b6dee54c3
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Mon, 25 Oct 2021 22:59:20 +0200
sfeed_content: optimizations
- Optimize the unescape() function. Use a temporary replacement character so
escaping escape codes work correctly. The \x01 character cannot occur in the
sfeed(5) data.
- Optimize text decoding in gawk and other awk implementations that support
unicode. This forces a simpler byte decoding and increases performance. This
works because the sfeed(5) data is UTF-8.
Diffstat:
M sfeed_content | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
---
(DIR) diff --git a/sfeed_content b/sfeed_content
@@ -1,21 +1,15 @@
#!/bin/sh
# Content viewer for sfeed(5) lines.
-awk -F '\t' '
+# The locale is set to "C" for performance. The input is always UTF-8.
+LC_ALL=C awk -F '\t' '
function unescape(s) {
- for (data = ""; (idx = index(s, "\\")); s = substr(s, idx + 2)) {
- prev = substr(s, 1, idx - 1)
- c = substr(s, idx + 1, 1)
- if (c == "t")
- data = data prev "\t"
- else if (c == "n")
- data = data prev "\n"
- else if (c == "\\")
- data = data prev "\\"
- else
- data = data prev # ignore other.
- }
- return data s # rest
+ # use the character "\x01" as a temporary replacement for "\".
+ gsub("\\\\\\\\", "\x01", s);
+ gsub("\\\\n", "\n", s);
+ gsub("\\\\t", "\t", s);
+ gsub("\x01", "\\", s); # restore "\x01" to "\".
+ return s;
}
BEGIN {
htmlconv = "lynx -stdin -dump " \