Merge branch 'master' of ssh://barant.com/git/JetCore

This commit is contained in:
brad Arant 2025-05-01 19:02:25 -07:00
commit ddf0595fb1
8 changed files with 18 additions and 680 deletions

View File

@ -1,59 +0,0 @@
\relax
\@writefile{toc}{\contentsline {chapter}{\numberline {1}Introduction}{5}{}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@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}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@ }}
\@writefile{toc}{\contentsline {section}{\numberline {4.1}Operators}{11}{}\protected@file@percent }
\@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}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@ }}
\@writefile{toc}{\contentsline {chapter}{\numberline {6}Tag Reference}{15}{}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@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}cookie}{15}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.4}dump}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.5}expr}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.6}for}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.7}header}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.8}if/else}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.10}include}{17}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.11}jet}{17}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.12}mysql}{17}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.13}read}{17}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.14}set}{17}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.15}sql}{18}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.16}stream}{18}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.17}system}{18}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.18}tag}{18}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.19}until}{18}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.20}while}{19}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.21}whiledir}{19}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.22}whilerow}{19}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {6.23}write}{19}{}\protected@file@percent }
\gdef \@abspage@last{19}

View File

@ -1,122 +0,0 @@
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.
%&-line parsing enabled.
**JetCore.txt
(./JetCore.txt
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)

Binary file not shown.

View File

@ -1,45 +0,0 @@
\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}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}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}cookie}{15}{}%
\contentsline {section}{\numberline {6.4}dump}{16}{}%
\contentsline {section}{\numberline {6.5}expr}{16}{}%
\contentsline {section}{\numberline {6.6}for}{16}{}%
\contentsline {section}{\numberline {6.7}header}{16}{}%
\contentsline {section}{\numberline {6.8}if/else}{16}{}%
\contentsline {section}{\numberline {6.9}ifrow/else}{16}{}%
\contentsline {section}{\numberline {6.10}include}{17}{}%
\contentsline {section}{\numberline {6.11}jet}{17}{}%
\contentsline {section}{\numberline {6.12}mysql}{17}{}%
\contentsline {section}{\numberline {6.13}read}{17}{}%
\contentsline {section}{\numberline {6.14}set}{17}{}%
\contentsline {section}{\numberline {6.15}sql}{18}{}%
\contentsline {section}{\numberline {6.16}stream}{18}{}%
\contentsline {section}{\numberline {6.17}system}{18}{}%
\contentsline {section}{\numberline {6.18}tag}{18}{}%
\contentsline {section}{\numberline {6.19}until}{18}{}%
\contentsline {section}{\numberline {6.20}while}{19}{}%
\contentsline {section}{\numberline {6.21}whiledir}{19}{}%
\contentsline {section}{\numberline {6.22}whilerow}{19}{}%
\contentsline {section}{\numberline {6.23}write}{19}{}%

View File

