Skip to content

Instantly share code, notes, and snippets.

@hansemro
Last active July 6, 2024 18:34
Show Gist options
  • Save hansemro/401748e4843e0f00ba20f62141f3ec7e to your computer and use it in GitHub Desktop.
Save hansemro/401748e4843e0f00ba20f62141f3ec7e to your computer and use it in GitHub Desktop.
[WIP] scopehal-docs LaTeX (*.tex) to AsciiDoc (*.adoc) converter
#!/usr/bin/env bash
# scopehal-docs LaTeX (*.tex) to AsciiDoc (*.adoc) converter
# TODO: learn awk
set -euo pipefail
TEX=$(basename $1)
ADOC=modules/ROOT/pages/${TEX%.tex}.adoc
if [ -f "$ADOC" ]; then
echo "file $ADOC exists; quitting"
exit 1
#cp $TEX $ADOC
else
cp $TEX $ADOC
fi
# Misc. Formatting:
# \& -> &
#echo 'T\&M' | sed -e 's/\\&/\&/g'
sed -i -e 's/\\&/\&/g' $ADOC
# \_ -> _
sed -i -e 's/\\_/\_/g' $ADOC
# -{}- -> --
sed -i -e 's/-{}-/--/g' $ADOC
# \\EOL -> EOL
sed -i -e 's/\\\\$//g' $ADOC
# \chapter{title} -> = title
#echo "\\chapter{Hello World}" | sed -e 's/\\chapter{\(.*\)}/= \1/g'
sed -i -e 's/\\chapter{\(.*\)}/= \1/g' $ADOC
# \section{title} -> == title
#echo "\\section{Hello World}" | sed -e 's/\\section{\(.*\)}/== \1/g'
sed -i -e 's/\\section{\(.*\)}/== \1/g' $ADOC
# \subsection{title} -> === title
#echo "\\subsection{Hello World}" | sed -e 's/\\subsection{\(.*\)}/=== \1/g'
sed -i -e 's/\\subsection{\(.*\)}/=== \1/g' $ADOC
# \subsubsection{title} -> ==== title
sed -i -e 's/\\subsubsection{\(.*\)}/==== \1/g' $ADOC
# Unordered List:
# \begin{itemize}
# \item value -> * value
# \end{itemize}
#printf "\\\begin{itemize}\n\\\item Item1\n\\\item Item2\n\\\end{itemize}\n\\\begin{enumerate}\n\\\item Item3\n\\\end{enumerate}\n" | sed -e '/\\begin{itemize}/,/\\end{itemize}/{s/\\item/*/g}' -e 's/\\begin{itemize}//g' -e 's/\\end{itemize}//g'
sed -i -e '/\\begin{itemize}/,/\\end{itemize}/{s/\\item/*/g}' -e 's/\\begin{itemize}//g' -e 's/\\end{itemize}//g' $ADOC
# Ordered List:
# \begin{enumerate}
# \item value -> . value
# \end{enumerate}
#printf "\\\begin{itemize}\n\\\item Item1\n\\\item Item2\n\\\end{itemize}\n\\\begin{enumerate}\n\\\item Item3\n\\\end{enumerate}\n" | sed -e '/\\begin{enumerate}/,/\\end{enumerate}/{s/\\item/./g}' -e 's/\\begin{enumerate}//g' -e 's/\\end{enumerate}//g'
sed -i -e '/\\begin{enumerate}/,/\\end{enumerate}/{s/\\item/./g}' -e 's/\\begin{enumerate}//g' -e 's/\\end{enumerate}//g' $ADOC
# Formatting:
# \texttt{text} -> `text`
sed -i -e 's/\\texttt{\([^}]\+\)}/`\1`/g' $ADOC
# \menustyle{text} -> `text`
#echo "\\menustyle{text}" | sed -e 's/\\menustyle{\(.*\)}/`\1`/g'
sed -i -e 's/\\menustyle{\([^}]\+\)}/`\1`/g' $ADOC
# \emph{text} -> _text_
#echo "\\emph{text}" | sed -e 's/\\emph{\(.*\)}/_\1_/g'
sed -i -e 's/\\emph{\([^}]\+\)}/_\1_/g' $ADOC
# \issue{repo-name}{number} -> https://github.com/ngscopeclient/repo-name/issues/number[repo-name:number]
sed -i -e 's/\\issue{\([^}]\+\)}{\([^}]\+\)}/https:\/\/github.com\/ngscopeclient\/\1\/issues\/\2[\1:\2]/g' $ADOC
# \href{link}{text} -> link[text]
sed -i -e 's/\\href{\([^}]\+\)}{\([^}]\+\)}/\1[\2]/g' $ADOC
# \hyperref[dlg:entity]{text} -> xref:section-dialogs.adoc#entity[text]
sed -i -e 's/\\hyperref\[dlg:\([^]]\+\)\]{\([^}]\+\)}/xref:section-dialogs.adoc#\1[\2]/g' $ADOC
# \hyperref[sec:entity]{text} -> xref:section-REPLACEME.adoc#entity[text]
# Fig. \ref{entity} -> <<entity>>
sed -i -e 's/Fig. \\ref{\([^}]\+\)}/<<\1>>/g' $ADOC
# Chapter \ref{entity} -> <<entity>>
sed -i -e 's/Chapter \\ref{\([^}]\+\)}/<<\1>>/g' $ADOC
# TODO (possibly multiline): ``text" -> "text"
sed -i -e 's/``\([^"]\+\)"/"\1"/g' $ADOC
# TODO (possibly multiline): `text' -> 'text'
# TODO: $latex$
# Figures:
# TODO: support multiple lines with includegraphics
# \begin{figure}[h]
# \centering -> Enable Centering
# \includegraphics[width=size]{image-path}
# \caption{fig-caption}
# \label{fig-label}
# \end{figure}
#printf "\\\begin{figure}[h]\n\\\centering\n\\\includegraphics[width=10cm]{path/to/image.png}\n\\\caption{Image Description}\n\\\label{image-thing}\n\\\end{figure}\n" | sed -z -e '/\\begin{figure}\[h\]/,/\\end{figure}/{s/\\begin{figure}\[h\]\n\\centering\n\\includegraphics\[width=.*\]{\([^}]\+\)}\n\\caption{\([^}]\+\)}\n\\label{\([^}]\+\)}\n\\end{figure}/.\2\n[#\3]\nimage::\1[]/g;}'
sed -i -z -e '/\\begin{figure}\[h\]/,/\\end{figure}/{s/\\begin{figure}\[h\]\n\\centering\n\s*\\includegraphics\[width=.*\]{\([^}]\+\)}\n\\caption{\([^}]\+\)}\n\\label{\([^}]\+\)}\n\\end{figure}/.\2\n[#\3]\nimage::\1[]/g;}' $ADOC
# Code Blocks:
# \begin{lstlisting}[language=lang, numbers=none]
#
# \end{lstlisting}
#printf "\\\begin{lstlisting}[language=C, numbers=none]\n#include <stdio.h>\nint main() {return 0;}\n\\\end{lstlisting}\n" | sed -e '/\\begin{lstlisting}/,/\\end{lstlisting}/{s/\\begin{lstlisting}\[language=\([^],]\+\).*\]/[source, \1]\n----/g;s/\\end{lstlisting}/----/g}'
sed -i -e '/^\\begin{lstlisting}/,/\\end{lstlisting}/{s/\\begin{lstlisting}\[language=\([^],]\+\).*\]/[source, \1]\n----/g;s/\\end{lstlisting}/----/g}' $ADOC
# \footnote{note} -> footnote:[note]
#echo "\\footnote{This is a footnote}" | sed -e 's/\\footnote{\(.*\)}/footnote:[\1\]/g'
sed -i -e 's/\\footnote{\(.*\)}/footnote:[\1\]/g' $ADOC
# TODO: \today
# % -> //
#echo "% comment" | sed -e 's/^%/\/\//g'
sed -i -e 's/^%/\/\//g' $ADOC
# Multiline-comments:
# \begin{comment}
# ...
# \end{comment}
#printf "\\\begin{comment}\nThis is a block of text\nIgnore me!!!!\n\\\end{comment}\n" | sed -e '/\\begin{comment}/,/\\end{comment}/{s/^/\/\/ /g;1d;$d}'
sed -i -e '/\\begin{comment}/,/\\end{comment}/{s/^/\/\/ /g;1d;$d}' $ADOC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment