merge
This commit is contained in:
commit
779c6b0148
96
Global.cpp
96
Global.cpp
@ -32,99 +32,7 @@ namespace jet {
|
||||
void Global::removeSession(coreutils::MString sessionId) {
|
||||
sessions.erase(sessionId);
|
||||
}
|
||||
|
||||
coreutils::MString Global::processModifier(coreutils::MString &value, coreutils::MString &modifier) {
|
||||
if(modifier == "")
|
||||
return value;
|
||||
if(modifier == "tobinary")
|
||||
return value.toBinary();
|
||||
else if(modifier == "frombinary")
|
||||
return value.fromBinary();
|
||||
else if(modifier == "tohex")
|
||||
return value.toHex();
|
||||
else if(modifier == "fromhex")
|
||||
return value.fromHex();
|
||||
else if(modifier == "tobase64")
|
||||
return value.toBase64();
|
||||
else if(modifier == "frombase64")
|
||||
return value.fromBase64();
|
||||
else if(modifier == "toupper")
|
||||
return value.toUpper();
|
||||
else if(modifier == "tolower")
|
||||
return value.toLower();
|
||||
else if(modifier == "tocgi")
|
||||
return value.toCGI();
|
||||
else if(modifier == "fromcgi")
|
||||
return value.fromCGI();
|
||||
throw coreutils::Exception("modifier not valid.");
|
||||
}
|
||||
|
||||
coreutils::MString Global::getVariable(coreutils::ZString &variable,
|
||||
std::map<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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
11
Global.h
11
Global.h
@ -18,15 +18,6 @@ namespace jet {
|
||||
bool sessionExists(coreutils::MString sessionId);
|
||||
void addSession(coreutils::MString sessionId, __mysql *mysql);
|
||||
void removeSession(coreutils::MString sessionId);
|
||||
coreutils::MString processModifier(coreutils::MString &value, coreutils::MString &modifier);
|
||||
coreutils::MString getVariable(coreutils::ZString &variable,
|
||||
std::map<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;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
55
JetCore.aux
55
JetCore.aux
@ -5,13 +5,15 @@
|
||||
\@writefile{toc}{\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}\protected@file@percent }
|
||||
\@writefile{lof}{\addvspace {10\p@ }}
|
||||
\@writefile{lot}{\addvspace {10\p@ }}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}\protected@file@percent }
|
||||
\@writefile{lof}{\addvspace {10\p@ }}
|
||||
\@writefile{lot}{\addvspace {10\p@ }}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.1}Global Variables}{9}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.2}Local Variables}{9}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.3}Environment Variables}{9}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.4}CGI Variables}{9}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {chapter}{\numberline {4}Expressions}{11}{}\protected@file@percent }
|
||||
\@writefile{lof}{\addvspace {10\p@ }}
|
||||
\@writefile{lot}{\addvspace {10\p@ }}
|
||||
@ -19,9 +21,12 @@
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4.2}Function Reference}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}random()}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.3}left}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.4}random}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.5}round}{11}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}\protected@file@percent }
|
||||
\@writefile{lof}{\addvspace {10\p@ }}
|
||||
\@writefile{lot}{\addvspace {10\p@ }}
|
||||
@ -30,21 +35,25 @@
|
||||
\@writefile{lot}{\addvspace {10\p@ }}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.1}call}{15}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.2}comment}{15}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.3}for}{15}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.4}header}{15}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.5}if/else}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.6}ifrow/else}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.7}jet}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.8}mysql}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.9}read}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.10}set}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.11}sql}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.12}stream}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.13}system}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.14}tag}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.15}until}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.16}while}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.17}whiledir}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.18}whilerow}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.19}write}{18}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{18}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.3}cookie}{15}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.4}dump}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.5}expr}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.6}for}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.7}header}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.8}if/else}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.10}include}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.11}jet}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.12}mysql}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.13}read}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.14}set}{17}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.15}sql}{18}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.16}stream}{18}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.17}system}{18}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.18}tag}{18}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.19}until}{18}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.20}while}{19}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.21}whiledir}{19}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.22}whilerow}{19}{}\protected@file@percent }
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {6.23}write}{19}{}\protected@file@percent }
|
||||
\gdef \@abspage@last{19}
|
||||
|
129
JetCore.log
129
JetCore.log
@ -1,17 +1,122 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdfetex 2024.11.17) 24 NOV 2024 10:04
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2024.12.23) 6 JAN 2025 08:49
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
file:line:error style messages enabled.
|
||||
%&-line parsing enabled.
|
||||
**\input ./JetCore.txt
|
||||
**JetCore.txt
|
||||
(./JetCore.txt
|
||||
./JetCore.txt:1: Undefined control sequence.
|
||||
l.1 \documentclass
|
||||
{book}
|
||||
?
|
||||
./JetCore.txt:1: Emergency stop.
|
||||
l.1
|
||||
|
||||
End of file on the terminal!
|
||||
LaTeX2e <2023-11-01> patch level 1
|
||||
L3 programming layer <2024-01-22>
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/base/book.cls
|
||||
Document Class: book 2023/05/17 v1.4n Standard LaTeX document class
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/base/bk10.clo
|
||||
File: bk10.clo 2023/05/17 v1.4n Standard LaTeX file (size option)
|
||||
)
|
||||
\c@part=\count187
|
||||
\c@chapter=\count188
|
||||
\c@section=\count189
|
||||
\c@subsection=\count190
|
||||
\c@subsubsection=\count191
|
||||
\c@paragraph=\count192
|
||||
\c@subparagraph=\count193
|
||||
\c@figure=\count194
|
||||
\c@table=\count195
|
||||
\abovecaptionskip=\skip48
|
||||
\belowcaptionskip=\skip49
|
||||
\bibindent=\dimen140
|
||||
)
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
|
||||
File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX)
|
||||
\l__color_backend_stack_int=\count196
|
||||
\l__pdf_internal_box=\box51
|
||||
)
|
||||
(./JetCore.aux)
|
||||
\openout1 = `JetCore.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 7.
|
||||
LaTeX Font Info: ... okay on input line 7.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <12> on input line 9.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <8> on input line 9.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <6> on input line 9.
|
||||
[1
|
||||
|
||||
|
||||
{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2
|
||||
|
||||
]
|
||||
(./JetCore.toc
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <7> on input line 3.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <5> on input line 3.
|
||||
[3])
|
||||
\tf@toc=\write3
|
||||
\openout3 = `JetCore.toc'.
|
||||
|
||||
[4]
|
||||
Chapter 1.
|
||||
[5
|
||||
|
||||
] [6
|
||||
|
||||
]
|
||||
Chapter 2.
|
||||
[7] [8
|
||||
|
||||
]
|
||||
Chapter 3.
|
||||
[9{/usr/share/texmf/fonts/enc/dvips/cm-super/cm-super-ts1.enc}] [10]
|
||||
Chapter 4.
|
||||
[11
|
||||
|
||||
] [12]
|
||||
Chapter 5.
|
||||
[13
|
||||
|
||||
] [14
|
||||
|
||||
]
|
||||
Chapter 6.
|
||||
[15] [16] [17] [18] [19] (./JetCore.aux)
|
||||
***********
|
||||
LaTeX2e <2023-11-01> patch level 1
|
||||
L3 programming layer <2024-01-22>
|
||||
***********
|
||||
)
|
||||
Here is how much of TeX's memory you used:
|
||||
508 strings out of 474222
|
||||
9280 string characters out of 5748732
|
||||
1932975 words of memory out of 5000000
|
||||
22826 multiletter control sequences out of 15000+600000
|
||||
564392 words of font info for 57 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
35i,6n,50p,159b,189s stack positions out of 10000i,1000n,20000p,200000b,200000s
|
||||
</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!
|
||||
|
BIN
JetCore.pdf
BIN
JetCore.pdf
Binary file not shown.
53
JetCore.toc
53
JetCore.toc
@ -1,36 +1,45 @@
|
||||
\contentsline {chapter}{\numberline {1}Introduction}{5}{}%
|
||||
\contentsline {chapter}{\numberline {2}Tags and Attributes}{7}{}%
|
||||
\contentsline {section}{\numberline {2.1}User Defined Tags and Tag Liraries}{7}{}%
|
||||
\contentsline {chapter}{\numberline {3}Variables and Variable Types}{9}{}%
|
||||
\contentsline {section}{\numberline {3.1}Global Variables}{9}{}%
|
||||
\contentsline {section}{\numberline {3.2}Local Variables}{9}{}%
|
||||
\contentsline {section}{\numberline {3.3}Environment Variables}{9}{}%
|
||||
\contentsline {section}{\numberline {3.4}CGI Variables}{9}{}%
|
||||
\contentsline {section}{\numberline {3.3}Keyword Variables}{10}{}%
|
||||
\contentsline {section}{\numberline {3.4}Environment Variables}{10}{}%
|
||||
\contentsline {section}{\numberline {3.5}CGI Variables}{10}{}%
|
||||
\contentsline {chapter}{\numberline {4}Expressions}{11}{}%
|
||||
\contentsline {section}{\numberline {4.1}Operators}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.1.1}Arithmentic Operators}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.1.2}Boolean Operators}{11}{}%
|
||||
\contentsline {section}{\numberline {4.2}Function Reference}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.1}left(string, number-of-characters)}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.2}random()}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.3}substring(string, start-position, number-of-characters}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.1}concat}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.2}integer}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.3}left}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.4}random}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.5}round}{11}{}%
|
||||
\contentsline {subsection}{\numberline {4.2.6}substring}{12}{}%
|
||||
\contentsline {chapter}{\numberline {5}Common Gateway Interface Features}{13}{}%
|
||||
\contentsline {chapter}{\numberline {6}Tag Reference}{15}{}%
|
||||
\contentsline {section}{\numberline {6.1}call}{15}{}%
|
||||
\contentsline {section}{\numberline {6.2}comment}{15}{}%
|
||||
\contentsline {section}{\numberline {6.3}for}{15}{}%
|
||||
\contentsline {section}{\numberline {6.4}header}{15}{}%
|
||||
\contentsline {section}{\numberline {6.5}if/else}{16}{}%
|
||||
\contentsline {section}{\numberline {6.6}ifrow/else}{16}{}%
|
||||
\contentsline {section}{\numberline {6.7}jet}{16}{}%
|
||||
\contentsline {section}{\numberline {6.8}mysql}{16}{}%
|
||||
\contentsline {section}{\numberline {6.9}read}{16}{}%
|
||||
\contentsline {section}{\numberline {6.10}set}{16}{}%
|
||||
\contentsline {section}{\numberline {6.11}sql}{16}{}%
|
||||
\contentsline {section}{\numberline {6.12}stream}{16}{}%
|
||||
\contentsline {section}{\numberline {6.13}system}{17}{}%
|
||||
\contentsline {section}{\numberline {6.14}tag}{17}{}%
|
||||
\contentsline {section}{\numberline {6.15}until}{17}{}%
|
||||
\contentsline {section}{\numberline {6.16}while}{17}{}%
|
||||
\contentsline {section}{\numberline {6.17}whiledir}{17}{}%
|
||||
\contentsline {section}{\numberline {6.18}whilerow}{17}{}%
|
||||
\contentsline {section}{\numberline {6.19}write}{18}{}%
|
||||
\contentsline {section}{\numberline {6.3}cookie}{15}{}%
|
||||
\contentsline {section}{\numberline {6.4}dump}{16}{}%
|
||||
\contentsline {section}{\numberline {6.5}expr}{16}{}%
|
||||
\contentsline {section}{\numberline {6.6}for}{16}{}%
|
||||
\contentsline {section}{\numberline {6.7}header}{16}{}%
|
||||
\contentsline {section}{\numberline {6.8}if/else}{16}{}%
|
||||
\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}%
|
||||
\contentsline {section}{\numberline {6.10}include}{17}{}%
|
||||
\contentsline {section}{\numberline {6.11}jet}{17}{}%
|
||||
\contentsline {section}{\numberline {6.12}mysql}{17}{}%
|
||||
\contentsline {section}{\numberline {6.13}read}{17}{}%
|
||||
\contentsline {section}{\numberline {6.14}set}{17}{}%
|
||||
\contentsline {section}{\numberline {6.15}sql}{18}{}%
|
||||
\contentsline {section}{\numberline {6.16}stream}{18}{}%
|
||||
\contentsline {section}{\numberline {6.17}system}{18}{}%
|
||||
\contentsline {section}{\numberline {6.18}tag}{18}{}%
|
||||
\contentsline {section}{\numberline {6.19}until}{18}{}%
|
||||
\contentsline {section}{\numberline {6.20}while}{19}{}%
|
||||
\contentsline {section}{\numberline {6.21}whiledir}{19}{}%
|
||||
\contentsline {section}{\numberline {6.22}whilerow}{19}{}%
|
||||
\contentsline {section}{\numberline {6.23}write}{19}{}%
|
||||
|
26
JetCore.txt
26
JetCore.txt
@ -1,4 +1,5 @@
|
||||
\documentclass{book}
|
||||
|
||||
\title{JET Extension Tags}
|
||||
\author{Bradford Matthew Arant Sr.}
|
||||
\date{\today}
|
||||
@ -28,8 +29,8 @@ to perform the desired function and affect the output.
|
||||
Tag attributes are used to pass parameters into the operations and
|
||||
functionality for each tag.
|
||||
|
||||
Outputting a database from mysql may be performed using the <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}
|
||||
|
||||
|
@ -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() {}
|
||||
|
||||
}
|
@ -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
|
58
Operand.cpp
58
Operand.cpp
@ -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);
|
||||
|
@ -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
13
TODO.txt
Normal 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
156
Tag.cpp
@ -1,6 +1,5 @@
|
||||
#include "Tag.h"
|
||||
#include "Exception.h"
|
||||
#include "KeywordValue.h"
|
||||
#include "Global.h"
|
||||
#include "__mysql.h"
|
||||
#include "__sql.h"
|
||||
@ -25,6 +24,7 @@
|
||||
#include "__dotag.h"
|
||||
#include "__stream.h"
|
||||
#include "__dump.h"
|
||||
#include "Operand.h"
|
||||
#include <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
14
Tag.h
@ -14,12 +14,15 @@ namespace jet {
|
||||
Tag(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent = NULL, Tag *local = NULL, coreutils::ZString splitTagName = "");
|
||||
virtual ~Tag();
|
||||
|
||||
void resolveKeyword(coreutils::ZString keyword);
|
||||
coreutils::MString getVariable(coreutils::ZString &variable, bool inContainer = false);
|
||||
|
||||
coreutils::MString resolveKeyword(coreutils::ZString keyword);
|
||||
std::map<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);
|
||||
};
|
||||
|
||||
}
|
||||
|
27
__call.cpp
27
__call.cpp
@ -14,16 +14,14 @@ namespace jet {
|
||||
throw coreutils::Exception("call tag cannot have a container.");
|
||||
if(!keywordDefined("pgm"))
|
||||
throw coreutils::Exception("pgm keyword must be specified.");
|
||||
resolveKeyword("pgm");
|
||||
for(ix = 0; ix <= 50; ++ix)
|
||||
argv[ix] = NULL;
|
||||
argv[0] = keywords["pgm"].c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
|
||||
argv[0] = resolveKeyword("pgm").c_str(); // TODO: Need to peel off the program name only and pass as argv[0].
|
||||
for(ix = 1; ix <= 50; ++ix) {
|
||||
coreutils::MString arg("arg");
|
||||
arg << ix;
|
||||
if(keywordDefined(arg)) {
|
||||
resolveKeyword(arg);
|
||||
argv[ix] = keywords[arg].c_str();
|
||||
argv[ix] = resolveKeyword(arg).c_str();
|
||||
} else
|
||||
break;
|
||||
}
|
||||
@ -33,8 +31,7 @@ namespace jet {
|
||||
close(fdo[0]);
|
||||
dup2(fdo[1], 1);
|
||||
if(keywordDefined("input")) {
|
||||
resolveKeyword("input");
|
||||
coreutils::ZString input(variables["input"]);
|
||||
coreutils::MString input(resolveKeyword("input"));
|
||||
pipe(fdi);
|
||||
if(fork() == 0) {
|
||||
close(fdi[0]);
|
||||
@ -45,28 +42,20 @@ namespace jet {
|
||||
close(fdi[1]);
|
||||
dup2(fdi[0], 0);
|
||||
}
|
||||
rc = execvpe(variables["pgm"].c_str(), argv, global.envp);
|
||||
rc = execvpe(resolveKeyword("pgm").c_str(), argv, global.envp);
|
||||
close(fdo[1]);
|
||||
exit(errno);
|
||||
}
|
||||
close(fdo[1]);
|
||||
if(keywordDefined("name")) {
|
||||
resolveKeyword("name");
|
||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||
global.variables[keywords["name"]].read(fdo[0]);
|
||||
else if(keywords["scope"] == "local")
|
||||
this->local->variables[keywords["name"]].read(fdo[0]);
|
||||
else if(keywords["scope"] == "parent")
|
||||
this->local->parent->local->variables[keywords["name"]].read(fdo[0]);
|
||||
else
|
||||
throw coreutils::Exception("scope value is not valid.");
|
||||
|
||||
coreutils::MString value;
|
||||
value.read(fdo[0]);
|
||||
storeVariable(resolveKeyword("name"), value, resolveKeyword("scope"));
|
||||
} else
|
||||
out.read(fdo[0]);
|
||||
waitpid(pid, &status, 0);
|
||||
if(keywordDefined("error")) {
|
||||
resolveKeyword("error");
|
||||
global.variables[keywords["error"]] = (status >> 8 & 255);
|
||||
global.variables[resolveKeyword("error")] = (status >> 8 & 255);
|
||||
}
|
||||
}
|
||||
|
||||
|
10
__cookie.cpp
10
__cookie.cpp
@ -18,21 +18,19 @@ namespace jet {
|
||||
throw coreutils::Exception("header tag cannot have both expr and value.");
|
||||
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
||||
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
||||
resolveKeyword("name");
|
||||
if(keywordDefined("expr")) {
|
||||
if(keywordDefined("eval"))
|
||||
throw coreutils::Exception("Cannot use eval with expr.");
|
||||
global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||
global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;
|
||||
} else if(hasContainer) {
|
||||
processContainer(container);
|
||||
if(evaluate) {
|
||||
global.headers[keywords["name"]] = out;
|
||||
global.headers[keywords[resolveKeyword("name")]] = out;
|
||||
} else {
|
||||
global.headers[keywords["name"]] = container;
|
||||
global.headers[keywords[resolveKeyword("name")]] = container;
|
||||
}
|
||||
} else {
|
||||
resolveKeyword("value");
|
||||
global.headers[keywords["Set-Cookie"]] = keywords["value"];
|
||||
global.headers[keywords["Set-Cookie"]] = keywords[resolveKeyword("value")];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
29
__for.cpp
29
__for.cpp
@ -8,28 +8,23 @@ namespace jet {
|
||||
double counter = 0.0f;
|
||||
bool nameDefined = keywordDefined("name");
|
||||
if(keywordDefined("start")) {
|
||||
resolveKeyword("start");
|
||||
counter = keywords["start"].asDouble();
|
||||
counter = resolveKeyword("start").asDouble();
|
||||
keywords["start"].reset();
|
||||
}
|
||||
if(keywordDefined("end"))
|
||||
resolveKeyword("end");
|
||||
else
|
||||
if(!keywordDefined("end"))
|
||||
throw coreutils::Exception("for tag requires end keyword.");
|
||||
if(keywordDefined("step"))
|
||||
resolveKeyword("step");
|
||||
else
|
||||
if(!keywordDefined("step"))
|
||||
throw coreutils::Exception("for tag requires step keyword.");
|
||||
for(double ix = counter; ix <= variables["end"].asDouble(); ix += variables["step"].asDouble()) {
|
||||
keywords["end"].reset();
|
||||
keywords["step"].reset();
|
||||
for(double ix = counter; ix <= resolveKeyword("end").asDouble(); ix += resolveKeyword("step").asDouble()) {
|
||||
resolveKeyword("end").reset();
|
||||
resolveKeyword("step").reset();
|
||||
if(nameDefined) {
|
||||
if(!keywordDefined("scope") || (keywords["scope"] == "global"))
|
||||
global.variables[keywords["name"]] = ix;
|
||||
else if(keywords["scope"] == "local")
|
||||
this->local->variables[keywords["name"]] = ix;
|
||||
else if(keywords["scope"] == "parent")
|
||||
parent->local->variables[keywords["name"]] = ix;
|
||||
if(!keywordDefined("scope") || (resolveKeyword("scope") == "global"))
|
||||
global.variables[resolveKeyword("name")] = ix;
|
||||
else if(resolveKeyword("scope") == "local")
|
||||
this->local->variables[resolveKeyword("name")] = ix;
|
||||
else if(resolveKeyword("scope") == "parent")
|
||||
parent->local->variables[resolveKeyword("name")] = ix;
|
||||
else
|
||||
throw coreutils::Exception("scope value is not valid.");
|
||||
}
|
||||
|
14
__header.cpp
14
__header.cpp
@ -17,21 +17,19 @@ namespace jet {
|
||||
throw coreutils::Exception("header tag cannot have both expr and value.");
|
||||
if(!keywordDefined("expr") && !keywordDefined("value") && !hasContainer)
|
||||
throw coreutils::Exception("header tag must have a value, expr or a container.");
|
||||
resolveKeyword("name");
|
||||
if(keywordDefined("expr")) {
|
||||
if(keywordDefined("eval"))
|
||||
throw coreutils::Exception("Cannot use eval with expr.");
|
||||
global.headers[keywords["name"]] = Operand(keywords["expr"], global, parent->variables, keywords).string;
|
||||
global.headers[keywords[resolveKeyword("name")]] = Operand(keywords["expr"], *this).string;
|
||||
} else if(hasContainer) {
|
||||
processContainer(container);
|
||||
if(evaluate) {
|
||||
global.headers[keywords["name"]] = out;
|
||||
global.headers[keywords[resolveKeyword("name")]] = out;
|
||||
} else {
|
||||
global.headers[keywords["name"]] = container;
|
||||
global.headers[keywords[resolveKeyword("name")]] = container;
|
||||
}
|
||||
} else {
|
||||
resolveKeyword("value");
|
||||
global.headers[keywords["name"]] = keywords["value"];
|
||||
}
|
||||
} else
|
||||
global.headers[keywords[resolveKeyword("name")]] = keywords[resolveKeyword("value")];
|
||||
|
||||
}
|
||||
}
|
||||
|
30
__if.cpp
30
__if.cpp
@ -9,7 +9,6 @@ namespace jet {
|
||||
coreutils::MString result;
|
||||
bool booleanResult = false;
|
||||
if(keywordDefined("value1")) {
|
||||
resolveKeyword("value1");
|
||||
if(keywordDefined("expr"))
|
||||
throw coreutils::Exception("Either value1 or expr can be specified but not both.");
|
||||
if(keywordDefined("value2")) {
|
||||
@ -17,24 +16,31 @@ namespace jet {
|
||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||
} else
|
||||
throw coreutils::Exception("value2 required if value1 specified.");
|
||||
resolveKeyword("value2");
|
||||
resolveKeyword("type");
|
||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
||||
((keywords["type"] == "le") && (rc != 1)) ||
|
||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
||||
((keywords["type"] == "ge") && (rc != -1)))
|
||||
coreutils::MString type = resolveKeyword("type");
|
||||
if((type != "eq") &&
|
||||
(type != "ne") &&
|
||||
(type != "lt") &&
|
||||
(type != "le") &&
|
||||
(type != "gt") &&
|
||||
(type != "ge"))
|
||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||
int rc = resolveKeyword("value1").compare(resolveKeyword("value2"));
|
||||
std::cout << "if: " << resolveKeyword("value1") << " " << type << " " << resolveKeyword("value2") << ":" << rc << std::endl;
|
||||
if(((type == "eq") && (rc == 0)) ||
|
||||
((type == "ne") && (rc != 0)) ||
|
||||
((type == "lt") && (rc == -1)) ||
|
||||
((type == "le") && (rc != 1)) ||
|
||||
((type == "gt") && (rc == 1)) ||
|
||||
((type == "ge") && (rc != -1)))
|
||||
booleanResult = true;
|
||||
else
|
||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||
booleanResult = false;
|
||||
} else if(keywordDefined("expr")) {
|
||||
if(keywordDefined("value2"))
|
||||
throw coreutils::Exception("value2 should not be specified with expr.");
|
||||
if(keywordDefined("type"))
|
||||
throw coreutils::Exception("type should not be specified with expr.");
|
||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
||||
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||
}
|
||||
if(booleanResult)
|
||||
processContainer(container);
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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"));
|
||||
|
14
__mysql.cpp
14
__mysql.cpp
@ -14,19 +14,17 @@ namespace jet {
|
||||
throw coreutils::Exception("user must be specified for mysql tag.");
|
||||
if(!keywordDefined("password"))
|
||||
throw coreutils::Exception("password must be specified for mysql tag.");
|
||||
|
||||
resolveKeyword("host");
|
||||
resolveKeyword("database");
|
||||
resolveKeyword("user");
|
||||
resolveKeyword("password");
|
||||
resolveKeyword("sessionid");
|
||||
|
||||
sessionId = keywords["sessionid"];
|
||||
sessionId = keywords[resolveKeyword("sessionid")];
|
||||
|
||||
global.addSession(sessionId, this);
|
||||
|
||||
mysql = mysql_init(NULL);
|
||||
mysql = mysql_real_connect(mysql, keywords["host"].c_str(), keywords["user"].c_str(), keywords["password"].c_str(), keywords["database"].c_str(), 0, NULL, 0);
|
||||
mysql = mysql_real_connect(mysql,
|
||||
keywords[resolveKeyword("host")].c_str(),
|
||||
keywords[resolveKeyword("user")].c_str(),
|
||||
keywords[resolveKeyword("password")].c_str(),
|
||||
keywords[resolveKeyword("database")].c_str(), 0, NULL, 0);
|
||||
|
||||
if(!mysql)
|
||||
throw coreutils::Exception("database and host parameters are not valid.");
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
43
__set.cpp
43
__set.cpp
@ -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"));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
30
__until.cpp
30
__until.cpp
@ -21,13 +21,13 @@ namespace jet {
|
||||
if(!keywordDefined("type"))
|
||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||
|
||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
||||
((keywords["type"] == "le") && (rc != 1)) ||
|
||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
||||
((keywords["type"] == "ge") && (rc != -1)))
|
||||
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||
booleanResult = true;
|
||||
else
|
||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||
@ -47,16 +47,16 @@ namespace jet {
|
||||
keywords["expr"].reset();
|
||||
keywords["expr"] = exprSaved;
|
||||
resolveKeyword("expr");
|
||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
||||
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||
} else {
|
||||
booleanResult = false;
|
||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
||||
((keywords["type"] == "le") && (rc != 1)) ||
|
||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
||||
((keywords["type"] == "ge") && (rc != -1)))
|
||||
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||
booleanResult = true;
|
||||
}
|
||||
} while(booleanResult);
|
||||
|
32
__while.cpp
32
__while.cpp
@ -21,13 +21,13 @@ namespace jet {
|
||||
if(!keywordDefined("type"))
|
||||
throw coreutils::Exception("type expected if value1 and value2 specified.");
|
||||
|
||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
||||
((keywords["type"] == "le") && (rc != 1)) ||
|
||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
||||
((keywords["type"] == "ge") && (rc != -1)))
|
||||
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||
booleanResult = true;
|
||||
else
|
||||
throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'.");
|
||||
@ -39,7 +39,7 @@ namespace jet {
|
||||
throw coreutils::Exception("type should not be specified with expr.");
|
||||
exprMethod = true;
|
||||
exprSaved = keywords["expr"];
|
||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
||||
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||
}
|
||||
while(booleanResult) {
|
||||
processContainer(container);
|
||||
@ -47,16 +47,16 @@ namespace jet {
|
||||
if(exprMethod) {
|
||||
keywords["expr"].reset();
|
||||
keywords["expr"] = exprSaved;
|
||||
booleanResult = Operand(keywords["expr"], global, parent->variables, keywords).boolean;
|
||||
booleanResult = Operand(keywords["expr"], *this).boolean;
|
||||
} else {
|
||||
booleanResult = false;
|
||||
int rc = keywords["value1"].compare(keywords["value2"]);
|
||||
if(((keywords["type"] == "eq") && (rc == 0)) ||
|
||||
((keywords["type"] == "ne") && (rc != 0)) ||
|
||||
((keywords["type"] == "lt") && (rc == -1)) ||
|
||||
((keywords["type"] == "le") && (rc != 1)) ||
|
||||
((keywords["type"] == "gt") && (rc == 1)) ||
|
||||
((keywords["type"] == "ge") && (rc != -1)))
|
||||
int rc = keywords[resolveKeyword("value1")].compare(keywords[resolveKeyword("value2")]);
|
||||
if(((keywords[resolveKeyword("type")] == "eq") && (rc == 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "ne") && (rc != 0)) ||
|
||||
((keywords[resolveKeyword("type")] == "lt") && (rc == -1)) ||
|
||||
((keywords[resolveKeyword("type")] == "le") && (rc != 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "gt") && (rc == 1)) ||
|
||||
((keywords[resolveKeyword("type")] == "ge") && (rc != -1)))
|
||||
booleanResult = true;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
10
__write.cpp
10
__write.cpp
@ -14,7 +14,6 @@ namespace jet {
|
||||
processContainer(container);
|
||||
if(!keywordDefined("file"))
|
||||
throw coreutils::Exception("write tag must have file defined.");
|
||||
resolveKeyword("file");
|
||||
if(!keywordDefined("expr") && keywordDefined("value") && hasContainer)
|
||||
throw coreutils::Exception("write tag cannot have both value and a container.");
|
||||
if(keywordDefined("expr") && !keywordDefined("value") && hasContainer)
|
||||
@ -25,20 +24,19 @@ namespace jet {
|
||||
throw coreutils::Exception("write tag must have a value, expr or a container.");
|
||||
if(!keywordDefined("mode"))
|
||||
throw coreutils::Exception("write tag must have a mode keyword.");
|
||||
resolveKeyword("mode");
|
||||
if(keywords["mode"] == "append")
|
||||
if(keywords[resolveKeyword("mode")] == "append")
|
||||
mode = O_APPEND;
|
||||
else if(keywords["mode"] == "overwrite")
|
||||
else if(keywords[resolveKeyword("mode")] == "overwrite")
|
||||
mode = O_TRUNC;
|
||||
else
|
||||
throw coreutils::Exception("mode keyword must be 'overwrite' or 'append'.");
|
||||
int fd = open(keywords["file"].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
|
||||
int fd = open(keywords[resolveKeyword("file")].c_str(), mode, 0644); // TODO: Need to add O_CREAT and AUTH flags.
|
||||
if(hasContainer && !evaluate)
|
||||
len = write(fd, container.getData(), container.getLength());
|
||||
else if(hasContainer && evaluate)
|
||||
len = write(fd, out.getData(), out.getLength());
|
||||
else if(!hasContainer && keywordDefined("value"))
|
||||
len = write(fd, variables["value"].getData(), keywords["value"].getLength());
|
||||
len = write(fd, variables[resolveKeyword("value")].getData(), keywords[resolveKeyword("value")].getLength());
|
||||
else if(!hasContainer && keywordDefined("expr"))
|
||||
len = write(fd, keywords["expr"].getData(), keywords["expr"].getLength());
|
||||
close(fd);
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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" />
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!../jet-2.0
|
||||
<upload name="imagefiledata" path="images/%name" />
|
||||
<jet cgi="true">
|
||||
$[:name]
|
||||
$[:name:1]
|
||||
|
117
tmp.aux
117
tmp.aux
@ -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
376
tmp.log
@ -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
56
tmp.out
@ -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
|
56
tmp.toc
56
tmp.toc
@ -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}%
|
Loading…
x
Reference in New Issue
Block a user