From 0e1ed2b2b8b920f8f711fdab74d6e28d95d41363 Mon Sep 17 00:00:00 2001 From: Krzysztof Rudnicki Date: Wed, 3 May 2023 21:41:49 +0200 Subject: [PATCH] feat: tabular parameters --- preliminaryReport/tests/simpletable.css | 99 ------------------ preliminaryReport/tests/simpletable.html | 38 ------- preliminaryReport/tests/simpletable.pdf | Bin 3630 -> 2082 bytes preliminaryReport/tests/simpletable.tex | 7 +- preliminaryReport/tests/simpletable.tmp | 2 - program/code/main.py | 36 ++++++- program/tests/conftest.py | 0 .../tests/test_code/test_begin_document.py | 2 +- program/tests/test_code/test_begin_tabular.py | 67 ++++++++++++ .../test_code/test_tabular_parameters.py | 36 +++++++ 10 files changed, 138 insertions(+), 149 deletions(-) delete mode 100644 preliminaryReport/tests/simpletable.css delete mode 100644 preliminaryReport/tests/simpletable.html delete mode 100644 preliminaryReport/tests/simpletable.tmp delete mode 100644 program/tests/conftest.py create mode 100644 program/tests/test_code/test_begin_tabular.py create mode 100644 program/tests/test_code/test_tabular_parameters.py diff --git a/preliminaryReport/tests/simpletable.css b/preliminaryReport/tests/simpletable.css deleted file mode 100644 index 31314dd1..00000000 --- a/preliminaryReport/tests/simpletable.css +++ /dev/null @@ -1,99 +0,0 @@ - -/* start css.sty */ -.cmtt-10{font-family: monospace,monospace;} -p{margin-top:0;margin-bottom:0} -p.indent{text-indent:0;} -p + p{margin-top:1em;} -p + div, p + pre {margin-top:1em;} -div + p, pre + p {margin-top:1em;} -a { overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; hyphens: auto; } -@media print {div.crosslinks {visibility:hidden;}} -table.tabular{border-collapse: collapse; border-spacing: 0;} -a img { border-top: 0; border-left: 0; border-right: 0; } -center { margin-top:1em; margin-bottom:1em; } -td center { margin-top:0em; margin-bottom:0em; } -.Canvas { position:relative; } -img.math{vertical-align:middle;} -div.par-math-display, div.math-display{text-align:center;} -li p.indent { text-indent: 0em } -li p:first-child{ margin-top:0em; } -li p:last-child, li div:last-child { margin-bottom:0.5em; } -li p:first-child{ margin-bottom:0; } -li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } -.enumerate1 {list-style-type:decimal;} -.enumerate2 {list-style-type:lower-alpha;} -.enumerate3 {list-style-type:lower-roman;} -.enumerate4 {list-style-type:upper-alpha;} -div.newtheorem { margin-bottom: 2em; margin-top: 2em;} -div.newtheorem .head{font-weight: bold;} -.obeylines-h,.obeylines-v {white-space: nowrap; } -div.obeylines-v p { margin-top:0; margin-bottom:0; } -.overline{ text-decoration:overline; } -.overline img{ border-top: 1px solid black; } -td.displaylines {text-align:center; white-space:nowrap;} -.centerline {text-align:center;} -.rightline {text-align:right;} -pre.verbatim {font-family: monospace,monospace; text-align:left; clear:both; } -.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -div.fbox {display:table} -div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -div.minipage{width:100%;} -div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} -div.center div {text-align: left;} -div.flushright, div.flushright div.flushright {text-align: right;} -div.flushright div {text-align: left;} -div.flushleft {text-align: left;} -.underline{ text-decoration:underline; } -.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } -.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } -.framebox-c {text-align:center;} -.framebox-l {text-align:left;} -.framebox-r {text-align:right;} -span.thank-mark{ vertical-align: super } -span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } -div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } -table.tabular td p{margin-top:0em;} -table.tabular {margin-left: auto; margin-right: auto;} -td p:first-child{ margin-top:0em; } -td p:last-child{ margin-bottom:0em; } -div.td00{ margin-left:0pt; margin-right:0pt; } -div.td01{ margin-left:0pt; margin-right:5pt; } -div.td10{ margin-left:5pt; margin-right:0pt; } -div.td11{ margin-left:5pt; margin-right:5pt; } -table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } -td.td00{ padding-left:0pt; padding-right:0pt; } -td.td01{ padding-left:0pt; padding-right:5pt; } -td.td10{ padding-left:5pt; padding-right:0pt; } -td.td11{ padding-left:5pt; padding-right:5pt; } -table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } -.hline hr, .cline hr{ height : 0px; margin:0px; } -.hline td, .cline td{ padding: 0; } -.hline hr, .cline hr{border:none;border-top:1px solid black;} -.hline {border-top: 1px solid black;} -.hline + .vspace:last-child{display:none;} -.hline:first-child{border-bottom:1px solid black;border-top:none;} -.tabbing-right {text-align:right;} -div.float, div.figure {margin-left: auto; margin-right: auto;} -div.float img {text-align:center;} -div.figure img {text-align:center;} -.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} -.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;} -.reversemarginpar{float:left;} -table.equation {width:100%;} -.equation td{text-align:center; } -td.equation { margin-top:1em; margin-bottom:1em; } -td.equation-label { width:5%; text-align:center; } -td.eqnarray4 { width:5%; white-space: normal; } -td.eqnarray2 { width:5%; } -table.eqnarray-star, table.eqnarray {width:100%;} -div.eqnarray{text-align:center;} -div.array {text-align:center;} -div.pmatrix {text-align:center;} -table.pmatrix {width:100%;} -span.pmatrix img{vertical-align:middle;} -div.pmatrix {text-align:center;} -table.pmatrix {width:100%;} -span.bar-css {text-decoration:overline;} -img.cdots{vertical-align:middle;} -/* end css.sty */ - diff --git a/preliminaryReport/tests/simpletable.html b/preliminaryReport/tests/simpletable.html deleted file mode 100644 index 5ba6db64..00000000 --- a/preliminaryReport/tests/simpletable.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - -
-
123
4 5 6
7 89
- - - - - diff --git a/preliminaryReport/tests/simpletable.pdf b/preliminaryReport/tests/simpletable.pdf index e301984a52775365c84c93811681d0fdfcb39fdc..7a16d85bed58c73842b32611ff561ee5c0980415 100644 GIT binary patch delta 1690 zcmah~YdF&j9403HaZF~eB{G!jG;5>H<+z*;okeX ztz6O!xpX9TA{|yZh_P}Xn2?1)k~9Jp?;2zou{BT>*eyh~dtIgw2-$T(UFd1Tr`o3LsjeTlz~zj`3}e-YB}k8;Je8rb-?E4(LMLRnLU*`CrGsT7jiw$} zCfdsbVWsj$wk)Tahyg~qrm@-9iO!Sh?KNeUiMC7?J# z^)Xb4)m>mge}+ek6)nXUDT@LOaPomiPFB4gPA5PY-)n{2FbIjEIND2QmfN6ynvB8x`5%(=v@;=G;I5}eCi5)s9o4Ai^(;tPg?;fn| z^SoW$YZG6=gOS>ywD1EiGJZ0%%X?AC`b)v5Uxs|hAwFnCXxqFT)Vsjc@~zX2D{c*Zq79Qcm*YS%bQru zdGO>~^n(`)qg(u&vAVQRaYtIcPDQVjsnE80S69p_62zDgYh3p8{wZCZr=^oK-Sc~c zzS+3woM|dYWQPUpx0|{bZ;aK>-`sLA#hCq}iT<3~5wSrb3@pVJ4pGN{*>-jGfA)3L zU$C~-x*ZrPH+%TY&idUf833(r^?eY+E?k!eNr4_p6|+tQUNj`)dos;OKpwFKUlW|a zLIxfGNV#{TtRiC_?ps%*$1YX6?a#kNh_SnY9_UAbfR1;E@Wi(6Z=%h#oq^zuahAX37SG;qe9{o;EC(2j1 z6Gr%B7pTfk>UE*cYW<-$ ze!TH2H-O6F6x*e^XU%1iW8!ORXll_ZkjpY48x4lRoTNM#la(6@$=*sjpH@HL)aFTLxohUsLnj}mXzIO z@2!}uatkxka^B_Ij+X1w43CPM`LnN%%VUh3GO8x8Wc6RLn5y)H-bzIn*~9xv>vj|^ z6;eVW=26a#>kUUFj~O|=&zzihZZyV0;eCS_?{4Ol2+k}QwSI2JjWw$l zG5w7Gl>3@goo$kGm)@{nR6o)3dd;~jct?slv`wmSRvXL$luR86r~qOR0*yeSkR-HK zkaYlpL>erhmpuxxh>q-ec%PrYuEa6 zPbeL%AHNRYTuKS|A*%YFffmxKPTnr{=C5c;in0wSYg SBZ(vcj)GePFqrc(7vLX(%_0N< delta 3225 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 diff --git a/preliminaryReport/tests/simpletable.tex b/preliminaryReport/tests/simpletable.tex index 56b29a66..c92e959c 100644 --- a/preliminaryReport/tests/simpletable.tex +++ b/preliminaryReport/tests/simpletable.tex @@ -1,8 +1,7 @@ \documentclass{article} \begin{document} -\begin{tabular}{ l | c | r } -test & 2 & test \\ -4 & 5 & 6 \\ -7 & 8 & 9 \\ + +\begin{tabular}{c} \end{tabular} + \end{document} \ No newline at end of file diff --git a/preliminaryReport/tests/simpletable.tmp b/preliminaryReport/tests/simpletable.tmp deleted file mode 100644 index 41b58e2c..00000000 --- a/preliminaryReport/tests/simpletable.tmp +++ /dev/null @@ -1,2 +0,0 @@ - -/* css.sty */ \ No newline at end of file diff --git a/program/code/main.py b/program/code/main.py index 2106a09b..6993d578 100644 --- a/program/code/main.py +++ b/program/code/main.py @@ -5,6 +5,13 @@ from code.latex_classes.latex_classes import return_latex_classes from code.error_messages.error_arrays import return_error_arrays +def command_name_check(latex_string, command_name): + error_arrays = return_error_arrays() + if latex_string[1 : (len(command_name) + 1)] != command_name: + print(latex_string + error_arrays[4]) + return "Error!" + return + def generic_checks(latex_string): error_arrays = return_error_arrays() if latex_string == "": @@ -16,6 +23,8 @@ def generic_checks(latex_string): if latex_string[0] != "\\": print(latex_string + error_arrays[6]) return "Error!" + return + def document_class(latex_string): @@ -29,8 +38,7 @@ def document_class(latex_string): if latex_string[len("\\documentclass{") - 1] != "{": print(latex_string + error_arrays[3]) return "Error!" - if latex_string[1 : (len("documentclass") + 1)] != "documentclass": - print(latex_string + error_arrays[4]) + if command_name_check(latex_string, "documentclass") == "Error!": return "Error!" document_type = latex_string[len("\\documentclass{") : (len(latex_string) - 1)] latex_classes = return_latex_classes() @@ -46,12 +54,30 @@ def begin_document(latex_string): """ if generic_checks(latex_string) == "Error!": return "Error!" - error_arrays = return_error_arrays() - if latex_string[1 : (len("begin") + 1)] != "begin": - print(latex_string + error_arrays[4]) + if command_name_check(latex_string, "begin") == "Error!": return "Error!" return "" +def begin_tabular(latex_string): + r""" + Checks if LaTeX begin tabular method is correct + """ + if generic_checks(latex_string) == "Error!": + return "Error!" + if command_name_check(latex_string, "begin") == "Error!": + return "Error!" + return "" + +def tabular_parameters(latex_string): + r""" + Checks if LaTeX tabular environment has any parameters + """ + if latex_string == "": + return "" + if latex_string == "[]": + return "" + return "Error!" + if __name__ == "__main__": document_class("") diff --git a/program/tests/conftest.py b/program/tests/conftest.py deleted file mode 100644 index e69de29b..00000000 diff --git a/program/tests/test_code/test_begin_document.py b/program/tests/test_code/test_begin_document.py index 0a1f8528..12c21341 100644 --- a/program/tests/test_code/test_begin_document.py +++ b/program/tests/test_code/test_begin_document.py @@ -19,7 +19,7 @@ def given_not_closed_then_error(): When: N/A Then: Error message """ - assert begin_document(r"\begin{document") == "Error!" + assert begin_document(r"\\begin{document") == "Error!" def given_no_opening_then_error(): diff --git a/program/tests/test_code/test_begin_tabular.py b/program/tests/test_code/test_begin_tabular.py new file mode 100644 index 00000000..551f1b23 --- /dev/null +++ b/program/tests/test_code/test_begin_tabular.py @@ -0,0 +1,67 @@ +""" + Tests begin document function +""" +from code.main import begin_tabular + +# Write python tests for a function translating LaTeX documentclass to html +def given_empty_then_error(): + """ + Given: "" + When: N/A + Then: Error message + """ + assert begin_tabular("") == "Error!" + + +def given_not_closed_then_error(): + r""" + Given: command not closed + When: N/A + Then: Error message + """ + assert begin_tabular(r"\\begin{tabular") == "Error!" + + +def given_no_opening_then_error(): + """ + Given: No opening curly bracket + When: N/A + Then: Error message + """ + assert begin_tabular(r"\\begintabular}") == "Error!" + + +def given_misspeled_then_error(): + """ + Given: misspelled begin tabular + When: N/A + Then: Error message + """ + assert begin_tabular(r"\\begim{tabular}") == "Error!" + + +def given_no_slash_then_error(): + """ + Given: no backslash at start + When: N/A + Then: Error message + """ + assert begin_tabular(r"begin{tabular}") == "Error!" + + +def given_correct_then_html(): + """ + Given: \begin{tabular} + When: N/A + Then: + """ + assert begin_tabular(r"\begin{tabular}") == "
" + + +def test_begin_tabular(): + given_correct_then_html() + given_empty_then_error() + given_misspeled_then_error() + given_no_opening_then_error() + given_not_closed_then_error() + given_no_slash_then_error() diff --git a/program/tests/test_code/test_tabular_parameters.py b/program/tests/test_code/test_tabular_parameters.py new file mode 100644 index 00000000..eade0793 --- /dev/null +++ b/program/tests/test_code/test_tabular_parameters.py @@ -0,0 +1,36 @@ +""" + Tests tabular_parameters function +""" + +from code.main import tabular_parameters + +def given_empty_then_empty(): + """ + Given: + When: N/A + Then: + """ + assert tabular_parameters("") == "" + +def given_empty_brackets_then_empty(): + """ + Given: [] + When: N/A + Then: + """ + assert tabular_parameters("[]") == "" + +def given_non_empty_then_error(): + """ + Given: [c] + When: N/A + Then: + """ + assert tabular_parameters("[c]") == "Error!" + + + +def test_tabular_parameters(): + given_empty_then_empty() + given_empty_brackets_then_empty() + given_non_empty_then_error()