diff --git a/Global.cpp b/Global.cpp index 012d763..64b4cb8 100644 --- a/Global.cpp +++ b/Global.cpp @@ -32,99 +32,7 @@ namespace jet { void Global::removeSession(coreutils::MString sessionId) { sessions.erase(sessionId); } - - coreutils::MString Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) { - if(modifier == "") - return value; - if(modifier == "tobinary") - return value.toBinary(); - else if(modifier == "frombinary") - return value.fromBinary(); - else if(modifier == "tohex") - return value.toHex(); - else if(modifier == "fromhex") - return value.fromHex(); - else if(modifier == "tobase64") - return value.toBase64(); - else if(modifier == "frombase64") - return value.fromBase64(); - else if(modifier == "toupper") - return value.toUpper(); - else if(modifier == "tolower") - return value.toLower(); - else if(modifier == "tocgi") - return value.toCGI(); - else if(modifier == "fromcgi") - return value.fromCGI(); - throw coreutils::Exception("modifier not valid."); - } - - coreutils::MString Global::getVariable(coreutils::ZString &variable, - std::map &lvariables, - std::map &keywords) { - if(variable.ifNext("$[")) { - coreutils::MString name; - coreutils::MString modifier; - if(variable.ifNext("!")) { - renderVariableName(variable, name, modifier, lvariables, keywords); - return variables[name]; - } else if(variable.ifNext("%")) { - renderVariableName(variable, name, modifier, lvariables, keywords); - return keywords[name]; - } else if(variable.ifNext(":")) { - renderVariableName(variable, name, modifier, lvariables, keywords); - if(name.find(":") == -1) { - name << ":0"; - } - return processModifier(cgiVariables[name], modifier); - } if(variable.ifNext("@")) { - // TODO: should only allow session variables. Allow substitution. - } if(variable.ifNext("%")) { - renderVariableName(variable, name, modifier, lvariables, keywords); - return getenv(name.c_str()); - } else { - renderVariableName(variable, name, modifier, lvariables, keywords); - name.split("."); - if(name.getList().size() == 1) { - if(variables.find(name[0]) == variables.end()) - throw coreutils::Exception("global variable is not initialized."); - return processModifier(variables[name[0]], modifier); - } - return getSessionVariable(name); - } - throw coreutils::Exception("expected variable name or type designator."); - } if(variable.ifNext("#[")) { - coreutils::MString name; - coreutils::MString modifier; - renderVariableName(variable, name, modifier, lvariables, keywords); - if(lvariables.find(name) == lvariables.end()) - throw coreutils::Exception("local variable is not initialized."); - return lvariables[name]; - } - throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[')."); - } - - void Global::renderVariableName(coreutils::ZString &variable, - coreutils::MString &name, coreutils::MString &modifier, - std::map &lvariables, - std::map &keywords) { - while(!variable.ifNext("]")) { - name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); - if(variable.ifNext(";")) { - renderVariableName(variable, modifier, modifier, lvariables, keywords); - return; - } else if(variable.ifNext(":")) { - name << ":"; - } else if(variable.startsWith("$[") || variable.startsWith("#[")) { - name << getVariable(variable, lvariables, keywords); - } else if(variable.ifNext("]")) - return; - else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-")) - throw coreutils::Exception("invalid variable name."); - } - return; - } - + __mysql * Global::getSession(coreutils::MString sessionId) { if(sessions.find(sessionId) == sessions.end()) throw coreutils::Exception("requested session is not available."); @@ -198,5 +106,5 @@ namespace jet { throw coreutils::Exception("expecting = after name in received CGI data."); } } - + } diff --git a/Global.h b/Global.h index 316e57a..cc70927 100644 --- a/Global.h +++ b/Global.h @@ -18,15 +18,6 @@ namespace jet { bool sessionExists(coreutils::MString sessionId); void addSession(coreutils::MString sessionId, __mysql *mysql); void removeSession(coreutils::MString sessionId); - coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier); - coreutils::MString getVariable(coreutils::ZString &variable, - std::map &lvariables, - std::map &keywords); - void renderVariableName(coreutils::ZString &variable, - coreutils::MString &name, - coreutils::MString &modifier, - std::map &lvariables, - std::map &keywords); __mysql * getSession(coreutils::MString sessionId); coreutils::ZString getSessionVariable(coreutils::MString &splitName); void outputHeaders(); @@ -40,7 +31,7 @@ namespace jet { std::map headers; std::map tags; char **envp; - + }; } diff --git a/JetCore.aux b/JetCore.aux index 46f1350..3a60a28 100644 --- a/JetCore.aux +++ b/JetCore.aux @@ -5,13 +5,15 @@ \@writefile{toc}{\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}Global Variables}{9}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {3.2}Local Variables}{9}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.3}Environment Variables}{9}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {3.4}CGI Variables}{9}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{\numberline {4}Expressions}{11}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} @@ -19,9 +21,12 @@ \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}\protected@file@percent } \@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {4.2}Function Reference}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}random()}{11}{}\protected@file@percent } -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}left}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}random}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}round}{11}{}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}\protected@file@percent } \@writefile{toc}{\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}\protected@file@percent } \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} @@ -30,21 +35,25 @@ \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {6.1}call}{15}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {6.2}comment}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.3}for}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.4}header}{15}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.5}if/else}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.6}ifrow/else}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.7}jet}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.8}mysql}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.9}read}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.10}set}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.11}sql}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.12}stream}{16}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.13}system}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.14}tag}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.15}until}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.16}while}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.17}whiledir}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.18}whilerow}{17}{}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {6.19}write}{18}{}\protected@file@percent } -\gdef \@abspage@last{18} +\@writefile{toc}{\contentsline {section}{\numberline {6.3}cookie}{15}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.4}dump}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.5}expr}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.6}for}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.7}header}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.8}if/else}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.10}include}{17}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.11}jet}{17}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.12}mysql}{17}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.13}read}{17}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.14}set}{17}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.15}sql}{18}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.16}stream}{18}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.17}system}{18}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.18}tag}{18}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.19}until}{18}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.20}while}{19}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.21}whiledir}{19}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.22}whilerow}{19}{}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {6.23}write}{19}{}\protected@file@percent } +\gdef \@abspage@last{19} diff --git a/JetCore.log b/JetCore.log index b6c35fd..67b31f1 100644 --- a/JetCore.log +++ b/JetCore.log @@ -1,17 +1,122 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdfetex 2024.11.17) 24 NOV 2024 10:04 +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.12.23) 6 JAN 2025 08:49 entering extended mode restricted \write18 enabled. - file:line:error style messages enabled. %&-line parsing enabled. -**\input ./JetCore.txt +**JetCore.txt (./JetCore.txt -./JetCore.txt:1: Undefined control sequence. -l.1 \documentclass - {book} -? -./JetCore.txt:1: Emergency stop. -l.1 - -End of file on the terminal! +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> +(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls +Document Class: book 2023/05/17 v1.4n Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo +File: bk10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) +) +\c@part=\count187 +\c@chapter=\count188 +\c@section=\count189 +\c@subsection=\count190 +\c@subsubsection=\count191 +\c@paragraph=\count192 +\c@subparagraph=\count193 +\c@figure=\count194 +\c@table=\count195 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count196 +\l__pdf_internal_box=\box51 +) +(./JetCore.aux) +\openout1 = `JetCore.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 7. +LaTeX Font Info: ... okay on input line 7. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 9. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 9. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 9. + [1 + + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 + +] +(./JetCore.toc +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 3. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 3. + [3]) +\tf@toc=\write3 +\openout3 = `JetCore.toc'. + + [4] +Chapter 1. +[5 + +] [6 + +] +Chapter 2. +[7] [8 + +] +Chapter 3. +[9{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] [10] +Chapter 4. +[11 + +] [12] +Chapter 5. +[13 + +] [14 + +] +Chapter 6. +[15] [16] [17] [18] [19] (./JetCore.aux) + *********** +LaTeX2e <2023-11-01> patch level 1 +L3 programming layer <2024-01-22> + *********** + ) +Here is how much of TeX's memory you used: + 508 strings out of 474222 + 9280 string characters out of 5748732 + 1932975 words of memory out of 5000000 + 22826 multiletter control sequences out of 15000+600000 + 564392 words of font info for 57 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 35i,6n,50p,159b,189s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on JetCore.pdf (19 pages, 131622 bytes). +PDF statistics: + 107 PDF objects out of 1000 (max. 8388607) + 69 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 1 words of extra memory for PDF output out of 10000 (max. 10000000) -./JetCore.txt:1: ==> Fatal error occurred, no output PDF file produced! diff --git a/JetCore.pdf b/JetCore.pdf index 3e98509..134e07c 100644 Binary files a/JetCore.pdf and b/JetCore.pdf differ diff --git a/JetCore.toc b/JetCore.toc index 14c1f7f..d450647 100644 --- a/JetCore.toc +++ b/JetCore.toc @@ -1,36 +1,45 @@ \contentsline {chapter}{\numberline {1}Introduction}{5}{}% \contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}% +\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}% \contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}% \contentsline {section}{\numberline {3.1}Global Variables}{9}{}% \contentsline {section}{\numberline {3.2}Local Variables}{9}{}% -\contentsline {section}{\numberline {3.3}Environment Variables}{9}{}% -\contentsline {section}{\numberline {3.4}CGI Variables}{9}{}% +\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}% +\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}% +\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}% \contentsline {chapter}{\numberline {4}Expressions}{11}{}% \contentsline {section}{\numberline {4.1}Operators}{11}{}% \contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}% \contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}% \contentsline {section}{\numberline {4.2}Function Reference}{11}{}% -\contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}% -\contentsline {subsection}{\numberline {4.2.2}random()}{11}{}% -\contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}% +\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}% +\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}% +\contentsline {subsection}{\numberline {4.2.3}left}{11}{}% +\contentsline {subsection}{\numberline {4.2.4}random}{11}{}% +\contentsline {subsection}{\numberline {4.2.5}round}{11}{}% +\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}% \contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}% \contentsline {chapter}{\numberline {6}Tag Reference}{15}{}% \contentsline {section}{\numberline {6.1}call}{15}{}% \contentsline {section}{\numberline {6.2}comment}{15}{}% -\contentsline {section}{\numberline {6.3}for}{15}{}% -\contentsline {section}{\numberline {6.4}header}{15}{}% -\contentsline {section}{\numberline {6.5}if/else}{16}{}% -\contentsline {section}{\numberline {6.6}ifrow/else}{16}{}% -\contentsline {section}{\numberline {6.7}jet}{16}{}% -\contentsline {section}{\numberline {6.8}mysql}{16}{}% -\contentsline {section}{\numberline {6.9}read}{16}{}% -\contentsline {section}{\numberline {6.10}set}{16}{}% -\contentsline {section}{\numberline {6.11}sql}{16}{}% -\contentsline {section}{\numberline {6.12}stream}{16}{}% -\contentsline {section}{\numberline {6.13}system}{17}{}% -\contentsline {section}{\numberline {6.14}tag}{17}{}% -\contentsline {section}{\numberline {6.15}until}{17}{}% -\contentsline {section}{\numberline {6.16}while}{17}{}% -\contentsline {section}{\numberline {6.17}whiledir}{17}{}% -\contentsline {section}{\numberline {6.18}whilerow}{17}{}% -\contentsline {section}{\numberline {6.19}write}{18}{}% +\contentsline {section}{\numberline {6.3}cookie}{15}{}% +\contentsline {section}{\numberline {6.4}dump}{16}{}% +\contentsline {section}{\numberline {6.5}expr}{16}{}% +\contentsline {section}{\numberline {6.6}for}{16}{}% +\contentsline {section}{\numberline {6.7}header}{16}{}% +\contentsline {section}{\numberline {6.8}if/else}{16}{}% +\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}% +\contentsline {section}{\numberline {6.10}include}{17}{}% +\contentsline {section}{\numberline {6.11}jet}{17}{}% +\contentsline {section}{\numberline {6.12}mysql}{17}{}% +\contentsline {section}{\numberline {6.13}read}{17}{}% +\contentsline {section}{\numberline {6.14}set}{17}{}% +\contentsline {section}{\numberline {6.15}sql}{18}{}% +\contentsline {section}{\numberline {6.16}stream}{18}{}% +\contentsline {section}{\numberline {6.17}system}{18}{}% +\contentsline {section}{\numberline {6.18}tag}{18}{}% +\contentsline {section}{\numberline {6.19}until}{18}{}% +\contentsline {section}{\numberline {6.20}while}{19}{}% +\contentsline {section}{\numberline {6.21}whiledir}{19}{}% +\contentsline {section}{\numberline {6.22}whilerow}{19}{}% +\contentsline {section}{\numberline {6.23}write}{19}{}% diff --git a/JetCore.txt b/JetCore.txt index 41162de..346e85f 100644 --- a/JetCore.txt +++ b/JetCore.txt @@ -1,4 +1,5 @@ \documentclass{book} + \title{JET Extension Tags} \author{Bradford Matthew Arant Sr.} \date{\today} @@ -28,8 +29,8 @@ to perform the desired function and affect the output. Tag attributes are used to pass parameters into the operations and functionality for each tag. -Outputting a database from mysql may be performed using the tag -in combination with the , and tags. +Outputting a database from mysql may be performed using the \ tag +in combination with the \, \ and \ tags. \section{User Defined Tags and Tag Liraries} @@ -42,7 +43,7 @@ tag process as a local variable for that container. Tag definitions can also be defined as scoped or unscoped, as follows: -scoped - local variables using the #[n] format can be scoped to just +scoped - local variables using the \#[n] format can be scoped to just your tag contents. Access to local variables where your tag is being used must use the 'parent' scope option to retrieve variables from the parent. @@ -81,6 +82,9 @@ specifying the scope of global. \item Local - +\item Keyword - within a tag's container we may access the keyword +values specified on the containing tag. + \end{itemize} \section{Global Variables} @@ -88,11 +92,27 @@ specifying the scope of global. Global variables are available to all logic once the values have been set. +Global variables are accessed throughout the procedure with the +\$[name] syntax. + Global is the default if the scope is not specified for any function that writes to a variable. \section{Local Variables} +Local variables are established using the set tag and specifying a +scope of local. Local variables are typically only available within +the container where they are defined. Some containers may not be +capable of storing local variables (i.e. set tag) and are inheriting +the local scope from their parent tag. + +\section{Keyword Variables} + +Keyword variables are set when they are specified on a containing tag. +Within the container you can access the variable using the syntax +\$[\%name]. + +The variable retrieved is not processed for variable resolution. \section{Environment Variables} diff --git a/KeywordValue.cpp b/KeywordValue.cpp deleted file mode 100644 index 5f5f882..0000000 --- a/KeywordValue.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "KeywordValue.h" -#include - -namespace jet { - - KeywordValue::KeywordValue(coreutils::ZString data, - Global &global, - std::map &variables, - std::map &keywords) : MString() { - while(!data.eod()) { - if(data.startsWith("$[") || data.startsWith("#[")) { - write(global.getVariable(data, variables, keywords)); - } else { - write(data.charAt(0)); - data.nextChar(); - } - } - } - - KeywordValue::~KeywordValue() {} - -} diff --git a/KeywordValue.h b/KeywordValue.h deleted file mode 100644 index 98790e4..0000000 --- a/KeywordValue.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __KeywordValue_h__ -#define __KeywordValue_h__ - -#include "MString.h" -#include "Global.h" - -namespace jet { - - /// - /// KeywordValue will read the data ZString and convert any variable references. - /// - - class KeywordValue : public coreutils::MString { - - public: - KeywordValue(coreutils::ZString data, Global &global, - std::map &variables, - std::map &keywords); - virtual ~KeywordValue(); - }; - -} - -#endif diff --git a/Operand.cpp b/Operand.cpp index 1e1c64c..95e89d5 100644 --- a/Operand.cpp +++ b/Operand.cpp @@ -6,24 +6,21 @@ namespace jet { - Operand::Operand(coreutils::ZString &in, - Global &global, - std::map &lvariables, - std::map &keywords) { + Operand::Operand(coreutils::ZString &in, Tag &tag) { doubleValue = 0; in.skipWhitespace(); if(in.startsWith("$[") || in.startsWith("#[")) { - string = global.getVariable(in, lvariables, keywords); + string = tag.getVariable(in); doubleValue = string.asDouble(); isNumber = string.eod(); string.reset(); if((string == "false") || (string == "true")) boolean = true; } else if(in.ifNext("(")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); string = op.string; doubleValue = op.doubleValue; if(!in.ifNext(")")) @@ -31,15 +28,15 @@ namespace jet { } else if(in.ifNextIgnoreCase("SUBSTRING")) { if(!in.ifNext("(")) throw coreutils::Exception("Expecting ( for SUBSTRING parameters."); - Operand parm1(in, global, lvariables, keywords); + Operand parm1(in, tag); if(!in.ifNext(",")) throw coreutils::Exception("Expecting , in SUBSTRING expression."); - Operand parm2(in, global, lvariables, keywords); + Operand parm2(in, tag); if(in.ifNext(")")) { string = parm1.string.substring(parm2.string.asInteger()); } else if(!in.ifNext(",")) throw coreutils::Exception("Expecting , in SUBSTRING expression."); - Operand parm3(in, global, lvariables, keywords); + Operand parm3(in, tag); if(in.ifNext(")")) { string = parm1.string.substring(parm2.string.asInteger(), parm3.string.asInteger()); } else @@ -47,10 +44,10 @@ namespace jet { } else if(in.ifNextIgnoreCase("LEFT")) { if(!in.ifNext("(")) throw coreutils::Exception("Expecting ( for LEFT parameters."); - Operand parm1(in, global, lvariables, keywords); + Operand parm1(in, tag); if(!in.ifNext(",")) throw coreutils::Exception("Expecting , in LEFT expression."); - Operand parm2(in, global, lvariables, keywords); + Operand parm2(in, tag); if(in.ifNext(")")) { string = parm1.string.substring(0, parm2.string.asInteger()); } else @@ -58,16 +55,29 @@ namespace jet { } else if(in.ifNextIgnoreCase("EXPR")) { if(!in.ifNext("(")) throw coreutils::Exception("Expecting ( for EXPR parameters."); - Operand parm1(in, global, lvariables, keywords); + Operand parm1(in, tag); if(in.ifNext(")")) { - Operand op(parm1.string, global, lvariables, keywords); + Operand op(parm1.string, tag); string = op.string; isNumber = op.isNumber; boolean = op.boolean; } else throw coreutils::Exception("Expecting ) at end of EXPR expression."); } else if(in.ifNextIgnoreCase("RIGHT")) { - + if(!in.ifNext("(")) + throw coreutils::Exception("Expecting ( for RIGHT parameters."); + Operand parm1(in, tag); + if(!in.ifNext(",")) + throw coreutils::Exception("Expecting , in RIGHT expression."); + Operand parm2(in, tag); + if(in.ifNext(")")) { + int len = parm1.string.getLength(); + int start = len - parm2.string.asInteger(); + std::cout << "len: " << len << "; start: " << start << ";" << std::endl; + string = parm1.string.substring(0, parm2.string.asInteger()); + std::cout << "string: " << string << std::endl; + } else + throw coreutils::Exception("Expecting ) at end of RIGHT expression."); } else if(in.ifNextIgnoreCase("TRIM")) { } else if(in.ifNextIgnoreCase("TOUPPER")) { @@ -108,7 +118,7 @@ namespace jet { in.skipWhitespace(); if(in.ifNext("!=") || in.ifNext("<>")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue != op.doubleValue) { boolean = true; @@ -132,7 +142,7 @@ namespace jet { } } if(in.ifNext("<=")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue <= op.doubleValue) { boolean = true; @@ -156,7 +166,7 @@ namespace jet { } } if(in.ifNext(">=")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue >= op.doubleValue) { boolean = true; @@ -180,7 +190,7 @@ namespace jet { } } if(in.ifNext("=")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue == op.doubleValue) { boolean = true; @@ -204,7 +214,7 @@ namespace jet { } } if(in.ifNext("<")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue < op.doubleValue) { boolean = true; @@ -228,7 +238,7 @@ namespace jet { } } if(in.ifNext(">")) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(isNumber && op.isNumber) { if(doubleValue > op.doubleValue) { boolean = true; @@ -253,7 +263,7 @@ namespace jet { } if(in.ifNext("+")) { if(isNumber) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(op.isNumber) { doubleValue += op.doubleValue; string = std::format("{:.12f}", doubleValue); @@ -264,7 +274,7 @@ namespace jet { throw coreutils::Exception("operand is not a number."); } else if(in.ifNext("-")) { if(isNumber) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(op.isNumber) { doubleValue -= op.doubleValue; string = std::format("{:.12f}", doubleValue); @@ -275,7 +285,7 @@ namespace jet { throw coreutils::Exception("operand is not a number."); } else if(in.ifNext("*")) { if(isNumber) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(op.isNumber) { doubleValue *= op.doubleValue; string = std::format("{:.12f}", doubleValue); @@ -286,7 +296,7 @@ namespace jet { throw coreutils::Exception("operand is not a number."); } else if(in.ifNext("/")) { if(isNumber) { - Operand op(in, global, lvariables, keywords); + Operand op(in, tag); if(op.isNumber) { doubleValue /= op.doubleValue; string = std::format("{:.12f}", doubleValue); diff --git a/Operand.h b/Operand.h index 8e0a409..b55dcef 100644 --- a/Operand.h +++ b/Operand.h @@ -2,6 +2,7 @@ #define __Operand_h__ #include "MString.h" +#include "Tag.h" #include "Global.h" namespace jet { @@ -9,10 +10,7 @@ namespace jet { class Operand { public: - Operand(coreutils::ZString &in, - Global &global, - std::map &lvariables, - std::map &keywords); + Operand(coreutils::ZString &in, Tag &tag); bool isNumber; diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..9014ad7 --- /dev/null +++ b/TODO.txt @@ -0,0 +1,13 @@ + +1) Allow keyword variables to be resolved with a ';resolve' modifier. +2) Only allow stream tag in CGI mode. +3) Create a method to upload a file directly to a file name to bypass +buffering on large files. +4) Allow the cookie tag only if CGI mode selected. +5) Call tag is acting wierd. Look at testcall.jet. +6) Create a tag for uploading of URL data to a specific file instead +of buffering in an internal variable. Use . See testcgi.jet +7) For CGI image and other mime type fields you should be able to get +file name and content length from variable. $[data(filename)] and +$[data(length)] possibly. +8) diff --git a/Tag.cpp b/Tag.cpp index 328ef95..c0a75ae 100644 --- a/Tag.cpp +++ b/Tag.cpp @@ -1,6 +1,5 @@ #include "Tag.h" #include "Exception.h" -#include "KeywordValue.h" #include "Global.h" #include "__mysql.h" #include "__sql.h" @@ -25,6 +24,7 @@ #include "__dotag.h" #include "__stream.h" #include "__dump.h" +#include "Operand.h" #include namespace jet { @@ -109,9 +109,20 @@ namespace jet { else if(output) copyContainer(container, parentOut); } - - void Tag::resolveKeyword(coreutils::ZString keyword) { - keywords[keyword] = KeywordValue(keywords[keyword], global, parent->local->variables, parent->keywords); + + coreutils::MString Tag::resolveKeyword(coreutils::ZString keyword) { + coreutils::MString resolved; + keywords[keyword].reset(); + while(!keywords[keyword].eod()) { + if(keywords[keyword].startsWith("$[") || keywords[keyword].startsWith("#[")) { + resolved.write(getVariable(keywords[keyword])); + } else { + resolved.write(keywords[keyword].charAt(0)); + keywords[keyword].nextChar(); + } + } + keywords[keyword].reset(); + return resolved; } void Tag::processContainer(coreutils::ZString &container) { @@ -206,7 +217,7 @@ namespace jet { } } else if(in.startsWith("$[") || in.startsWith("#[")) { global.errorCursor = in.getCursor(); - out.write(global.getVariable(in, local->variables, keywords)); + out.write(getVariable(in, true)); } else { out.write(in.nextChar()); } @@ -366,4 +377,139 @@ namespace jet { } return false; } + + coreutils::MString Tag::getVariable(coreutils::ZString &variable, bool inContainer) { + if(variable.ifNext("$[")) { + coreutils::MString name; + coreutils::MString modifier; + if(variable.ifNext("!")) { + renderVariableName(variable, name, modifier); + return global.variables[name]; + } else if(variable.ifNext("%")) { + renderVariableName(variable, name, modifier); + if(inContainer) + return keywords[name]; + else + return parent->keywords[name]; + } else if(variable.ifNext(":")) { + renderVariableName(variable, name, modifier); + if(name.find(":") == -1) { + name << ":0"; + } + return processModifier(global.cgiVariables[name], modifier); + } else if(variable.ifNext("@")) { + // TODO: should only allow session variables. Allow substitution. + } else if(variable.ifNext("%")) { + renderVariableName(variable, name, modifier); + return getenv(name.c_str()); + } else { + renderVariableName(variable, name, modifier); + name.split("."); + if(name.getList().size() == 1) { + if(global.variables.find(name[0]) == global.variables.end()) + throw coreutils::Exception("global variable is not initialized."); + return processModifier(global.variables[name[0]], modifier); + } + return global.getSessionVariable(name); + } + throw coreutils::Exception("expected variable name or type designator."); + } else if(variable.ifNext("#[")) { + coreutils::MString name; + coreutils::MString modifier; + renderVariableName(variable, name, modifier); + if(local->variables.find(name) == local->variables.end()) + throw coreutils::Exception("local variable is not initialized."); + return local->variables[name]; + } + throw coreutils::Exception("Expecting a variable initializer ('$[' or '#[')."); + } + + void Tag::renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier) { + while(!variable.ifNext("]")) { + name << variable.getTokenInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"); + if(variable.ifNext(";")) { + renderVariableName(variable, modifier, modifier); + return; + } else if(variable.ifNext(":")) { + name << ":"; + } else if(variable.startsWith("$[") || variable.startsWith("#[")) { + name << getVariable(variable); + } else if(variable.ifNext("]")) + return; + else if(!variable.ifNextInclude("?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-")) + throw coreutils::Exception("invalid variable name."); + } + return; + } + + void Tag::storeVariable(coreutils::ZString variable, coreutils::MString value, coreutils::ZString scope) { + if((scope == "global") || (scope == "")) + global.variables[variable] = value; + else if(scope == "local") + local->variables[variable] = value; + else if(scope == "parent") + local->parent->variables[variable] = value; + } + + void Tag::storeVariable(coreutils::ZString variable) { + if(keywordDefined("expr")) { + if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) + global.variables[variable] = Operand(keywords["expr"], *this).string; + else if(resolveKeyword("scope") == "local") + local->variables[variable] = Operand(keywords["expr"], *this).string; + else if(resolveKeyword("scope") == "parent") + local->parent->variables[variable] = Operand(keywords["expr"], *this).string; + } else if(hasContainer) { + processContainer(container); + if(evaluate) { + if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) + global.variables[variable] = out; + else if(resolveKeyword("scope") == "local") + local->variables[variable] = out; + else if(resolveKeyword("scope") == "parent") + local->parent->variables[variable] = out; + } else { + if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) + global.variables[variable] = container; + else if(resolveKeyword("scope") == "local") + local->variables[variable] = container; + else if(resolveKeyword("scope") == "parent") + local->parent->variables[variable] = container; + } + } else { + if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) + global.variables[variable] = resolveKeyword("value"); + else if(resolveKeyword("scope") == "local") + local->variables[variable] = resolveKeyword("value"); + else if(resolveKeyword("scope") == "parent") + local->parent->variables[variable] = resolveKeyword("value"); + } + } + + coreutils::MString Tag::processModifier(coreutils::MString &value, coreutils::MString &modifier) { + if(modifier == "") + return value; + if(modifier == "tobinary") + return value.toBinary(); + else if(modifier == "frombinary") + return value.fromBinary(); + else if(modifier == "tohex") + return value.toHex(); + else if(modifier == "fromhex") + return value.fromHex(); + else if(modifier == "tobase64") + return value.toBase64(); + else if(modifier == "frombase64") + return value.fromBase64(); + else if(modifier == "toupper") + return value.toUpper(); + else if(modifier == "tolower") + return value.toLower(); + else if(modifier == "tocgi") + return value.toCGI(); + else if(modifier == "fromcgi") + return value.fromCGI(); + throw coreutils::Exception("modifier not valid."); + } + } diff --git a/Tag.h b/Tag.h index a546c79..cb86fba 100644 --- a/Tag.h +++ b/Tag.h @@ -14,12 +14,15 @@ namespace jet { Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = ""); virtual ~Tag(); - void resolveKeyword(coreutils::ZString keyword); + coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false); + + coreutils::MString resolveKeyword(coreutils::ZString keyword); std::map variables; std::map keywords; coreutils::ZString name; coreutils::ZString container; coreutils::ZString container2; + Global &global; Tag *parent; Tag *local; @@ -31,8 +34,6 @@ namespace jet { void processContainer(coreutils::ZString &container); void copyContainer(coreutils::ZString &in, coreutils::MString &out); - Global &global; - coreutils::MString &parentOut; coreutils::MString out; coreutils::MString containerOut; @@ -43,6 +44,10 @@ namespace jet { bool trimLines = false; bool cleanWhitespace = false; + void renderVariableName(coreutils::ZString &variable, coreutils::MString &name, coreutils::MString &modifier); + void storeVariable(coreutils::ZString variable, coreutils::MString value, coreutils::ZString scope); + void storeVariable(coreutils::ZString variable); + private: bool containerOnly = false; coreutils::ZString splitTagName; @@ -56,7 +61,8 @@ namespace jet { bool ifTagDefined(coreutils::ZString &in, coreutils::ZString &tag); bool ifEndTagName(coreutils::ZString &in); bool ifSplitTagName(coreutils::ZString &in); - + + coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier); }; } diff --git a/__call.cpp b/__call.cpp index cc2fa39..a9ecdf1 100644 --- a/__call.cpp +++ b/__call.cpp @@ -14,16 +14,14 @@ namespace jet { throw coreutils::Exception("call tag cannot have a container."); if(!keywordDefined("pgm")) throw coreutils::Exception("pgm keyword must be specified."); - resolveKeyword("pgm"); for(ix = 0; ix <= 50; ++ix) argv[ix] = NULL; - argv[0] = keywords["pgm"].c_str(); // TODO: Need to peel off the program name only and pass as argv[0]. + argv[0] = resolveKeyword("pgm").c_str(); // TODO: Need to peel off the program name only and pass as argv[0]. for(ix = 1; ix <= 50; ++ix) { coreutils::MString arg("arg"); arg << ix; if(keywordDefined(arg)) { - resolveKeyword(arg); - argv[ix] = keywords[arg].c_str(); + argv[ix] = resolveKeyword(arg).c_str(); } else break; } @@ -33,8 +31,7 @@ namespace jet { close(fdo[0]); dup2(fdo[1], 1); if(keywordDefined("input")) { - resolveKeyword("input"); - coreutils::ZString input(variables["input"]); + coreutils::MString input(resolveKeyword("input")); pipe(fdi); if(fork() == 0) { close(fdi[0]); @@ -45,28 +42,20 @@ namespace jet { close(fdi[1]); dup2(fdi[0], 0); } - rc = execvpe(variables["pgm"].c_str(), argv, global.envp); + rc = execvpe(resolveKeyword("pgm").c_str(), argv, global.envp); close(fdo[1]); exit(errno); } close(fdo[1]); if(keywordDefined("name")) { - resolveKeyword("name"); - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]].read(fdo[0]); - else if(keywords["scope"] == "local") - this->local->variables[keywords["name"]].read(fdo[0]); - else if(keywords["scope"] == "parent") - this->local->parent->local->variables[keywords["name"]].read(fdo[0]); - else - throw coreutils::Exception("scope value is not valid."); - + coreutils::MString value; + value.read(fdo[0]); + storeVariable(resolveKeyword("name"), value, resolveKeyword("scope")); } else out.read(fdo[0]); waitpid(pid, &status, 0); if(keywordDefined("error")) { - resolveKeyword("error"); - global.variables[keywords["error"]] = (status >> 8 & 255); + global.variables[resolveKeyword("error")] = (status >> 8 & 255); } } diff --git a/__cookie.cpp b/__cookie.cpp index d5f1bf6..5a6de0e 100644 --- a/__cookie.cpp +++ b/__cookie.cpp @@ -18,21 +18,19 @@ namespace jet { throw coreutils::Exception("header tag cannot have both expr and value."); if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) throw coreutils::Exception("header tag must have a value, expr or a container."); - resolveKeyword("name"); if(keywordDefined("expr")) { if(keywordDefined("eval")) throw coreutils::Exception("Cannot use eval with expr."); - global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; + global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string; } else if(hasContainer) { processContainer(container); if(evaluate) { - global.headers[keywords["name"]] = out; + global.headers[keywords[resolveKeyword("name")]] = out; } else { - global.headers[keywords["name"]] = container; + global.headers[keywords[resolveKeyword("name")]] = container; } } else { - resolveKeyword("value"); - global.headers[keywords["Set-Cookie"]] = keywords["value"]; + global.headers[keywords["Set-Cookie"]] = keywords[resolveKeyword("value")]; } } } diff --git a/__for.cpp b/__for.cpp index 7277b23..a1bdb01 100644 --- a/__for.cpp +++ b/__for.cpp @@ -8,28 +8,23 @@ namespace jet { double counter = 0.0f; bool nameDefined = keywordDefined("name"); if(keywordDefined("start")) { - resolveKeyword("start"); - counter = keywords["start"].asDouble(); + counter = resolveKeyword("start").asDouble(); keywords["start"].reset(); } - if(keywordDefined("end")) - resolveKeyword("end"); - else + if(!keywordDefined("end")) throw coreutils::Exception("for tag requires end keyword."); - if(keywordDefined("step")) - resolveKeyword("step"); - else + if(!keywordDefined("step")) throw coreutils::Exception("for tag requires step keyword."); - for(double ix = counter; ix <= variables["end"].asDouble(); ix += variables["step"].asDouble()) { - keywords["end"].reset(); - keywords["step"].reset(); + for(double ix = counter; ix <= resolveKeyword("end").asDouble(); ix += resolveKeyword("step").asDouble()) { + resolveKeyword("end").reset(); + resolveKeyword("step").reset(); if(nameDefined) { - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]] = ix; - else if(keywords["scope"] == "local") - this->local->variables[keywords["name"]] = ix; - else if(keywords["scope"] == "parent") - parent->local->variables[keywords["name"]] = ix; + if(!keywordDefined("scope") || (resolveKeyword("scope") == "global")) + global.variables[resolveKeyword("name")] = ix; + else if(resolveKeyword("scope") == "local") + this->local->variables[resolveKeyword("name")] = ix; + else if(resolveKeyword("scope") == "parent") + parent->local->variables[resolveKeyword("name")] = ix; else throw coreutils::Exception("scope value is not valid."); } diff --git a/__header.cpp b/__header.cpp index b7fc588..c23b9a0 100644 --- a/__header.cpp +++ b/__header.cpp @@ -17,21 +17,19 @@ namespace jet { throw coreutils::Exception("header tag cannot have both expr and value."); if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer) throw coreutils::Exception("header tag must have a value, expr or a container."); - resolveKeyword("name"); if(keywordDefined("expr")) { if(keywordDefined("eval")) throw coreutils::Exception("Cannot use eval with expr."); - global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; + global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string; } else if(hasContainer) { processContainer(container); if(evaluate) { - global.headers[keywords["name"]] = out; + global.headers[keywords[resolveKeyword("name")]] = out; } else { - global.headers[keywords["name"]] = container; + global.headers[keywords[resolveKeyword("name")]] = container; } - } else { - resolveKeyword("value"); - global.headers[keywords["name"]] = keywords["value"]; - } + } else + global.headers[keywords[resolveKeyword("name")]] = keywords[resolveKeyword("value")]; + } } diff --git a/__if.cpp b/__if.cpp index 8707948..fc270e7 100644 --- a/__if.cpp +++ b/__if.cpp @@ -9,7 +9,6 @@ namespace jet { coreutils::MString result; bool booleanResult = false; if(keywordDefined("value1")) { - resolveKeyword("value1"); if(keywordDefined("expr")) throw coreutils::Exception("Either value1 or expr can be specified but not both."); if(keywordDefined("value2")) { @@ -17,24 +16,31 @@ namespace jet { throw coreutils::Exception("type expected if value1 and value2 specified."); } else throw coreutils::Exception("value2 required if value1 specified."); - resolveKeyword("value2"); - resolveKeyword("type"); - int rc = keywords["value1"].compare(keywords["value2"]); - if(((keywords["type"] == "eq") && (rc == 0)) || - ((keywords["type"] == "ne") && (rc != 0)) || - ((keywords["type"] == "lt") && (rc == -1)) || - ((keywords["type"] == "le") && (rc != 1)) || - ((keywords["type"] == "gt") && (rc == 1)) || - ((keywords["type"] == "ge") && (rc != -1))) + coreutils::MString type = resolveKeyword("type"); + if((type != "eq") && + (type != "ne") && + (type != "lt") && + (type != "le") && + (type != "gt") && + (type != "ge")) + throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); + int rc = resolveKeyword("value1").compare(resolveKeyword("value2")); + std::cout << "if: " << resolveKeyword("value1") << " " << type << " " << resolveKeyword("value2") << ":" << rc << std::endl; + if(((type == "eq") && (rc == 0)) || + ((type == "ne") && (rc != 0)) || + ((type == "lt") && (rc == -1)) || + ((type == "le") && (rc != 1)) || + ((type == "gt") && (rc == 1)) || + ((type == "ge") && (rc != -1))) booleanResult = true; else - throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); + booleanResult = false; } else if(keywordDefined("expr")) { if(keywordDefined("value2")) throw coreutils::Exception("value2 should not be specified with expr."); if(keywordDefined("type")) throw coreutils::Exception("type should not be specified with expr."); - booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; + booleanResult = Operand(keywords["expr"], *this).boolean; } if(booleanResult) processContainer(container); diff --git a/__ifrow.cpp b/__ifrow.cpp index 159d9a1..ce27763 100644 --- a/__ifrow.cpp +++ b/__ifrow.cpp @@ -11,10 +11,9 @@ namespace jet { output = false; if(!hasContainer) throw coreutils::Exception("ifrow tag must have a container."); - if(!global.sessionExists(keywords["sessionid"])) + if(!global.sessionExists(keywords[resolveKeyword("sessionid")])) throw coreutils::Exception("sessionid does not exist."); - resolveKeyword("sessionid"); - if(global.getSession(keywords["sessionid"])->hasRow()) + if(global.getSession(keywords[resolveKeyword("sessionid")])->hasRow()) processContainer(container); else processContainer(container2); diff --git a/__include.cpp b/__include.cpp index e5ac7eb..dae4ab4 100644 --- a/__include.cpp +++ b/__include.cpp @@ -10,8 +10,7 @@ namespace jet { if(hasContainer) throw coreutils::Exception("include tag should not have a container."); hasContainer = true; - resolveKeyword("file"); - coreutils::File file(keywords["file"]); + coreutils::File file(keywords[resolveKeyword("file")]); file.read(); container = file.asZString(); try { diff --git a/__jet.cpp b/__jet.cpp index 8d14bb0..12a6195 100644 --- a/__jet.cpp +++ b/__jet.cpp @@ -6,9 +6,7 @@ namespace jet { __jet::__jet(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { - if(keywordDefined("cgi")) - resolveKeyword("cgi"); - if(keywords["cgi"] == "true") { + if(keywordDefined("cgi") && (keywords[resolveKeyword("cgi")] == "true")) { coreutils::ZString requestMethod(getenv("REQUEST_METHOD")); if(requestMethod == "POST") { coreutils::ZString contentLength(getenv("CONTENT_LENGTH")); diff --git a/__mysql.cpp b/__mysql.cpp index db7b71f..cdbd9f1 100644 --- a/__mysql.cpp +++ b/__mysql.cpp @@ -14,19 +14,17 @@ namespace jet { throw coreutils::Exception("user must be specified for mysql tag."); if(!keywordDefined("password")) throw coreutils::Exception("password must be specified for mysql tag."); - - resolveKeyword("host"); - resolveKeyword("database"); - resolveKeyword("user"); - resolveKeyword("password"); - resolveKeyword("sessionid"); - sessionId = keywords["sessionid"]; + sessionId = keywords[resolveKeyword("sessionid")]; global.addSession(sessionId, this); mysql = mysql_init(NULL); - mysql = mysql_real_connect(mysql, keywords["host"].c_str(), keywords["user"].c_str(), keywords["password"].c_str(), keywords["database"].c_str(), 0, NULL, 0); + mysql = mysql_real_connect(mysql, + keywords[resolveKeyword("host")].c_str(), + keywords[resolveKeyword("user")].c_str(), + keywords[resolveKeyword("password")].c_str(), + keywords[resolveKeyword("database")].c_str(), 0, NULL, 0); if(!mysql) throw coreutils::Exception("database and host parameters are not valid."); diff --git a/__read.cpp b/__read.cpp index fb03b6e..d0c3137 100644 --- a/__read.cpp +++ b/__read.cpp @@ -13,12 +13,10 @@ namespace jet { throw coreutils::Exception("name keyword must be specified."); if(hasContainer) throw coreutils::Exception("read tag does not have a container."); - resolveKeyword("file"); - resolveKeyword("name"); - fd = open(keywords["file"].c_str(), O_RDONLY); + fd = open(resolveKeyword("file").c_str(), O_RDONLY); if(fd < 0) throw coreutils::Exception("file name is not found."); - global.variables[keywords["name"]].read(fd); + global.variables[resolveKeyword("name")].read(fd); close(fd); } diff --git a/__set.cpp b/__set.cpp index c9d1f1f..8d0b96d 100644 --- a/__set.cpp +++ b/__set.cpp @@ -1,7 +1,5 @@ #include "__set.h" #include "Exception.h" -#include "Operand.h" -#include "KeywordValue.h" #include namespace jet { @@ -21,41 +19,8 @@ namespace jet { if(keywordDefined("expr") && keywordDefined("eval")) throw coreutils::Exception("Cannot use eval with expr."); - resolveKeyword("name"); - - if(keywordDefined("expr")) { - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; - else if(keywords["scope"] == "local") - local->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; - else if(keywords["scope"] == "parent") - local->parent->variables[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string; - } else if(hasContainer) { - processContainer(container); - if(evaluate) { - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]] = out; - else if(keywords["scope"] == "local") - local->variables[keywords["name"]] = out; - else if(keywords["scope"] == "parent") - local->parent->variables[keywords["name"]] = out; - } else { - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]] = container; - else if(keywords["scope"] == "local") - local->variables[keywords["name"]] = container; - else if(keywords["scope"] == "parent") - local->parent->variables[keywords["name"]] = container; - } - } else { - resolveKeyword("value"); - if(!keywordDefined("scope") || (keywords["scope"] == "global")) - global.variables[keywords["name"]] = keywords["value"]; - else if(keywords["scope"] == "local") - local->variables[keywords["name"]] = keywords["value"]; - else if(keywords["scope"] == "parent") - local->parent->variables[keywords["name"]] = keywords["value"]; - } - - } + storeVariable(resolveKeyword("name")); + + } + } diff --git a/__sql.cpp b/__sql.cpp index 2488aea..987e1c6 100644 --- a/__sql.cpp +++ b/__sql.cpp @@ -15,9 +15,8 @@ namespace jet { throw coreutils::Exception("sql tag must have a container."); if(!global.sessionExists(keywords["sessionid"])) throw coreutils::Exception("sessionid does not exist."); - resolveKeyword("sessionid"); processContainer(container); - global.getSession(keywords["sessionid"])->query(out); + global.getSession(keywords[resolveKeyword("sessionid")])->query(out); } } diff --git a/__system.cpp b/__system.cpp index 08ae1f2..36034b2 100644 --- a/__system.cpp +++ b/__system.cpp @@ -20,7 +20,7 @@ namespace jet { dup2(fdo[1], 1); if(keywordDefined("input")) { resolveKeyword("input"); - coreutils::ZString input(keywords["input"]); + coreutils::ZString input(keywords[resolveKeyword("input")]); pipe(fdi); if(fork() == 0) { close(fdi[0]); @@ -31,13 +31,13 @@ namespace jet { close(fdi[1]); dup2(fdi[0], 0); } - system(keywords["cmd"].c_str()); + system(keywords[resolveKeyword("cmd")].c_str()); close(fdo[1]); exit(errno); } close(fdo[1]); if(keywordDefined("name")) - global.variables[keywords["name"]].read(fdo[0]); + global.variables[keywords[resolveKeyword("name")]].read(fdo[0]); else out.read(fdo[0]); waitpid(pid, &status, 0); diff --git a/__until.cpp b/__until.cpp index 09d9d98..35179a0 100644 --- a/__until.cpp +++ b/__until.cpp @@ -21,13 +21,13 @@ namespace jet { if(!keywordDefined("type")) throw coreutils::Exception("type expected if value1 and value2 specified."); - int rc = keywords["value1"].compare(keywords["value2"]); - if(((keywords["type"] == "eq") && (rc == 0)) || - ((keywords["type"] == "ne") && (rc != 0)) || - ((keywords["type"] == "lt") && (rc == -1)) || - ((keywords["type"] == "le") && (rc != 1)) || - ((keywords["type"] == "gt") && (rc == 1)) || - ((keywords["type"] == "ge") && (rc != -1))) + int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); + if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || + ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || + ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || + ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || + ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || + ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) booleanResult = true; else throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); @@ -47,16 +47,16 @@ namespace jet { keywords["expr"].reset(); keywords["expr"] = exprSaved; resolveKeyword("expr"); - booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; + booleanResult = Operand(keywords["expr"], *this).boolean; } else { booleanResult = false; - int rc = keywords["value1"].compare(keywords["value2"]); - if(((keywords["type"] == "eq") && (rc == 0)) || - ((keywords["type"] == "ne") && (rc != 0)) || - ((keywords["type"] == "lt") && (rc == -1)) || - ((keywords["type"] == "le") && (rc != 1)) || - ((keywords["type"] == "gt") && (rc == 1)) || - ((keywords["type"] == "ge") && (rc != -1))) + int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); + if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || + ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || + ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || + ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || + ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || + ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) booleanResult = true; } } while(booleanResult); diff --git a/__while.cpp b/__while.cpp index 6f8a8fa..fc998e2 100644 --- a/__while.cpp +++ b/__while.cpp @@ -21,13 +21,13 @@ namespace jet { if(!keywordDefined("type")) throw coreutils::Exception("type expected if value1 and value2 specified."); - int rc = keywords["value1"].compare(keywords["value2"]); - if(((keywords["type"] == "eq") && (rc == 0)) || - ((keywords["type"] == "ne") && (rc != 0)) || - ((keywords["type"] == "lt") && (rc == -1)) || - ((keywords["type"] == "le") && (rc != 1)) || - ((keywords["type"] == "gt") && (rc == 1)) || - ((keywords["type"] == "ge") && (rc != -1))) + int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); + if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || + ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || + ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || + ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || + ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || + ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) booleanResult = true; else throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); @@ -39,7 +39,7 @@ namespace jet { throw coreutils::Exception("type should not be specified with expr."); exprMethod = true; exprSaved = keywords["expr"]; - booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; + booleanResult = Operand(keywords["expr"], *this).boolean; } while(booleanResult) { processContainer(container); @@ -47,16 +47,16 @@ namespace jet { if(exprMethod) { keywords["expr"].reset(); keywords["expr"] = exprSaved; - booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean; + booleanResult = Operand(keywords["expr"], *this).boolean; } else { booleanResult = false; - int rc = keywords["value1"].compare(keywords["value2"]); - if(((keywords["type"] == "eq") && (rc == 0)) || - ((keywords["type"] == "ne") && (rc != 0)) || - ((keywords["type"] == "lt") && (rc == -1)) || - ((keywords["type"] == "le") && (rc != 1)) || - ((keywords["type"] == "gt") && (rc == 1)) || - ((keywords["type"] == "ge") && (rc != -1))) + int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]); + if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) || + ((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) || + ((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) || + ((keywords[resolveKeyword("type")] == "le") && (rc != 1)) || + ((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) || + ((keywords[resolveKeyword("type")] == "ge") && (rc != -1))) booleanResult = true; } } diff --git a/__whiledir.cpp b/__whiledir.cpp index 0aa2302..aa0d70a 100644 --- a/__whiledir.cpp +++ b/__whiledir.cpp @@ -11,43 +11,29 @@ namespace jet { __whiledir::__whiledir(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { if(!keywordDefined("path")) throw coreutils::Exception("whiledir tag must specify a path."); - resolveKeyword("path"); - resolveKeyword("sort"); - if(keywordDefined("sort") && (keywords["sort"] == "true")) { + if(keywordDefined("sort") && (resolveKeyword("sort") == "true")) { std::vector entries; - for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str())) + for(auto const &entry : std::filesystem::directory_iterator(resolveKeyword("path").str())) entries.push_back(entry); std::sort(entries.begin(), entries.end(), [](const auto &a, const auto &b) { return a.path() < b.path(); }); for(const auto &entry : entries) { - if(keywordDefined("fullpath")) { - resolveKeyword("fullpath"); - global.variables[keywords["fullpath"]] = entry.path(); - } - if(keywordDefined("filename")) { - resolveKeyword("filename"); - global.variables[keywords["filename"]] = entry.path().filename(); - } - if(keywordDefined("filenamenoextension")) { - resolveKeyword("filenamenoextension"); - global.variables[keywords["filenamenoextension"]] = entry.path().stem(); - } + if(keywordDefined("fullpath")) + global.variables[resolveKeyword("fullpath")] = entry.path(); + if(keywordDefined("filename")) + global.variables[resolveKeyword("filename")] = entry.path().filename(); + if(keywordDefined("filenamenoextension")) + global.variables[resolveKeyword("filenamenoextension")] = entry.path().stem(); processContainer(container); container.reset(); } } else { - for(auto const &entry : std::filesystem::directory_iterator(variables["path"].str())) { - if(keywordDefined("fullpath")) { - resolveKeyword("fullpath"); - global.variables[keywords["fullpath"]] = entry.path(); - } - if(keywordDefined("filename")) { - resolveKeyword("filename"); - global.variables[keywords["filename"]] = entry.path().filename(); - } - if(keywordDefined("filenamenoextension")) { - resolveKeyword("filenamenoextension"); - global.variables[keywords["filenamenoextension"]] = entry.path().stem(); - } + for(auto const &entry : std::filesystem::directory_iterator(variables[resolveKeyword("path")].str())) { + if(keywordDefined("fullpath")) + global.variables[resolveKeyword("fullpath")] = entry.path(); + if(keywordDefined("filename")) + global.variables[resolveKeyword("filename")] = entry.path().filename(); + if(keywordDefined("filenamenoextension")) + global.variables[resolveKeyword("filenamenoextension")] = entry.path().stem(); processContainer(container); container.reset(); } diff --git a/__write.cpp b/__write.cpp index 937ba75..ff7504b 100644 --- a/__write.cpp +++ b/__write.cpp @@ -14,7 +14,6 @@ namespace jet { processContainer(container); if(!keywordDefined("file")) throw coreutils::Exception("write tag must have file defined."); - resolveKeyword("file"); if(!keywordDefined("expr") && keywordDefined("value") && hasContainer) throw coreutils::Exception("write tag cannot have both value and a container."); if(keywordDefined("expr") && !keywordDefined("value") && hasContainer) @@ -25,20 +24,19 @@ namespace jet { throw coreutils::Exception("write tag must have a value, expr or a container."); if(!keywordDefined("mode")) throw coreutils::Exception("write tag must have a mode keyword."); - resolveKeyword("mode"); - if(keywords["mode"] == "append") + if(keywords[resolveKeyword("mode")] == "append") mode = O_APPEND; - else if(keywords["mode"] == "overwrite") + else if(keywords[resolveKeyword("mode")] == "overwrite") mode = O_TRUNC; else throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'."); - int fd = open(keywords["file"].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags. + int fd = open(keywords[resolveKeyword("file")].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags. if(hasContainer && !evaluate) len = write(fd, container.getData(), container.getLength()); else if(hasContainer && evaluate) len = write(fd, out.getData(), out.getLength()); else if(!hasContainer && keywordDefined("value")) - len = write(fd, variables["value"].getData(), keywords["value"].getLength()); + len = write(fd, variables[resolveKeyword("value")].getData(), keywords[resolveKeyword("value")].getLength()); else if(!hasContainer && keywordDefined("expr")) len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength()); close(fd); diff --git a/tests/testcall.jet b/tests/testcall.jet index be1f8bb..3ef97fc 100755 --- a/tests/testcall.jet +++ b/tests/testcall.jet @@ -3,6 +3,9 @@ test1=$[test1] -name1=#[localname] +name1=$[%name1] error=$[error] + +$[rc] + diff --git a/tests/testexpr.jet b/tests/testexpr.jet index 879b35d..3ef780f 100755 --- a/tests/testexpr.jet +++ b/tests/testexpr.jet @@ -6,4 +6,6 @@ $[test2]=10 0123456789 $[lefty]=01234 + +$[righty]=56789 diff --git a/tests/testjet.jet b/tests/testjet.jet index 0b26b71..c45db43 100755 --- a/tests/testjet.jet +++ b/tests/testjet.jet @@ -40,9 +40,9 @@ this is the value store in $[%name1]. this is the value store in $[%name1]. another container value - + include: $[include] - localvar='#[localvar]' + localvar='#[localvar]' >>>$[noeval]<<< >>>$[thename]<<< diff --git a/tests/testpost.jet b/tests/testpost.jet index a659d2b..b18ca64 100755 --- a/tests/testpost.jet +++ b/tests/testpost.jet @@ -1,4 +1,5 @@ #!../jet-2.0 + $[:name] $[:name:1] diff --git a/tmp.aux b/tmp.aux deleted file mode 100644 index 7a0d3f0..0000000 --- a/tmp.aux +++ /dev/null @@ -1,117 +0,0 @@ -\relax -\providecommand\hyper@newdestlabel[2]{} -\providecommand\HyField@AuxAddToFields[1]{} -\providecommand\HyField@AuxAddToCoFields[2]{} -\@writefile{toc}{\contentsline {section}{\numberline {0.1}\_\_call.cpp}{3}{section.0.1}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore call.cpp}{3}{lstlisting.0.-1}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.2}\_\_call.h}{5}{section.0.2}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore call.h}{5}{lstlisting.0.-2}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.3}\_\_comment.cpp}{6}{section.0.3}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore comment.cpp}{6}{lstlisting.0.-3}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.4}\_\_comment.h}{7}{section.0.4}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore comment.h}{7}{lstlisting.0.-4}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.5}\_\_dotag.cpp}{8}{section.0.5}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dotag.cpp}{8}{lstlisting.0.-5}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.6}\_\_dotag.h}{9}{section.0.6}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dotag.h}{9}{lstlisting.0.-6}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.7}\_\_dump.cpp}{10}{section.0.7}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dump.cpp}{10}{lstlisting.0.-7}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.8}\_\_dump.h}{11}{section.0.8}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore dump.h}{11}{lstlisting.0.-8}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.9}\_\_for.cpp}{12}{section.0.9}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.cpp}{12}{lstlisting.0.-9}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.10}\_\_for.cpp~}{13}{section.0.10}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.cpp~}{13}{lstlisting.0.-10}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.11}\_\_for.h}{14}{section.0.11}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore for.h}{14}{lstlisting.0.-11}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.12}Global.cpp}{15}{section.0.12}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Global.cpp}{15}{lstlisting.0.-12}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.13}Global.h}{19}{section.0.13}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Global.h}{19}{lstlisting.0.-13}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.14}\_\_header.cpp}{20}{section.0.14}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore header.cpp}{20}{lstlisting.0.-14}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.15}\_\_header.h}{21}{section.0.15}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore header.h}{21}{lstlisting.0.-15}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.16}\_\_if.cpp}{22}{section.0.16}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore if.cpp}{22}{lstlisting.0.-16}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.17}\_\_if.h}{23}{section.0.17}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore if.h}{23}{lstlisting.0.-17}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.18}\_\_ifrow.cpp}{24}{section.0.18}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore ifrow.cpp}{24}{lstlisting.0.-18}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.19}\_\_ifrow.h}{25}{section.0.19}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore ifrow.h}{25}{lstlisting.0.-19}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.20}\_\_include.cpp}{26}{section.0.20}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore include.cpp}{26}{lstlisting.0.-20}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.21}\_\_include.h}{27}{section.0.21}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore include.h}{27}{lstlisting.0.-21}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.22}jet-2.0.cpp}{28}{section.0.22}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{jet\textendash 2.0.cpp}{28}{lstlisting.0.-22}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.23}\_\_jet.cpp}{29}{section.0.23}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore jet.cpp}{29}{lstlisting.0.-23}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.24}\_\_jet.h}{30}{section.0.24}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore jet.h}{30}{lstlisting.0.-24}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.25}KeywordValue.cpp}{31}{section.0.25}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{KeywordValue.cpp}{31}{lstlisting.0.-25}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.26}KeywordValue.h}{32}{section.0.26}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{KeywordValue.h}{32}{lstlisting.0.-26}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.27}Modifiers.cpp}{33}{section.0.27}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Modifiers.cpp}{33}{lstlisting.0.-27}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.28}Modifiers.h}{36}{section.0.28}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Modifiers.h}{36}{lstlisting.0.-28}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.29}\_\_mysql.cpp}{37}{section.0.29}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore mysql.cpp}{37}{lstlisting.0.-29}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.30}\_\_mysql.h}{39}{section.0.30}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore mysql.h}{39}{lstlisting.0.-30}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.31}Operand.cpp}{40}{section.0.31}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Operand.cpp}{40}{lstlisting.0.-31}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.32}Operand.h}{46}{section.0.32}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Operand.h}{46}{lstlisting.0.-32}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.33}\_\_read.cpp}{47}{section.0.33}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore read.cpp}{47}{lstlisting.0.-33}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.34}\_\_read.h}{48}{section.0.34}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore read.h}{48}{lstlisting.0.-34}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.35}\_\_set.cpp}{49}{section.0.35}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore set.cpp}{49}{lstlisting.0.-35}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.36}\_\_set.h}{51}{section.0.36}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore set.h}{51}{lstlisting.0.-36}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.37}\_\_sql.cpp}{52}{section.0.37}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore sql.cpp}{52}{lstlisting.0.-37}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.38}\_\_sql.h}{53}{section.0.38}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore sql.h}{53}{lstlisting.0.-38}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.39}\_\_stream.cpp}{54}{section.0.39}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore stream.cpp}{54}{lstlisting.0.-39}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.40}\_\_stream.h}{55}{section.0.40}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore stream.h}{55}{lstlisting.0.-40}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.41}\_\_system.cpp}{56}{section.0.41}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore system.cpp}{56}{lstlisting.0.-41}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.42}\_\_system.h}{57}{section.0.42}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore system.h}{57}{lstlisting.0.-42}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.43}\_\_tag.cpp}{58}{section.0.43}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore tag.cpp}{58}{lstlisting.0.-43}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.44}Tag.cpp}{59}{section.0.44}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Tag.cpp}{59}{lstlisting.0.-44}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.45}\_\_tag.h}{66}{section.0.45}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore tag.h}{66}{lstlisting.0.-45}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.46}Tag.h}{67}{section.0.46}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{Tag.h}{67}{lstlisting.0.-46}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.47}\_\_until.cpp}{69}{section.0.47}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore until.cpp}{69}{lstlisting.0.-47}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.48}\_\_until.h}{71}{section.0.48}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore until.h}{71}{lstlisting.0.-48}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.49}\_\_while.cpp}{72}{section.0.49}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore while.cpp}{72}{lstlisting.0.-49}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.50}\_\_whiledir.cpp}{74}{section.0.50}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whiledir.cpp}{74}{lstlisting.0.-50}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.51}\_\_whiledir.h}{76}{section.0.51}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whiledir.h}{76}{lstlisting.0.-51}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.52}\_\_while.h}{77}{section.0.52}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore while.h}{77}{lstlisting.0.-52}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.53}\_\_whilerow.cpp}{78}{section.0.53}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whilerow.cpp}{78}{lstlisting.0.-53}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.54}\_\_whilerow.h}{79}{section.0.54}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore whilerow.h}{79}{lstlisting.0.-54}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.55}\_\_write.cpp}{80}{section.0.55}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore write.cpp}{80}{lstlisting.0.-55}\protected@file@percent } -\@writefile{toc}{\contentsline {section}{\numberline {0.56}\_\_write.h}{82}{section.0.56}\protected@file@percent } -\@writefile{lol}{\contentsline {lstlisting}{\textunderscore \textunderscore write.h}{82}{lstlisting.0.-56}\protected@file@percent } -\gdef \@abspage@last{82} diff --git a/tmp.log b/tmp.log deleted file mode 100644 index c78a5e9..0000000 --- a/tmp.log +++ /dev/null @@ -1,376 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.11.17) 29 NOV 2024 21:03 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**/tmp/tmp.FH1AorYcF9 -output-directory . -(/tmp/tmp.FH1AorYcF9 -LaTeX2e <2023-11-01> patch level 1 -L3 programming layer <2024-01-22> -(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls -Document Class: book 2023/05/17 v1.4n Standard LaTeX document class -(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo -File: bk10.clo 2023/05/17 v1.4n Standard LaTeX file (size option) -) -\c@part=\count187 -\c@chapter=\count188 -\c@section=\count189 -\c@subsection=\count190 -\c@subsubsection=\count191 -\c@paragraph=\count192 -\c@subparagraph=\count193 -\c@figure=\count194 -\c@table=\count195 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty -(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks17 -) -\lst@mode=\count196 -\lst@gtempboxa=\box51 -\lst@token=\toks18 -\lst@length=\count197 -\lst@currlwidth=\dimen141 -\lst@column=\count198 -\lst@pos=\count199 -\lst@lostspace=\dimen142 -\lst@width=\dimen143 -\lst@newlines=\count266 -\lst@lineno=\count267 -\lst@maxwidth=\dimen144 - -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty -File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) -\c@lstnumber=\count268 -\lst@skipnumbers=\count269 -\lst@framebox=\box52 -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/listings.cfg -File: listings.cfg 2023/02/27 1.9 listings configuration -)) -Package: listings 2023/02/27 1.9 (Carsten Heinz) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty -Package: color 2022/01/06 v1.3d Standard LaTeX Color (DPC) - -(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package color Info: Driver file: pdftex.def on input line 149. - -(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/dvipsnam.def -File: dvipsnam.def 2016/06/17 v3.0m Driver-dependent file (DPC,SPQR) -) -(/usr/share/texlive/texmf-dist/tex/latex/graphics/mathcolor.ltx)) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty -Package: hyperref 2024-01-20 v7.01h Hypertext links for LaTeX - -(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty -Package: iftex 2022/02/03 v1.0f TeX engine tests -) -(/usr/share/texlive/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty -Package: kvsetkeys 2022-10-05 v1.19 Key value parser (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty -Package: kvdefinekeys 2019-12-19 v1.6 Define keys (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/pdfescape/pdfescape.sty -Package: pdfescape 2019/12/09 v1.15 Implements pdfTeX's escape features (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty -Package: ltxcmds 2023-12-04 v1.26 LaTeX kernel commands for general use (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty -Package: pdftexcmds 2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO -) - -(/usr/share/texlive/texmf-dist/tex/generic/infwarerr/infwarerr.sty -Package: infwarerr 2019/12/03 v1.5 Providing info/warning/error messages (HO) -) -Package pdftexcmds Info: \pdf@primitive is available. -Package pdftexcmds Info: \pdf@ifprimitive is available. -Package pdftexcmds Info: \pdfdraftmode found. -)) -(/usr/share/texlive/texmf-dist/tex/latex/hycolor/hycolor.sty -Package: hycolor 2020-01-27 v1.10 Color options for hyperref/bookmark (HO) -) -(/usr/share/texlive/texmf-dist/tex/latex/auxhook/auxhook.sty -Package: auxhook 2019-12-17 v1.6 Hooks for auxiliary files (HO) -) -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty -Package: nameref 2023-11-26 v2.56 Cross-referencing by name of section - -(/usr/share/texlive/texmf-dist/tex/latex/refcount/refcount.sty -Package: refcount 2019/12/15 v3.6 Data extraction from label references (HO) -) -(/usr/share/texlive/texmf-dist/tex/generic/gettitlestring/gettitlestring.sty -Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO) - -(/usr/share/texlive/texmf-dist/tex/latex/kvoptions/kvoptions.sty -Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO) -)) -\c@section@level=\count270 -) -(/usr/share/texlive/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count271 -) -\@linkdim=\dimen145 -\Hy@linkcounter=\count272 -\Hy@pagecounter=\count273 - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def -File: pd1enc.def 2024-01-20 v7.01h Hyperref: PDFDocEncoding definition (HO) -Now handling font encoding PD1 ... -... no UTF-8 mapping file for font encoding PD1 -) -(/usr/share/texlive/texmf-dist/tex/generic/intcalc/intcalc.sty -Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO) -) -\Hy@SavedSpaceFactor=\count274 - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def -File: puenc.def 2024-01-20 v7.01h Hyperref: PDF Unicode definition (HO) -Now handling font encoding PU ... -... no UTF-8 mapping file for font encoding PU -) -Package hyperref Info: Option `colorlinks' set `true' on input line 4062. -Package hyperref Info: Hyper figures OFF on input line 4179. -Package hyperref Info: Link nesting OFF on input line 4184. -Package hyperref Info: Hyper index ON on input line 4187. -Package hyperref Info: Plain pages OFF on input line 4194. -Package hyperref Info: Backreferencing OFF on input line 4199. -Package hyperref Info: Implicit mode ON; LaTeX internals redefined. -Package hyperref Info: Bookmarks ON on input line 4446. -\c@Hy@tempcnt=\count275 - -(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty -\Urlmuskip=\muskip16 -Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -LaTeX Info: Redefining \url on input line 4784. -\XeTeXLinkMargin=\dimen146 - -(/usr/share/texlive/texmf-dist/tex/generic/bitset/bitset.sty -Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/bigintcalc/bigintcalc.sty -Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO -) -)) -\Fld@menulength=\count276 -\Field@Width=\dimen147 -\Fld@charsize=\dimen148 -Package hyperref Info: Hyper figures OFF on input line 6063. -Package hyperref Info: Link nesting OFF on input line 6068. -Package hyperref Info: Hyper index ON on input line 6071. -Package hyperref Info: backreferencing OFF on input line 6078. -Package hyperref Info: Link coloring ON on input line 6081. -Package hyperref Info: Link coloring with OCG OFF on input line 6088. -Package hyperref Info: PDF/A mode OFF on input line 6093. - -(/usr/share/texlive/texmf-dist/tex/latex/base/atbegshi-ltx.sty -Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi -package with kernel methods -) -\Hy@abspage=\count277 -\c@Item=\count278 -\c@Hfootnote=\count279 -) -Package hyperref Info: Driver (autodetected): hpdftex. - -(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def -File: hpdftex.def 2024-01-20 v7.01h Hyperref driver for pdfTeX - -(/usr/share/texlive/texmf-dist/tex/latex/base/atveryend-ltx.sty -Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend pac -kage -with kernel methods -) -\Fld@listcount=\count280 -\c@bookmark@seq@number=\count281 - -(/usr/share/texlive/texmf-dist/tex/latex/rerunfilecheck/rerunfilecheck.sty -Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO) - -(/usr/share/texlive/texmf-dist/tex/generic/uniquecounter/uniquecounter.sty -Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO) -) -Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 -85. -) -\Hy@SectionHShift=\skip50 -) -(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count282 -\l__pdf_internal_box=\box53 -) -(./tmp.aux) -\openout1 = `tmp.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 17. -LaTeX Font Info: ... okay on input line 17. -\c@lstlisting=\count283 - (/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count284 -\scratchdimen=\dimen149 -\scratchbox=\box54 -\nofMPsegments=\count285 -\nofMParguments=\count286 -\everyMPshowfont=\toks19 -\MPscratchCnt=\count287 -\MPscratchDim=\dimen150 -\MPnumerator=\count288 -\makeMPintoPDFobject=\count289 -\everyMPtoPDFconversion=\toks20 -) -Package hyperref Info: Link coloring ON on input line 17. - (./tmp.out) (./tmp.out) -\@outlinefile=\write3 -\openout3 = `tmp.out'. - - (./tmp.toc -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <7> on input line 1. -LaTeX Font Info: External font `cmex10' loaded for size -(Font) <5> on input line 1. - [1 - - -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}]) -\tf@toc=\write4 -\openout4 = `tmp.toc'. - - [2] -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty -File: lstlang1.sty 2023/02/27 1.9 listings language file -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstlang1.sty -File: lstlang1.sty 2023/02/27 1.9 listings language file -) -(/usr/share/texlive/texmf-dist/tex/latex/listings/lstmisc.sty -File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz) -) -Package hyperref Info: bookmark level for unknown lstlisting defaults to 0 on i -nput line 22. - (./__call.cpp -LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <8> not available -(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 1. - -[3]) [4] (./__call.h) [5] (./__comment.cpp) [6] (./__comment.h) [7] -(./__dotag.cpp) [8] (./__dotag.h) [9] (./__dump.cpp) [10] (./__dump.h) [11] -(./__for.cpp) [12] (./__for.cpp~) [13] (./__for.h) [14] (./Global.cpp [15] -LaTeX Font Info: Trying to load font information for TS1+cmtt on input line -63. - -(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmtt.fd -File: ts1cmtt.fd 2023/04/13 v2.5m Standard LaTeX font definitions -) -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [16{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [17]) -[18] (./Global.h) [19] (./__header.cpp) [20] (./__header.h) [21] (./__if.cpp) -[22] (./__if.h) [23] (./__ifrow.cpp) [24] (./__ifrow.h) [25] (./__include.cpp) -[26] (./__include.h) [27] (./jet-2.0.cpp) [28] (./__jet.cpp) [29] (./__jet.h) -[30] (./KeywordValue.cpp) [31] (./KeywordValue.h) [32] (./Modifiers.cpp -[33] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [34]) -[35] (./Modifiers.h) [36] (./__mysql.cpp [37]) [38] (./__mysql.h) [39] -(./Operand.cpp [40] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [41] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [42] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [43] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [44]) -[45] (./Operand.h) [46] (./__read.cpp) [47] (./__read.h) [48] (./__set.cpp -[49]) [50] (./__set.h) [51] (./__sql.cpp) [52] (./__sql.h) [53] (./__stream.cpp -) [54] (./__stream.h) [55] (./__system.cpp) [56] (./__system.h) [57] -(./__tag.cpp) [58] (./Tag.cpp [59] -Overfull \hbox (25.20828pt too wide) in paragraph at lines 53--54 -[][][][] - [] - - -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [60] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [61] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [62] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [63] -Underfull \vbox (badness 10000) has occurred while \output is active [] - - [64]) -[65] (./__tag.h) [66] (./Tag.h [67]) [68] (./__until.cpp [69]) [70] -(./__until.h) [71] (./__while.cpp [72]) [73] (./__whiledir.cpp [74]) [75] -(./__whiledir.h) [76] (./__while.h) [77] (./__whilerow.cpp) [78] -(./__whilerow.h) [79] (./__write.cpp [80]) [81] (./__write.h) [82] (./tmp.aux) - *********** -LaTeX2e <2023-11-01> patch level 1 -L3 programming layer <2024-01-22> - *********** -Package rerunfilecheck Info: File `tmp.out' has not changed. -(rerunfilecheck) Checksum: 656ADDF09DF2171BE729518C28B77DA0;5682. - ) -Here is how much of TeX's memory you used: - 13837 strings out of 474222 - 208746 string characters out of 5748732 - 2316975 words of memory out of 5000000 - 33087 multiletter control sequences out of 15000+600000 - 560565 words of font info for 45 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 75i,7n,79p,455b,2210s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on tmp.pdf (82 pages, 284714 bytes). -PDF statistics: - 3904 PDF objects out of 4296 (max. 8388607) - 3770 compressed objects within 38 object streams - 2782 named destinations out of 2984 (max. 500000) - 449 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/tmp.out b/tmp.out deleted file mode 100644 index 9cc63f1..0000000 --- a/tmp.out +++ /dev/null @@ -1,56 +0,0 @@ -\BOOKMARK [1][-]{section.0.1}{\376\377\000\137\000\137\000c\000a\000l\000l\000.\000c\000p\000p}{}% 1 -\BOOKMARK [1][-]{section.0.2}{\376\377\000\137\000\137\000c\000a\000l\000l\000.\000h}{}% 2 -\BOOKMARK [1][-]{section.0.3}{\376\377\000\137\000\137\000c\000o\000m\000m\000e\000n\000t\000.\000c\000p\000p}{}% 3 -\BOOKMARK [1][-]{section.0.4}{\376\377\000\137\000\137\000c\000o\000m\000m\000e\000n\000t\000.\000h}{}% 4 -\BOOKMARK [1][-]{section.0.5}{\376\377\000\137\000\137\000d\000o\000t\000a\000g\000.\000c\000p\000p}{}% 5 -\BOOKMARK [1][-]{section.0.6}{\376\377\000\137\000\137\000d\000o\000t\000a\000g\000.\000h}{}% 6 -\BOOKMARK [1][-]{section.0.7}{\376\377\000\137\000\137\000d\000u\000m\000p\000.\000c\000p\000p}{}% 7 -\BOOKMARK [1][-]{section.0.8}{\376\377\000\137\000\137\000d\000u\000m\000p\000.\000h}{}% 8 -\BOOKMARK [1][-]{section.0.9}{\376\377\000\137\000\137\000f\000o\000r\000.\000c\000p\000p}{}% 9 -\BOOKMARK [1][-]{section.0.10}{\376\377\000\137\000\137\000f\000o\000r\000.\000c\000p\000p\000\040}{}% 10 -\BOOKMARK [1][-]{section.0.11}{\376\377\000\137\000\137\000f\000o\000r\000.\000h}{}% 11 -\BOOKMARK [1][-]{section.0.12}{\376\377\000G\000l\000o\000b\000a\000l\000.\000c\000p\000p}{}% 12 -\BOOKMARK [1][-]{section.0.13}{\376\377\000G\000l\000o\000b\000a\000l\000.\000h}{}% 13 -\BOOKMARK [1][-]{section.0.14}{\376\377\000\137\000\137\000h\000e\000a\000d\000e\000r\000.\000c\000p\000p}{}% 14 -\BOOKMARK [1][-]{section.0.15}{\376\377\000\137\000\137\000h\000e\000a\000d\000e\000r\000.\000h}{}% 15 -\BOOKMARK [1][-]{section.0.16}{\376\377\000\137\000\137\000i\000f\000.\000c\000p\000p}{}% 16 -\BOOKMARK [1][-]{section.0.17}{\376\377\000\137\000\137\000i\000f\000.\000h}{}% 17 -\BOOKMARK [1][-]{section.0.18}{\376\377\000\137\000\137\000i\000f\000r\000o\000w\000.\000c\000p\000p}{}% 18 -\BOOKMARK [1][-]{section.0.19}{\376\377\000\137\000\137\000i\000f\000r\000o\000w\000.\000h}{}% 19 -\BOOKMARK [1][-]{section.0.20}{\376\377\000\137\000\137\000i\000n\000c\000l\000u\000d\000e\000.\000c\000p\000p}{}% 20 -\BOOKMARK [1][-]{section.0.21}{\376\377\000\137\000\137\000i\000n\000c\000l\000u\000d\000e\000.\000h}{}% 21 -\BOOKMARK [1][-]{section.0.22}{\376\377\000j\000e\000t\000-\0002\000.\0000\000.\000c\000p\000p}{}% 22 -\BOOKMARK [1][-]{section.0.23}{\376\377\000\137\000\137\000j\000e\000t\000.\000c\000p\000p}{}% 23 -\BOOKMARK [1][-]{section.0.24}{\376\377\000\137\000\137\000j\000e\000t\000.\000h}{}% 24 -\BOOKMARK [1][-]{section.0.25}{\376\377\000K\000e\000y\000w\000o\000r\000d\000V\000a\000l\000u\000e\000.\000c\000p\000p}{}% 25 -\BOOKMARK [1][-]{section.0.26}{\376\377\000K\000e\000y\000w\000o\000r\000d\000V\000a\000l\000u\000e\000.\000h}{}% 26 -\BOOKMARK [1][-]{section.0.27}{\376\377\000M\000o\000d\000i\000f\000i\000e\000r\000s\000.\000c\000p\000p}{}% 27 -\BOOKMARK [1][-]{section.0.28}{\376\377\000M\000o\000d\000i\000f\000i\000e\000r\000s\000.\000h}{}% 28 -\BOOKMARK [1][-]{section.0.29}{\376\377\000\137\000\137\000m\000y\000s\000q\000l\000.\000c\000p\000p}{}% 29 -\BOOKMARK [1][-]{section.0.30}{\376\377\000\137\000\137\000m\000y\000s\000q\000l\000.\000h}{}% 30 -\BOOKMARK [1][-]{section.0.31}{\376\377\000O\000p\000e\000r\000a\000n\000d\000.\000c\000p\000p}{}% 31 -\BOOKMARK [1][-]{section.0.32}{\376\377\000O\000p\000e\000r\000a\000n\000d\000.\000h}{}% 32 -\BOOKMARK [1][-]{section.0.33}{\376\377\000\137\000\137\000r\000e\000a\000d\000.\000c\000p\000p}{}% 33 -\BOOKMARK [1][-]{section.0.34}{\376\377\000\137\000\137\000r\000e\000a\000d\000.\000h}{}% 34 -\BOOKMARK [1][-]{section.0.35}{\376\377\000\137\000\137\000s\000e\000t\000.\000c\000p\000p}{}% 35 -\BOOKMARK [1][-]{section.0.36}{\376\377\000\137\000\137\000s\000e\000t\000.\000h}{}% 36 -\BOOKMARK [1][-]{section.0.37}{\376\377\000\137\000\137\000s\000q\000l\000.\000c\000p\000p}{}% 37 -\BOOKMARK [1][-]{section.0.38}{\376\377\000\137\000\137\000s\000q\000l\000.\000h}{}% 38 -\BOOKMARK [1][-]{section.0.39}{\376\377\000\137\000\137\000s\000t\000r\000e\000a\000m\000.\000c\000p\000p}{}% 39 -\BOOKMARK [1][-]{section.0.40}{\376\377\000\137\000\137\000s\000t\000r\000e\000a\000m\000.\000h}{}% 40 -\BOOKMARK [1][-]{section.0.41}{\376\377\000\137\000\137\000s\000y\000s\000t\000e\000m\000.\000c\000p\000p}{}% 41 -\BOOKMARK [1][-]{section.0.42}{\376\377\000\137\000\137\000s\000y\000s\000t\000e\000m\000.\000h}{}% 42 -\BOOKMARK [1][-]{section.0.43}{\376\377\000\137\000\137\000t\000a\000g\000.\000c\000p\000p}{}% 43 -\BOOKMARK [1][-]{section.0.44}{\376\377\000T\000a\000g\000.\000c\000p\000p}{}% 44 -\BOOKMARK [1][-]{section.0.45}{\376\377\000\137\000\137\000t\000a\000g\000.\000h}{}% 45 -\BOOKMARK [1][-]{section.0.46}{\376\377\000T\000a\000g\000.\000h}{}% 46 -\BOOKMARK [1][-]{section.0.47}{\376\377\000\137\000\137\000u\000n\000t\000i\000l\000.\000c\000p\000p}{}% 47 -\BOOKMARK [1][-]{section.0.48}{\376\377\000\137\000\137\000u\000n\000t\000i\000l\000.\000h}{}% 48 -\BOOKMARK [1][-]{section.0.49}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000.\000c\000p\000p}{}% 49 -\BOOKMARK [1][-]{section.0.50}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000d\000i\000r\000.\000c\000p\000p}{}% 50 -\BOOKMARK [1][-]{section.0.51}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000d\000i\000r\000.\000h}{}% 51 -\BOOKMARK [1][-]{section.0.52}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000.\000h}{}% 52 -\BOOKMARK [1][-]{section.0.53}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000r\000o\000w\000.\000c\000p\000p}{}% 53 -\BOOKMARK [1][-]{section.0.54}{\376\377\000\137\000\137\000w\000h\000i\000l\000e\000r\000o\000w\000.\000h}{}% 54 -\BOOKMARK [1][-]{section.0.55}{\376\377\000\137\000\137\000w\000r\000i\000t\000e\000.\000c\000p\000p}{}% 55 -\BOOKMARK [1][-]{section.0.56}{\376\377\000\137\000\137\000w\000r\000i\000t\000e\000.\000h}{}% 56 diff --git a/tmp.pdf b/tmp.pdf deleted file mode 100644 index 2a3e81c..0000000 Binary files a/tmp.pdf and /dev/null differ diff --git a/tmp.toc b/tmp.toc deleted file mode 100644 index f360d28..0000000 --- a/tmp.toc +++ /dev/null @@ -1,56 +0,0 @@ -\contentsline {section}{\numberline {0.1}\_\_call.cpp}{3}{section.0.1}% -\contentsline {section}{\numberline {0.2}\_\_call.h}{5}{section.0.2}% -\contentsline {section}{\numberline {0.3}\_\_comment.cpp}{6}{section.0.3}% -\contentsline {section}{\numberline {0.4}\_\_comment.h}{7}{section.0.4}% -\contentsline {section}{\numberline {0.5}\_\_dotag.cpp}{8}{section.0.5}% -\contentsline {section}{\numberline {0.6}\_\_dotag.h}{9}{section.0.6}% -\contentsline {section}{\numberline {0.7}\_\_dump.cpp}{10}{section.0.7}% -\contentsline {section}{\numberline {0.8}\_\_dump.h}{11}{section.0.8}% -\contentsline {section}{\numberline {0.9}\_\_for.cpp}{12}{section.0.9}% -\contentsline {section}{\numberline {0.10}\_\_for.cpp~}{13}{section.0.10}% -\contentsline {section}{\numberline {0.11}\_\_for.h}{14}{section.0.11}% -\contentsline {section}{\numberline {0.12}Global.cpp}{15}{section.0.12}% -\contentsline {section}{\numberline {0.13}Global.h}{19}{section.0.13}% -\contentsline {section}{\numberline {0.14}\_\_header.cpp}{20}{section.0.14}% -\contentsline {section}{\numberline {0.15}\_\_header.h}{21}{section.0.15}% -\contentsline {section}{\numberline {0.16}\_\_if.cpp}{22}{section.0.16}% -\contentsline {section}{\numberline {0.17}\_\_if.h}{23}{section.0.17}% -\contentsline {section}{\numberline {0.18}\_\_ifrow.cpp}{24}{section.0.18}% -\contentsline {section}{\numberline {0.19}\_\_ifrow.h}{25}{section.0.19}% -\contentsline {section}{\numberline {0.20}\_\_include.cpp}{26}{section.0.20}% -\contentsline {section}{\numberline {0.21}\_\_include.h}{27}{section.0.21}% -\contentsline {section}{\numberline {0.22}jet-2.0.cpp}{28}{section.0.22}% -\contentsline {section}{\numberline {0.23}\_\_jet.cpp}{29}{section.0.23}% -\contentsline {section}{\numberline {0.24}\_\_jet.h}{30}{section.0.24}% -\contentsline {section}{\numberline {0.25}KeywordValue.cpp}{31}{section.0.25}% -\contentsline {section}{\numberline {0.26}KeywordValue.h}{32}{section.0.26}% -\contentsline {section}{\numberline {0.27}Modifiers.cpp}{33}{section.0.27}% -\contentsline {section}{\numberline {0.28}Modifiers.h}{36}{section.0.28}% -\contentsline {section}{\numberline {0.29}\_\_mysql.cpp}{37}{section.0.29}% -\contentsline {section}{\numberline {0.30}\_\_mysql.h}{39}{section.0.30}% -\contentsline {section}{\numberline {0.31}Operand.cpp}{40}{section.0.31}% -\contentsline {section}{\numberline {0.32}Operand.h}{46}{section.0.32}% -\contentsline {section}{\numberline {0.33}\_\_read.cpp}{47}{section.0.33}% -\contentsline {section}{\numberline {0.34}\_\_read.h}{48}{section.0.34}% -\contentsline {section}{\numberline {0.35}\_\_set.cpp}{49}{section.0.35}% -\contentsline {section}{\numberline {0.36}\_\_set.h}{51}{section.0.36}% -\contentsline {section}{\numberline {0.37}\_\_sql.cpp}{52}{section.0.37}% -\contentsline {section}{\numberline {0.38}\_\_sql.h}{53}{section.0.38}% -\contentsline {section}{\numberline {0.39}\_\_stream.cpp}{54}{section.0.39}% -\contentsline {section}{\numberline {0.40}\_\_stream.h}{55}{section.0.40}% -\contentsline {section}{\numberline {0.41}\_\_system.cpp}{56}{section.0.41}% -\contentsline {section}{\numberline {0.42}\_\_system.h}{57}{section.0.42}% -\contentsline {section}{\numberline {0.43}\_\_tag.cpp}{58}{section.0.43}% -\contentsline {section}{\numberline {0.44}Tag.cpp}{59}{section.0.44}% -\contentsline {section}{\numberline {0.45}\_\_tag.h}{66}{section.0.45}% -\contentsline {section}{\numberline {0.46}Tag.h}{67}{section.0.46}% -\contentsline {section}{\numberline {0.47}\_\_until.cpp}{69}{section.0.47}% -\contentsline {section}{\numberline {0.48}\_\_until.h}{71}{section.0.48}% -\contentsline {section}{\numberline {0.49}\_\_while.cpp}{72}{section.0.49}% -\contentsline {section}{\numberline {0.50}\_\_whiledir.cpp}{74}{section.0.50}% -\contentsline {section}{\numberline {0.51}\_\_whiledir.h}{76}{section.0.51}% -\contentsline {section}{\numberline {0.52}\_\_while.h}{77}{section.0.52}% -\contentsline {section}{\numberline {0.53}\_\_whilerow.cpp}{78}{section.0.53}% -\contentsline {section}{\numberline {0.54}\_\_whilerow.h}{79}{section.0.54}% -\contentsline {section}{\numberline {0.55}\_\_write.cpp}{80}{section.0.55}% -\contentsline {section}{\numberline {0.56}\_\_write.h}{82}{section.0.56}%