diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2022-03-07 08:22:37 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2022-03-07 08:22:37 -0800 |
commit | 503ad706fbe7400f197f92dc1d895fd2f3db7cb8 (patch) | |
tree | 0f21d95b47a39de0d7fbe28eba2623e0c15db40e | |
parent | d388cc1f229b74c181e8a7c466396ff02202c8b1 (diff) | |
download | teliva-503ad706fbe7400f197f92dc1d895fd2f3db7cb8.tar.gz |
zet.tlv: switch file reads to new API
In the process I found a couple of bugs in parsing JSON string escapes.
-rw-r--r-- | src/jsonf.lua | 4 | ||||
-rw-r--r-- | zet.tlv | 38 |
2 files changed, 40 insertions, 2 deletions
diff --git a/src/jsonf.lua b/src/jsonf.lua index ecf1eea..25e0c6e 100644 --- a/src/jsonf.lua +++ b/src/jsonf.lua @@ -127,7 +127,7 @@ local function parse_string(infile, firstc) if x < 32 then error("control character in string") - elseif c == '\\' then + elseif chr == '\\' then local c = infile:recv() if c == nil then break end if c == "u" then @@ -152,7 +152,7 @@ local function parse_string(infile, firstc) if not escape_chars[c] then error("invalid escape char '" .. c .. "' in string") end - table.insert(escape_char_map_inv[c]) + table.insert(res, escape_char_map_inv[c]) end elseif chr == '"' then return table.concat(res), infile:recv() diff --git a/zet.tlv b/zet.tlv index ce10cff..e9e08cc 100644 --- a/zet.tlv +++ b/zet.tlv @@ -3555,3 +3555,41 @@ >- ability to cross-link any card to any other, turning the tree into a graph (but still with a strong sense of hierarchy) > >zet.tlv satisfies these properties, but isn't very intuitive or usable yet. Contributions appreciated. +- __teliva_timestamp: + >Mon Mar 7 07:50:32 2022 + main: + >function main() + > init_colors() + > curses.curs_set(0) -- hide cursor except when editing + > + > local infile = start_reading(nil, 'zet') + > if infile then + > read_zettels(infile) + > end + > current_zettel_id = zettels.root -- cursor + > view_settings.first_zettel = zettels.root -- start rendering here + > + > while true do + > render(Window) + > update(Window) + > + > -- save zettels, but hold on to previous state on disk + > -- until last possible second + > local outfile = io.open('teliva_tmp', 'w') + > if outfile then + > write_zettels(outfile) + > local status, message = os.rename('teliva_tmp', 'zet') + > assert(status, message) -- unceremoniously abort, but we hopefully only lost a little + > end + > -- TODO: what if io.open failed for a non-sandboxing related reason?! + > -- We could silently fail to save. + > end + >end +- __teliva_timestamp: + >Mon Mar 7 07:51:06 2022 + __teliva_note: + >switch to new file API for reading + read_zettels: + >function read_zettels(infile) + > zettels = jsonf.decode(infile) + >end |