zet.tlv: switch file reads to new API

In the process I found a couple of bugs in parsing JSON string escapes.
This commit is contained in:
Kartik K. Agaram 2022-03-07 08:22:37 -08:00
parent d388cc1f22
commit 503ad706fb
2 changed files with 40 additions and 2 deletions

View File

@ -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()

38
zet.tlv
View File

@ -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