Skip to content

Commit

Permalink
v2.3.0
Browse files Browse the repository at this point in the history
=====================================================================

--- New Scripts --------------------------

zsh )
  latex + latex template engine
   - latex/build-pdf
   - latex/cleanup
   - latex/create-new
   - latex/get-pdf
   - latex/open-pdf

  beta SQL script -- got tired of floating this; works, but only OK
   - db/run-sql/postgres

--- Changes ------------------------------

- Added 'math', 'basic', and 'times-new-roman' templates to latex
- Added 'readlink' to list of required coreutils
- Added __INPUT to read into a variable with prompt (zsh/utils/io)
- Added $EXECUTION_DIR to interact with the user's working directory

--- Bug Fixes ----------------------------

- subscwrypts no longer force stdout/stderr to tty
  • Loading branch information
wrynegade committed Aug 10, 2022
1 parent e8bb889 commit 96992e9
Show file tree
Hide file tree
Showing 25 changed files with 492 additions and 7 deletions.
18 changes: 14 additions & 4 deletions global/common.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,27 @@ __ENV_TEMPLATE=$SCWRYPTS_ROOT/.env.template

#####################################################################

__GET_PATH_TO_RELATIVE_ARGUMENT() {
[[ $1 =~ ^[.] ]] \
&& echo $(readlink -f "$EXECUTION_DIR/$1") \
|| echo "$1" \
;
true
}

#####################################################################

__RUN_SCWRYPT() {
((SUBSCWRYPT+=1))
printf ' '; printf '--%.0s' {1..$SUBSCWRYPT}; printf " ($SUBSCWRYPT) "
echo " BEGIN SUBSCWRYPT : $(basename $1)"
{ printf ' '; printf '--%.0s' {1..$SUBSCWRYPT}; printf " ($SUBSCWRYPT) "; } >&2
echo " BEGIN SUBSCWRYPT : $(basename $1)" >&2

SUBSCWRYPT=$SUBSCWRYPT SCWRYPTS_ENV=$ENV_NAME \
"$SCWRYPTS_ROOT/scwrypts" $@
EXIT_CODE=$?

printf ' '; printf '--%.0s' {1..$SUBSCWRYPT}; printf " ($SUBSCWRYPT) "
echo " END SUBSCWRYPT : $(basename $1)"
{ printf ' '; printf '--%.0s' {1..$SUBSCWRYPT}; printf " ($SUBSCWRYPT) "; } >&2
echo " END SUBSCWRYPT : $(basename $1)" >&2
((SUBSCWRYPT-=1))

return $EXIT_CODE
Expand Down
5 changes: 3 additions & 2 deletions run
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#!/bin/zsh
export EXECUTION_DIR=$(pwd)

SCWRYPTS_ROOT="${0:a:h}"
source "$SCWRYPTS_ROOT/zsh/common.zsh" || exit 42
#####################################################################
Expand All @@ -14,7 +16,6 @@ OPTIONS
-h, --help display this message and exit
'

cd "$SCWRYPTS_ROOT"

local ENV_NAME="$SCWRYPTS_ENV"
Expand Down Expand Up @@ -103,7 +104,7 @@ OPTIONS

[ ! $LOGFILE ] && {
[ $HEADER ] && echo $HEADER
[[ $SUBSCWRYPT -eq 0 ]] && {
[ $SUBSCWRYPT ] && {
eval $RUN_STRING $@
exit $?
} || {
Expand Down
4 changes: 4 additions & 0 deletions zsh/db/run-sql/common.zsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/../common.zsh
#####################################################################
72 changes: 72 additions & 0 deletions zsh/db/run-sql/postgres
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/zsh
_DEPENDENCIES+=(
psql
)
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

_RUN_SQL_POSTGRES() {
local _HOST _NAME _PASS _PORT _USER INPUT_FILE

while [[ $# -gt 0 ]]
do
case $1 in
--host | -h ) _HOST="$2"; shift 2 ;;
--name | -d ) _NAME="$2"; shift 2 ;;
--pass | -w ) _PASS="$2"; shift 2 ;;
--port | -p ) _PORT="$2"; shift 2 ;;
--user | -U ) _USER="$2"; shift 2 ;;
--file | -i ) INPUT_FILE="$2"; shift 2 ;;
* ) shift 1 ;;
esac
done

[ ! $_HOST ] && _HOST=127.0.0.1
[ ! $_NAME ] && _NAME=postgres
[ ! $_PORT ] && _PORT=5432
[ ! $_USER ] && _USER=postgres

local SQL_DIR="$SCWRYPTS_DATA_PATH/sql"
[ ! -d $SQL_DIR ] && mkdir -p $SQL_DIR
cd $SQL_DIR

[[ $(ls "*.sql" 2>&1 | wc -l) -eq 0 ]] && {
__ERROR "you haven't made any SQL commands yet"
__REMINDER "add '.sql' files here: '$SQL_DIR/'"
exit 1
}

