Last active
July 6, 2024 18:34
-
-
Save hansemro/401748e4843e0f00ba20f62141f3ec7e to your computer and use it in GitHub Desktop.
[WIP] scopehal-docs LaTeX (*.tex) to AsciiDoc (*.adoc) converter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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