summaryrefslogtreecommitdiff
path: root/web/biblio-fmt-tbl
diff options
context:
space:
mode:
authorGeorge Abbott <george@gabbott.dev>2023-10-31 17:54:07 +0000
committerGeorge Abbott <george@gabbott.dev>2023-10-31 17:54:07 +0000
commit4d0bd914e7c1ee65f4036e60149a7b891906a5d3 (patch)
treec2a6751823e064e003cd4f6166df07bfc106d7eb /web/biblio-fmt-tbl
Commit all to date.
Diffstat (limited to 'web/biblio-fmt-tbl')
-rwxr-xr-xweb/biblio-fmt-tbl181
1 files changed, 181 insertions, 0 deletions
diff --git a/web/biblio-fmt-tbl b/web/biblio-fmt-tbl
new file mode 100755
index 0000000..0296e8b
--- /dev/null
+++ b/web/biblio-fmt-tbl
@@ -0,0 +1,181 @@
+#!/usr/bin/env ruby
+# Take a file as first argument, which is to be the file biblio.csv, containing
+# all books read. Then formats this as a table. It sorts the books in
+# the order [Ongoing, Completed, Yet to Read], and replaces several values with
+# ones more appropriate for viewing pleasure.
+# For the final column (index: 11, zero-indexed) we replace the contents with a
+# link. So rd/the-progress-of-a-crime becomes
+# For column 3 (Part), this is rounded as special logic.
+# <a href="https://gabbott.dev/rd/the-progress-of-a-crime>Link</a>
+
+require_relative './biblio-require'
+
+
+
+if ARGV[0] == nil then
+ puts "<!-- No argument passed! ma-fmt-tbl Exitting early. -->\n"
+ exit
+end
+
+# def do_header(h: str): str
+# Returns the rows of the table corresponding to the header.
+def do_header(h)
+ s = "\t<tr class=\"header\">\n"
+ values = h.split($delim)
+
+ values.each_with_index do |value, idx|
+ next if idx == 0 or idx == 7 or idx == 8 or idx == 9
+ s << ("\t\t<th>" + value + "</th>\n")
+ end
+
+ s << "\t</tr>\n"
+ return s
+end
+
+# Make the string look sexy, ooh la la.
+def sexify(val)
+ # Round integers if they end .00.
+ if val.end_with? ".00" then
+ integral = val.to_i
+ unless integral == 0
+ return integral.to_s
+ end
+ end
+
+ # Transform strings.
+ if $status_transform.has_key? (val)
+ return $status_transform[val]
+ end
+ if $form_transform.has_key? (val)
+ return $form_transform[val]
+ end
+ if $ownership_transform.has_key? (val)
+ return $ownership_transform[val]
+ end
+ if $general_transform.has_key? (val)
+ return $general_transform[val]
+ end
+ return val
+end
+
+
+# The tables, which are set as targets during the look
+table=""
+table_ongoing=""
+table_cmp="" # Just contains completed entries.
+table_paused=""
+table_drp=""
+table_rest=""
+table_coll=""
+
+# And the counts, for adding in counts if I want
+ctable_ongoing=0
+ctable_cmp=0
+ctable_paused=0
+ctable_drp=0
+ctable_rest=0
+ctable_coll=0
+
+# And the header, don't forget!
+header=""
+
+File.foreach(ARGV[0]).with_index do |line, line_num|
+ next if line == "\n" or line == "\t" or line == "" or line == " " or line == $delim
+
+ # Handle the first line - the header.
+ if line_num == 0 then
+ header << do_header(line)
+ else
+ # We need to figure out whether it is ongoing, completed, or yet to read.
+ # To do this, we will check if the corresponding string is in the line.
+ if line.include? "completed;" then
+ target = table_cmp
+ ctable_cmp += 1
+ elsif line.include? "ongoing;" then
+ target = table_ongoing
+ ctable_ongoing += 1
+ elsif line.include? "paused;" then
+ target = table_paused
+ ctable_paused += 1
+ elsif line.include? "dropped;" then
+ target = table_drp
+ ctable_drp += 1
+ elsif line.include? "collection;" then
+ target = table_coll
+ ctable_coll += 1
+ else
+ target = table_rest
+ ctable_rest += 1
+ end
+
+ target << "\t<tr>\n"
+ line.split($delim).each_with_index do |entry, idx|
+ # We want to skip: Status, Ownership, Bought, Cost as they just take up
+ # space. Here we are skipping by the relevant index.
+ next if idx == 0 or idx == 7 or idx == 8 or idx == 9
+
+ entry = entry.delete "\n"
+ if idx == 11 and entry != "N/A" then
+ # Review column: transform it to contain a link.
+ target << "\t\t<td class=\"biblio-tr\"><a href=\"" \
+ << ENV["WEBSITE_URL"] \
+ << "/" \
+ << entry \
+ << "\">Link</a></td>\n"
+ else
+ target << "\t\t<td class=\"biblio-tr\">" \
+ << sexify(entry) \
+ << "</td>\n"
+ end
+ end
+ target << "\t</tr>\n"
+ end
+end
+
+# Instead of one table, split into <h2>Currently Reading</h2><table></table>,
+# <h2>Completed</h2><table></table> and <h2>Not read or
+# reference</h2><table></table>.
+table << "<h2>Currently Reading</h2>\n"
+table << "<p>There are " << ctable_ongoing.to_s << " entries in this table.</p>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_ongoing
+table << "</table>\n\n"
+
+table << "<h2>Completed</h2>\n"
+table << "<p>There are " << ctable_cmp.to_s << " entries in this table.</p>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_cmp
+table << "</table>\n\n"
+
+table << "<h2>Paused</h2>\n"
+table << "<p>There are " << ctable_paused.to_s << " entries in this table.</p>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_paused
+table << "</table>\n\n"
+
+table << "<h2>Collections of Works</h2>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_coll
+table << "</table>\n\n"
+
+table << "<h2>Dropped</h2>\n"
+table << "<p>There are " << ctable_drp.to_s << " entries in this table.</p>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_drp
+table << "</table>\n\n"
+
+table << "<h2>Not read or reference</h2>\n"
+table << "<p>There are " << ctable_rest.to_s << " entries in this table.</p>\n"
+table << "<table class=\"biblio\">\n"
+table << header
+table << table_rest
+table << "</table>\n\n"
+
+# Echo the file.
+puts table
+