From b0749ad72499ac521124b8bc7a3a479585ef5aad Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Wed, 26 Apr 2023 05:51:56 +0200 Subject: [PATCH] feat: intermediate project --- .vscode/extensions.json | 13 ++ preliminaryReport/actualReport/report.pdf | Bin 23798 -> 37484 bytes preliminaryReport/actualReport/report.tex | 159 ++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..68530c2a --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,13 @@ +{ + "recommendations": [ + "mhutchie.git-graph", + "pkief.material-icon-theme", + "ms-python.black-formatter", + "ms-python.pylint", + "ms-python.python", + "wesbos.theme-cobalt2", + "donjayamanne.githistory", + "kisstkondoros.vscode-gutter-preview", + "james-yu.latex-workshop" + ] +} \ No newline at end of file diff --git a/preliminaryReport/actualReport/report.pdf b/preliminaryReport/actualReport/report.pdf index a90a0f0cc4ac15508477c4bcdfe0437b14a9a88d..2eb136981372fd77ca1f2c91aa8069550311a385 100644 GIT binary patch delta 26976 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 delta 13534 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 Uxdl86D;qO6JOzcgq6GZ^1A$OpOaK4? diff --git a/preliminaryReport/actualReport/report.tex b/preliminaryReport/actualReport/report.tex index c193d4d1..2ddcb9b0 100644 --- a/preliminaryReport/actualReport/report.tex +++ b/preliminaryReport/actualReport/report.tex @@ -1,5 +1,14 @@ \documentclass[12pt]{article} +\usepackage{listings} + + +\lstset{ + basicstyle=\small, + breaklines=true + } + + \date{\today} \title{ECOTE - preliminary project \\ Translator of a LaTeX subset to HTML @@ -23,9 +32,21 @@ I decided to change to translator of \LaTeX \, subset to HTML since I know \LaTe \item "Tables" will be represented using \LaTeX \, \emph{table} environment \end{itemize} \section{Functional requirements} +The goal of the project is to transform .tex file to (working ) .html file if the subset of .tex file is within project scope or output error message explaining why the html could not be outputed \subsection{\LaTeX \, subset} This project will focus almost exclusively on \emph{table} environment \\ more speciffically table environment containing tabular inside of it +\begin{enumerate} + \item $\backslash$documentclass\{class\}: Defines what layout standard \LaTeX will use + \item $\backslash$begin\{document\}: Ends (in our case empty) preamble + \item $\backslash$end\{document\}: Ends \LaTeX \, document + \item $\backslash$textit\{Text\}: Makes the text italic. + \item $\backslash$underline\{Text\}: Underlines the text. + \item $\backslash$begin\{itemize\} $\backslash$item Item 1 $\backslash$item Item 2 $\backslash$end\{itemize\}: Creates an unordered list with the given items. + \item $\backslash$begin\{enumerate\} $\backslash$item Item 1 $\backslash$item Item 2 $\backslash$end\{enumerate\}: Creates an ordered list with the given items. + \item $\backslash$begin\{center\} Text $\backslash$end\{center\}: Centers the text. + \item $\backslash$begin\{tabular\}\{|c|c|c|\} $\backslash$hline Column 1 \& Column 2 \& Column 3 $\backslash$ $\backslash$hline Row 1, Column 1 \& Row 1, Column 2 \& Row 1, Column 3 $\backslash$ Row 2, Column 1 \& Row 2, Column 2 \& Row 2, Column 3 $\backslash$ $\backslash$hline $\backslash$end\{tabular\}: Creates a table with the given columns and rows. +\end{enumerate} \section{Implementation} I decided to use Python as a language in which I will implement my solution \\ The reasons for using python are as follow: @@ -37,9 +58,147 @@ The reasons for using python are as follow: Negative aspects of python which is that it is very slow language do not bother me as I believe the project scope will not be big enough for this to become an issue \subsection{General architecture} + \subsection{Data structures} \subsection{Module descriptions} \subsection{Input/output description} +Input is a .tex file (\LaTeX \, file) \\ +Outpus is an .html file \\ +In case of errors error message will be outputed on the terminal \\ +Input File path is entered as an argument to terminal with "-i" or "--input" flag for example: +\begin{lstlisting}[language=bash] +python main.py -i texFile.tex +\end{lstlisting} +Output file path can be named by user by using "-o" or "--output" flag: +\begin{lstlisting}[language=bash] +python main.py -i texFile.tex -o htmlFile.html +\end{lstlisting} +If no "-o" flag is issued the output file will have the same name as input file with changed extension to html (so in this example texFile.tex will become texFile.html) \\ +If the path to file name consists of spaces, path name needs to be but in "" +\begin{lstlisting}[language=bash] +python main.py -i "My Folder/input.tex" +\end{lstlisting} \subsection{Others} \section{Functional test cases} + +\begin{tabular}{|p{3cm}|p{6cm}|p{6cm}|} + \hline + Title & Input (\LaTeX) & Output \\ + \hline + + empty file & + \begin{lstlisting} + + \end{lstlisting}& + \begin{lstlisting} +Error! expected \documentclass at the begining of LaTeX file + \end{lstlisting} \\ + \hline + + Document class & + \begin{lstlisting} +\documentclass[options]{class} + \end{lstlisting}& + \begin{lstlisting} +Error! expected \begin{document} after document class + \end{lstlisting} \\ + \hline + + \begin{lstlisting} +Extra text between document class and begin document + \end{lstlisting}& + \begin{lstlisting} +\documentclass[options]{class} +"extra text" +\begin{document} + \end{lstlisting}& + \begin{lstlisting} +Error! unexpected text between document class and begin document + \end{lstlisting} \\ + \hline + +\begin{lstlisting} +Just document class and begin document +\end{lstlisting}& +\begin{lstlisting} +\documentclass[options]{class} +\begin{document} +\end{lstlisting}& +\begin{lstlisting} +Error! no \end{document} at the end of LaTeX code +\end{lstlisting} \\ +\hline + + \end{tabular} + +\begin{tabular}{|p{3cm}|p{6cm}|p{6cm}|} +\hline +Title & Input (\LaTeX) & Output \\ +\hline + +\begin{lstlisting} +Just document class and begin/end document +\end{lstlisting}& +\begin{lstlisting} +\documentclass[options]{class} +\begin{document} +\end{document} +\end{lstlisting}& +\begin{lstlisting} + + +\end{lstlisting} \\ +\hline + +\begin{lstlisting} +Plain text inside +\end{lstlisting}& +\begin{lstlisting} +\documentclass[options]{class} +\begin{document} +Lorem ipsum dolor sit amet. +\end{document} +\end{lstlisting}& +\begin{lstlisting} + +Lorem ipsum dolor sit amet. + +\end{lstlisting} \\ +\hline + +\begin{lstlisting} +Reduntant \end{document} (ignored) +\end{lstlisting}& +\begin{lstlisting} +\documentclass[options]{class} +\begin{document} +Lorem ipsum dolor sit amet. +\end{document} +\end{document} +\end{lstlisting}& +\begin{lstlisting} + +Lorem ipsum dolor sit amet. + +\end{lstlisting} \\ +\hline + +\begin{lstlisting} +LaTeX comments +\end{lstlisting}& +\begin{lstlisting} +\documentclass[options]{class} +\begin{document} +Lorem ipsum dolor sit amet. +% some comment +\end{document} +\end{document} +\end{lstlisting}& +\begin{lstlisting} +Error! LaTeX comment detected at line 3 +\end{lstlisting} \\ +\hline + +\end{tabular} + \end{document} \ No newline at end of file