#!/bin/bash # Syntax: gen_fi_table.sh [text] # # Add "text" option to write the tables in simple text and the legend in markdown. # Without the text option, all output will be fully markdown. # # Lobbying data to incorporate in the future: https://disclosurespreview.house.gov/ typeset -r db_file=$(mktemp --dry-run --suffix=.db) typeset -A sym=([red_circle]=$'\xF0\x9F\x94\xB4' [green_circle]=$'\xf0\x9f\x9f\xa2' [test_tube]=$'\xf0\x9f\xa7\xaa' [cloud_lightening]=$'\xf0\x9f\x8c\xa9' [detective]=$'\xf0\x9f\x95\xb5' [okhand]=$'\xF0\x9F\x91\x8C' [eye]=$'\xf0\x9f\x91\x81') #local red_circle='๐Ÿ”ด' #local green_circle='๐ŸŸข' #local test_tube='๐Ÿงช' #local cloud_lightening='๐ŸŒฉ' #local detective='๐Ÿ•ต' #local okhand='๐Ÿ‘Œ' #local eye='๐Ÿ‘' intro() { local lst=$1 local fi_kind=$2 case "$lst" in white) printf %s\\n 'The following '"${fi_kind}"'s have no significant ethical issues:' ;; gray) printf %s\\n 'These '"${fi_kind}"'s would normally be blacklisted, but due to the short whitelist they are set aside as a less evil compromise to those blacklisted. They should still be avoided if possible.' ;; black) printf %s\\n 'These '"${fi_kind}"'s have severe ethical or trust issues and should be boycotted:' ;; esac };#intro table_populate() { # fiTbl: "financial institution table" sqlite3 "${db_file}" < input_data/financial_institutions.sql };#table_populate table_text() { local fi_kind=$1 # .ft B (bold font) # .ft I (italics font) # .ft P (previous font) # .ll 6i (6 inch width) for lst in white gray black do if [[ "$lst" == black ]] then url_clause="''" else url_clause="case when url like '_%' then char(10)||'('||replace(url,'https://','')||')||||||' else '' end" fi printf %s "# ${lst^}"'list ``` .TS box tab(|); c|c|c|c|c|c|c. .ft BI '"$fi_kind"' | ALEC | Tor- | sensitive info | supported | forced drug | notes | member | hostile | exposed to | CISPA | testing of | | | | CloudFlare | | staff | .ft P .T& l|l|l|l|l|l|lp40. ' sqlite3 "${db_file}" "select substr(name,1,(select max(length(url)) from fiTbl where fi_kind = '$fi_kind')), case when alec then 'y' else 'n' end, case when antitor then 'y' else 'n' end, case when cflogin then 'y' else 'n' end, case when cispa then 'y' else 'n' end, case when dt then 'y' else 'n' end, case when notes is null then '' else 'T{ .ll 6i '|| replace(replace(notes,'[',''),']',' ') ||' T}' end|| $url_clause from fiTbl where fi_kind = '$fi_kind' and lst_kind = '$lst' order by name collate nocase;" printf %s '.TE ``` ' done }; #table_text table_md() { local fi_kind=$1 printf %s\\n "# Directory of US-based ${fi_kind}s" for lst in white gray black do if [[ "$lst" == black ]] then name_clause="'|'||name" else name_clause="case when url like '_%' then '|['||name||']('||url||')' else '|'||name end" fi printf %s "## ${lst^}list $(intro $lst $fi_kind)"' | *'"$fi_kind"'* | *ALEC member* | *Tor-hostile* | *sensitive info exposed to CloudFlare* | *supported CISPA* | *forced drug testing of staff* | *notes* | |---|---|---|---|---|---|---| ' sqlite3 "${db_file}" "select $name_clause, case when alec then '${sym[okhand]}' else 'n' end, case when antitor then '${sym[eye]}' else 'n' end, case when cflogin then '${sym[cloud_lightening]}' else 'n' end, case when cispa then '${sym[detective]}' else 'n' end, case when dt then '${sym[test_tube]}' else 'n' end, case when notes is null then '|' else notes||'|' end from fiTbl where fi_kind = '$fi_kind' and lst_kind = '$lst' order by name collate nocase;" printf $'\n' done };#table_md table_populate case "$2" in txt|text) table_text "${1,,}" | tbl | nroff -Tascii | uniq ;; *) printf '%s\n\n' '[//]: # (** DO NOT EDIT this file directly! ** It is auto-generated. Changes should be made to financial_institutions.sql or '"${0##*/}"' instead.)' table_md "${1,,}"; # the CLI arg must be one of: 'bank', 'brokerage', 'CU', or 'insurer' ;; esac cat input_data/table_legend.md