TERN Project Log
TERN Copyright 2020-2026 Greg Abbott
2026_0421
adds JAO (JS array of objects) rule: All objects need >1 key
Parser aims to extract table-like data i.e. 2+ columns 2+ rows
so now won't mark as JAO: [{age:1},{age:2},{age:3},{age:4}]
adds CSV rule: CSVs need >1 col where col 2 if last has values
adds global table rule: 2+ rows, 2+cols, same qty cols all rows
removes option for gap separated type (k1\nk2\n\nv1\nv1)
parsing for gap separated blocks matches too many other types
converts input on "CMD+Enter" keyboard shortcut
2026_0420
- Incorporates new text to array of data parser:
- handles a string of tables of mixed types and 'other' data
- handles lack of separation between tables of different kinds
- text to [other,csv,tsv,html,md,nested_arrays,array_of_pojos]
- parses each table block to array of arrays then wanted type
- reassembles to string keeping 'other' data in place
- eg:
- IN : [other1,csv_table,other2,html_table]
- OUT: [other1,converted,other2,converted]
- Removes output options: JS(on)DB, and markdown nested list
- Updates demo text with mixed input of convertible kinds
2026_0203
- Parses 'JS as string' input. Handles named and nameless data:
named : "var/let/const name = extracts_this_value"
unnamed: "[{unquoted:`backticks`/*comment+trailing comma*/,}]"
- Converts user input in two steps to reduce repeated work:
Converts string to JavaScript array of arrays (jaa) and caches
Converts cached jaa to any wanted output on demand
Updates JAA only when user changes input string value
2026_0104
- Adds "Fields then Records" touching text lines form row cells
2025_1014
- Prompts before save for custom file name input
2025_0904
- Extracts table from rich text clipboard to HTML on paste.
2025_0829
- Reverts SSV (space separated value) parser to simpler logic.
- Parser expects any SSV to never have blank cells.
2025_0723
- Improves CSV to JSON handling of blank first column cells.
2025_0517
- Renames tool to Tern.
2025_0514
- Fixes a bug: Unifies key order across all objects in a list.
- [{a,b,c},{c,a,b},{b,c,a}] |> [{a,b,c},{a,b,c},{a,b,c}]
- Needed to produce tables that split keys from values:
- [[k1,k2],[o1k1v,o1k2v],[o2k1v,o2k2v]]
2025_0222
- Adds align HTML table (presents as grid).
- Adds align JS array of objects as table.
- Adds checkbox to align output when possible if checked.
- Slims output list (from [Kind A, Kind A Aligned] to Kind A)
- Moves processing options to right side.
- Checks if SSV input is aligned or not and parses accordingly.
2025_0221
- Handles space separated data without aligned columns.
- See option "Space table (unaligned)".
- Adds minimum gap option to "space table (aligned)" logic.
- Refactors to convert all input to array of arrays first.
- Previously array of objects first.
- Replaces library (from JAO to X) with new (from JAA to X)
- JAO: JS array of objects | JAA : JS array of arrays
- Numbers duplicate headers / column names found in input data.
- Suffixes number only column headers, to keep their sort order.
- Handles input where records have or lack different fields.
- Adds "Reverse Headers" to reverse column/keys (A B C > C B A).
- Adds "Reverse Records" (i.e. non-header rows): 1 2 3 -> 3 2 1.
- Removes previous code.
2024_1124
- Refactors 'output to table' functions to share logic.
- Adds 'Rights' popover.
2024_1121
- Escapes tabs and newlines in values for some outputs.
- Refactors various converters.
- Adds button to push output to input.
- Rewrites space separated table parser (handles blank cells).
- Improves text cleaner (removes invisible characters).
2024_1118
- Adds JSON table: written to present CSV like data.
2024_1114
- Refactors converter functions into a JS library.
2024_1029
- Guesses aligned Markdown tables.
2024_1022
- Converts JSON array lists [["k1","k2"],["v1","v2"]].
2024_1018
- Adds more markdown list converters.
- Adds gap separated records converter.
- Restyles front end.
- Converts when user changes input or output type.
- Handles CSV with commas and quotes in values.
- Moves page information into popovers.
- Adds copy and save buttons for input and output.
- Adds function to guess type of input.
- Triggers guess input on paste.
- Selects input type on guess.
2024_0910
- Converts space separated values tables.
2024_0605
- Adds transpose feature to swap X and Y data.
2020_0721
- Merges converters to one page.