@ -1,452 +0,0 @@
\documentclass{book}
\title{JET Extension Tags}
\author{Bradford Matthew Arant Sr.}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\chapter{Introduction}
JET will pass through the untagged areas to the output without any
modifications. Data contained within the tags may modify their
containers before placing any output. The space taken by the tag
itself is not passed to the output and will not appear in the output.
Skip Blank Lines options on containers will skip passing any blank
lines or line containing only whitespace to the output.
\chapter{Tags and Attributes}
XML style tagging is used to insert functions and other behaviors into
the script. As the document contents are output a tag may be inserted
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.
\section{User Defined Tags and Tag Liraries}
You can define your own tag definitions and use them within your JET
scripts.
Keywords are not defined as part of the tag definition and any
attribute added to the implementation of the tag is passed into the
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
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.
unscoped - local variables are shared with the parent tag environment
and are not unique to your tag definition.
A <container /> tag can be inserted into the container and will take
the contents of the container at runtime and insert it into the output
when processing the user defined tag definition. The container tag of
the the <container /> is processed before the container containing the
<container /> so that local variabls can be set and processed that
will affect the tags overall output.
Tags are many times nested with tags running within the container of a
higher tag.
\chapter{Variables and Variable Types}
Variables are used to contain dynamic content values and can be
sourced from several locations and limited in scope depending on use.
Some variable types can be set to reflect script state or are read
only from other outside sources of data.
Jet tags can be either scoped or unscoped.
The following is a list of
variable types and a brief description of their source:
\begin{itemize}
\item Global - values can be initiaized using the set tag and
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}
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}
\section{CGI Variables}
When operating Jet in CGI mode you have access to the form data
submitted by the remote client (usually a browser or curl request)
using the POST method.
\chapter{Expressions}
Expressions are used to perform complicated calculations (arithmetic), perform
comparisons between values (boolean), manipulate strings (string) or
perform operations on dates (date).
\section{Operators}
Operators are used to perform arithmetic or boolean operations on
arguments to derive a particular result. There are two types of
operators, as follows:
\begin{itemize}
\item Arithmetic -
\item Boolean -
\end{itemize}
\subsection{Arithmentic Operators}
\subsection{Boolean Operators}
\section{Function Reference}
\subsection{concat}
\subsection{integer}
\subsection{left}
\subsection{random}
Use the random function to return a random number between 0 and 1.
\subsection{round}
Use the round function to round a numeric value to the specified
number of digits after the decimal point.
\subsection{substring}
Use the substring operation to extract a portion of a string and return
the value as a string.
\chapter{Common Gateway Interface Features}
JET extension tags provides options for enabling the processing of
data using the Common Gateway Interface (CGI) specification used by
Apache and NGINX as well as other HTTP server applications. This makes
JET a powerful tool for creating web interfaces and API handler
environments for various javascript frameworks as well as just native
HTML style interaction.
To enable the CGI features within a requested document you can specify
the cgi="true" attribute on a <jet> tag containing the document or
<jet /> tag contained within the document.
When you enable the CGI interface the script will look for specific
environment variables used to retrieve the input data from the browser
interface and automatically provide these values to the JET scripting
using the variables interface. There are currently three supported
data formats or content types through this interface. These content
types are:
formdata/urlencoded
mutipart/formdata
text/json
\chapter{Tag Reference}
This chapter will cover all the tags and parameters required to
perform the operations that JET provides.
\section{call}
Use the call tag to evoke an executable file from a jet script.
The atrributes are:
pgm
argn
name
input
error
The call tag is unscoped.
\begin{verbatim}
<call pgm="ls" arg1="-al" name="listing" />
\end{verbatim}
will call the ls command with parameter -al and place the output into
a variable named 'listing'.
\section{comment}
Use the comment tag to create a section in the jet script that can be
used for making comments and is ignored by the jet reader.
The comments tag has no attributes.
\section{cookie}
Use the cookie tag to specify a cookie when using the CGI features
of JET.
\section{dump}
Use the dump tag to display the contents of all the global, local and
cgi cariables to a specified file.
The attributes are:
file
\section{expr}
\section{for}
Use the for tag to iterate a tag container for a logical number of
times.
The attributes are:
start
end
step
name - defines a name for the iterator that will be available within
the loop.
scope - defines the scope of the iterator for the loop.
\section{header}
Use the header tag to output a header prior to outputting the process
buffer to the requester.
The attributes are:
name
expr
value
container
\section{if/else}
Use the if tag to perform a conditional output on the tag container.
An optional else container provides alternate output in the event the
condition is not met.
The attributes are:
value1
value2
type
expr
\section{ifrow/else}
Use the ifrow tag to output the tag container if a row exists in the
mysql tag. An optional else container provides alternate output in the
event that there is no row for the sql result.
The attributes are:
sessionid
\section{include}
Use the include tag to include another content file at the location of
the include tag.
The attributes are:
file
\section{jet}
Use the jet tag to specify parameters for the jet parsing session and
to control the output options.
\section{mysql}
Use the mysql tag to specify parameters for connecting to a mysql
server. The container of the tag is where you can specify the sql
statement and method of processing the result output of the executed
sql statement. The mysql session created is valid only withon the
container of this tag.
The attributes are:
host
database
user
password
sessionid
\section{read}
Use the read tag to read the contents of a file contained on the local
file system into a variable for further output or processing.
The attributes are:
file
name
\section{set}
Use the set tag to store initialize a variable to a value contained in
a value attribute, the result of an expression (expr) attribute or the
contents of the set tag container.
The attributes are:
name
expr
value
container
scope
\section{sql}
Use the sql tag to specify an sql statement to run on the sql server
specified in the mysql tag.
As long as sql statements are executed within the same mysql
containing tag then the same mysql session is used for each sql
statement.
The attributes are:
sessionid
container
\section{stream}
Use stream tag to output data from the server without waiting for the
standard output buffering and processing of the JET script. This is
useful for outputting images and streams for audio and video without
the server having to load the whole thing into RAM first.
The attributes are:
file
\section{system}
Use the system tag to execute a bash shell command within the JET
script.
\section{tag}
Use the tag tag to define a new tag definition for use within the
script.
Tags are normally defined globally and can be used anywhere within the
script.
Tags can also be defined within other tags and the scope of those tags
is only within the defining tag's container. The enclosed tag
definition will not be available globally.
\section{until}
Use the until tag to process a container at least once and
continue to process the container until the specified condition is met.
Note that this tag always processes the container at least once.
Be careful not to create a never ending loop by not modifying any of
the condition parameters specified in the condition clause.
\section{while}
Use the while tag to process a container if the specified condition is
true.
Note that the container may not be processed if the condition is never
met.
Be careful not to create a never ending loop by not modifying any of
the condition parameters specified in the condition clause.
\section{whiledir}
Use the whiledir tag to loop a directory path to the container for
processing.
\section{whilerow}
Use the whilerow tag in combination with mysql and sql tags to provide
a container to process for each row retrieved by the sql statement.
\section{write}
Use the write tag to write data to the local file system.
\end{document}

16
Tag.cpp
View File

@ -5,6 +5,7 @@
#include "__sql.h"
#include "__whilerow.h"
#include "__comment.h"
#include "__exclude.h"
#include "__for.h"
#include "__if.h"
#include "__ifrow.h"
@ -134,7 +135,17 @@ namespace jet {
coreutils::ZString tag;
char *start = in.getCursor();
while(!in.eod()) {
if(in.startsWith("<")) {
if(in.ifNext("|>")) {
out.write("|>");
char ch = in.nextChar();
while(!in.ifNext("<|")) {
out.write(ch);
ch = in.nextChar();
}
out.write(ch);
out.write("<|");
continue;
} else if(in.startsWith("<")) {
if(ifTagName(in, "mysql")) {
__mysql _mysql(in, out, global, this, local);
continue;
@ -159,6 +170,9 @@ namespace jet {
} else if(ifTagName(in, "include")) {
__include _include(in, out, global, this, local);
continue;
} else if(ifTagName(in, "exclude")) {
__exclude _exclude(in, out, global, this, local);
continue;
} else if(ifTagName(in, "jet")) {
__jet _jet(in, out, global, this, local);
continue;

View File

@ -25,6 +25,8 @@
<set name="nested" expr="(2*(4+4)/$[divisor])*32" />
<set name="error" value="$[nested]" />
$[nested]
|>This should be passed $[error] by the parser without parsing.
<set name="pass" value="not set" /><|
<set name="numbers">0123456789</set>
$[numbers]
<set name="exprnumbers" expr="$[numbers]" />