[ ! $INPUT_FILE ] && INPUT_FILE=$(\
__FZF 'select a sql file to run'
)
[ ! $INPUT_FILE ] && __ABORT

[ ! -f $INPUT_FILE ] && {
__FAIL 2 "no such sql file '$SQL_DIR/$INPUT_FILE'"
}

__STATUS "loading $INPUT_FILE preview..."
_LESS $INPUT_FILE

__STATUS "login : $_USER@$_HOST:$_PORT/$_NAME"
__STATUS "command : ./$INPUT_FILE"

__yN 'run this command?' || __ABORT

__STATUS "running './$INPUT_FILE'"
PGPASSWORD="$_PASS" psql \
-h $_HOST \
-p $_PORT \
-U $_USER \
-d $_NAME \
< $INPUT_FILE \
&& __SUCCESS "finished running './$INPUT_FILE'" \
|| __FAIL 3 "something went wrong running './$INPUT_FILE' (see above)"
}

#####################################################################
__WARNING
__WARNING 'this function is in a beta state'
__WARNING
_RUN_SQL_POSTGRES $@
31 changes: 31 additions & 0 deletions zsh/latex/build-pdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/zsh
_DEPENDENCIES+=(
pdflatex
rg
)
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

PDFLATEX() {
[ ! $1 ] && __FAIL 1 'must provide filename'
local FILENAME=$(GET_MAIN_LATEX_FILENAME "$1")

local ARGS=(-interaction=nonstopmode)
ARGS+=("$FILENAME")

cd "$(dirname $FILENAME)"

__STATUS 'running compile (1/2)'
pdflatex ${ARGS[@]} \
|| __FAIL 2 'first compile failed (see above)'

__STATUS 'running compile (2/2)'
pdflatex ${ARGS[@]} >/dev/null 2>&1 \
|| __FAIL 3 'second compile failed :c'

__SUCCESS "created '$(echo $FILENAME | sed 's/\.[^.]*$/.pdf/')'"
}

#####################################################################
PDFLATEX $@
20 changes: 20 additions & 0 deletions zsh/latex/cleanup
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/zsh
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

CLEAN_LATEX_LOGFILES() {
local DIRECTORY=$(__GET_PATH_TO_RELATIVE_ARGUMENT ".")
[ $1 ] && DIRECTORY="$(dirname "$(GET_MAIN_LATEX_FILENAME "$1")")"
[ $DIRECTORY ] && [ -d $DIRECTORY ] \
|| __FAIL 1 'unable to parse valid directory'

cd $DIRECTORY
rm $(ls | grep '\.\(aux\)\|\(log\)\|\(pdf\)\|\(out\)\|\(dvi\)$')

__SUCCESS "cleaned up latex artifacts in '$DIRECTORY'"
}

#####################################################################
CLEAN_LATEX_LOGFILES $@
34 changes: 34 additions & 0 deletions zsh/latex/common.zsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
_DEPENDENCIES+=(
rg
)
_REQUIRED_ENV+=()
source ${0:a:h}/../common.zsh
#####################################################################

GET_MAIN_LATEX_FILENAME() {
local FILENAME=$(__GET_PATH_TO_RELATIVE_ARGUMENT "$1")
local DIRNAME="$FILENAME"

for _ in {1..3}
do
CHECK_IS_MAIN_LATEX_FILE && return 0
DIRNAME="$(dirname "$FILENAME")"
__STATUS "checking '$DIRNAME'"
[[ $DIRNAME =~ ^$HOME$ ]] && break
FILENAME=$(
rg -l --max-depth 1 'documentclass' "$DIRNAME/" \
| grep '\.tex$' \
| head -n1 \
)
__STATUS "here is '$FILENAME'"
done

__WARNING 'unable to find documentclass; pdflatex will probably fail'
echo "$1"
}

CHECK_IS_MAIN_LATEX_FILE() {
[ ! $FILENAME ] && return 1
grep -q 'documentclass' $FILENAME 2>/dev/null && echo $FILENAME || return 3
}

63 changes: 63 additions & 0 deletions zsh/latex/create-new
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/bin/zsh
_DEPENDENCIES+=(
pdflatex
rg
)
_REQUIRED_ENV+=()

TEMPLATE_DIR="${0:a:h}/templates"

source ${0:a:h}/common.zsh
#####################################################################

CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE() {
local DOCUMENT_DIR="$EXECUTION_DIR"
local TEMPLATE=$(GET_TEMPLATES | __FZF 'select a template')
[ ! $TEMPLATE ] && __ABORT
__SUCCESS "selected template '$TEMPLATE'"

__INPUT DOC_TITLE 'document title' || __ABORT

local DOCUMENT_FILE="$DOCUMENT_DIR/$(SLUGIFY_TITLE).tex"
[ -f "$DOCUMENT_FILE" ] && __FAIL 1 "'$(basename $DOCUMENT_FILE)' already exists"

__INPUT DOC_ID 'document id/subtitle'
__INPUT AUTHOR 'author name'
__INPUT AUTHOR_ID 'author id/title'

{
PRINT_TITLE_INFO
cat "$TEMPLATE_DIR/$TEMPLATE/template.tex"
} > "$DOCUMENT_FILE"
cp "$TEMPLATE_DIR/gitignore" "$DOCUMENT_DIR/.gitignore"
for FILE in $(find "$TEMPLATE_DIR/$TEMPLATE" -type f | grep -v '/template.tex$')
do
cp "$FILE" "$DOCUMENT_DIR/" || return 2
done
[[ ! $TEMPLATE =~ ^basic$ ]] \
&& mkdir "$DOCUMENT_DIR/sections" "$DOCUMENT_DIR/graphics"

__SUCCESS "finished generating '$(basename $DOCUMENT_FILE)' from '$TEMPLATE'"
}

GET_TEMPLATES() {
find "$TEMPLATE_DIR" -type d | sed "s^$TEMPLATE_DIR/*^^; /^$/d"
}

PRINT_TITLE_INFO() {
local DATESTRING=$(date '+%B %_d, %Y' | sed 's/ \{1,\}/ /g')
sed "
s^LATEX-DOC-TITLE^$DOC_TITLE^
s^LATEX-DOC-DATE^$DATESTRING^
s^LATEX-DOC-ID^$DOC_ID^
s^LATEX-AUTHOR-NAME^$AUTHOR^
s^LATEX-AUTHOR-ID^$AUTHOR_ID^
" "$TEMPLATE_DIR/main.tex"
}

SLUGIFY_TITLE() {
echo $DOC_TITLE | sed "s^['\"\\/,\!@#\$%^&*()]*^^g; s^\s\+^-^g;"
}

#####################################################################
CREATE_NEW_LATEX_DOCUMENT_FROM_TEMPLATE $@
15 changes: 15 additions & 0 deletions zsh/latex/get-pdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/zsh
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

GET_PDF() {
local FILENAME=$(GET_MAIN_LATEX_FILENAME "$1" | sed 's/\.[^.]*$/.pdf/')
[ $FILENAME ] && [ -f $FILENAME ] || __FAIL 1 "no compiled pdf found for '$1'; have you run 'build-pdf'?"
__SUCCESS 'found main pdf'
echo $FILENAME
}

#####################################################################
GET_PDF $@
15 changes: 15 additions & 0 deletions zsh/latex/open-pdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/zsh
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

OPEN_PDF() {
local PDF=$(__RUN_SCWRYPT latex/get-pdf -n -- $1)
[ ! $PDF ] && return 1

__OPEN "$PDF"
}

#####################################################################
OPEN_PDF $@
37 changes: 37 additions & 0 deletions zsh/latex/templates/basic/template.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
\usepackage[margin=.75in,bottom=0.5in,top=1.0in]{geometry}

\usepackage{enumitem}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{lastpage}

\newcommand{\headerL} {\documentTitle: \documentDate}
\newcommand{\headerC} {\documentId}
\newcommand{\headerR} {\authorName\ (\authorId)}
\newcommand{\pageOfTotal} {\thepage\ of~\pageref{LastPage}}

\pagestyle{fancy}
\fancypagestyle{plain}{%
\fancyhf{}
\fancyhead[L]{\headerL}\fancyhead[R]{\headerR}\fancyhead[C]{\headerC}
\fancyfoot[C]{\pageOfTotal}
}

\renewcommand{\baselinestretch}{1}
\setlength{\parskip}{0em}
\hyphenpenalty=5000%

\fancyhf{}
\fancyhead[L]{\headerL}\fancyhead[R]{\headerR}\fancyhead[C]{\headerC}
\fancyfoot[C]{\pageOfTotal}

\title{\documentTitle}
\author{\authorName\ \\ \authorId}
\date{\documentDate}

\begin{document}
\maketitle%
% ---------------------------------------------------------------------

% ---------------------------------------------------------------------
\end{document}
5 changes: 5 additions & 0 deletions zsh/latex/templates/gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.aux
*.log
*.out
*.pdf
*.dvi
9 changes: 9 additions & 0 deletions zsh/latex/templates/main.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
\documentclass[letterpaper]{article}

\newcommand{\documentTitle} {LATEX-DOC-TITLE}
\newcommand{\documentDate} {LATEX-DOC-DATE}
\newcommand{\documentId} {LATEX-DOC-ID}

\newcommand{\authorName} {LATEX-AUTHOR-NAME}
\newcommand{\authorId} {LATEX-AUTHOR-ID}

11 changes: 11 additions & 0 deletions zsh/latex/templates/math/code.sty
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
\ProvidesPackage{code}
% ---------------------------------------------------------------------

\newcommand{\clispsnippet}[2]{%
\lstinputlisting[%
caption=#1,
language=Lisp,
showstringspaces=false,
numbers=left,
]{#2}
}
Loading

0 comments on commit 96992e9

Please sign in to comment.