This commit is contained in:
brad Arant 2025-01-10 17:09:58 -08:00
commit 779c6b0148
40 changed files with 543 additions and 1047 deletions

View File

@ -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<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &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<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &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.");
}
}
}

View File

@ -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<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &keywords);
void renderVariableName(coreutils::ZString &variable,
coreutils::MString &name,
coreutils::MString &modifier,
std::map<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &keywords);
__mysql * getSession(coreutils::MString sessionId);
coreutils::ZString getSessionVariable(coreutils::MString &splitName);
void outputHeaders();
@ -40,7 +31,7 @@ namespace jet {
std::map<coreutils::MString, coreutils::MString> headers;
std::map<coreutils::MString, coreutils::MString> tags;
char **envp;
};
}

View File

@ -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}

View File

@ -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
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></us
r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/shar
e/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texli
ve/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texm
f-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/share/texlive/texmf-dist/
fonts/type1/public/amsfonts/cm/cmsl10.pfb></usr/share/texlive/texmf-dist/fonts/
type1/public/amsfonts/cm/cmtt10.pfb></usr/share/texmf/fonts/type1/public/cm-sup
er/sfrm1000.pfb>
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!

Binary file not shown.

View File

@ -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}{}%

View File

@ -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 <mysql> tag
in combination with the <ifrow>, <whilerow> and <sql> tags.
Outputting a database from mysql may be performed using the \<mysql\> tag
in combination with the \<ifrow\>, \<whilerow\> and \<sql\> 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}

View File

@ -1,22 +0,0 @@
#include "KeywordValue.h"
#include <iostream>
namespace jet {
KeywordValue::KeywordValue(coreutils::ZString data,
Global &global,
std::map<coreutils::MString, coreutils::MString> &variables,
std::map<coreutils::MString, coreutils::MString> &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() {}
}

View File

@ -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<coreutils::MString, coreutils::MString> &variables,
std::map<coreutils::MString, coreutils::MString> &keywords);
virtual ~KeywordValue();
};
}
#endif

View File

@ -6,24 +6,21 @@
namespace jet {
Operand::Operand(coreutils::ZString &in,
Global &global,
std::map<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &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);

View File

@ -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<coreutils::MString, coreutils::MString> &lvariables,
std::map<coreutils::MString, coreutils::MString> &keywords);
Operand(coreutils::ZString &in, Tag &tag);
bool isNumber;

13
TODO.txt Normal file
View File

@ -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 <upload />. 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)

156
Tag.cpp
View File

@ -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 <iostream>
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.");
}
}

14
Tag.h
View File

@ -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<coreutils::MString, coreutils::MString> variables;
std::map<coreutils::MString, coreutils::MString> 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);
};
}

View File

@ -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);
}
}

View File

@ -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")];
}
}
}

View File

@ -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.");
}

View File

@ -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")];
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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 {

View File

@ -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"));

View File

@ -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.");

View File

@ -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);
}

View File

@ -1,7 +1,5 @@
#include "__set.h"
#include "Exception.h"
#include "Operand.h"
#include "KeywordValue.h"
#include <iostream>
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"));
}
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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<std::filesystem::directory_entry> 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();
}

View File

@ -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);

View File

@ -3,6 +3,9 @@
<set name="abc" value="abcdefg" />
<call pgm="cat" error="error" input="$[abc]xyz" name="test1" />
test1=$[test1]
name1=#[localname]
name1=$[%name1]
error=$[error]
<call error="rc" pgm="/usr/bin/ls" arg1="-al" />
$[rc]
</jet>

View File

@ -6,4 +6,6 @@ $[test2]=10
<set name="numbers">0123456789</set>
<set name="lefty" expr="left($[numbers],5)" />
$[lefty]=01234
<set name="righty" expr="right($[numbers],5)" />
$[righty]=56789
</jet>

View File

@ -40,9 +40,9 @@
<set name="noeval" eval="no">this is the value store in $[%name1].</set>
<set name="thename" eval="yes">this is the value store in $[%name1].</set>
<set name="newname" scope="global">another container value</set>
<comment><include file="./testinclude.jet" />
<include file="./testinclude.jet" />
include: $[include]
localvar='#[localvar]'</comment>
localvar='#[localvar]'
>>>$[noeval]<<<
>>>$[thename]<<<
<set name="iz" value="data" />

View File

@ -1,4 +1,5 @@
#!../jet-2.0
<upload name="imagefiledata" path="images/%name" />
<jet cgi="true">
$[:name]
$[:name:1]

117
tmp.aux
View File

@ -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}

376
tmp.log
View File

@ -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
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></us
r/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmitt10.pfb></usr/sha
re/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texl
ive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsl10.pfb></usr/share/texlive/te
xmf-dist/fonts/type1/public/amsfonts/cm/cmtt8.pfb></usr/share/texmf/fonts/type1
/public/cm-super/sftt0800.pfb>
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)

56
tmp.out
View File

@ -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

BIN
tmp.pdf

Binary file not shown.

56
tmp.toc
View File

@ -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}%