diff --git a/SessionId.cpp b/SessionId.cpp new file mode 100644 index 0000000..7244ee6 --- /dev/null +++ b/SessionId.cpp @@ -0,0 +1,16 @@ +#include "SessionId.h" + +namespace jet { + + SessionId::SessionId() { + unsigned char hashit[64]; + unsigned char hash[SHA_DIGEST_LENGTH]; + setBufferSize(64); + sprintf((char *)hashit, "JETSESSION%ld", time(0)); + SHA1(hashit, strlen((char *)hashit), hash); + sprintf(getData(), "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", + hash[0], hash[1], hash[2], hash[3], hash[4], hash[5], hash[6], hash[7], hash[8], hash[9], + hash[10], hash[11], hash[12], hash[13], hash[14], hash[15], hash[16], hash[17], hash[18], hash[19]); + } + +} diff --git a/SessionId.h b/SessionId.h new file mode 100644 index 0000000..0dee5a2 --- /dev/null +++ b/SessionId.h @@ -0,0 +1,16 @@ +#ifndef __SessionId_h__ +#define __SessionId_h__ + +#include "MString.h" + +namespace jet { + + class SessionId : public coreutils::MString { + + public: + SessionId(); + + }; +} + +#endif \ No newline at end of file diff --git a/__exclude.cpp b/__exclude.cpp new file mode 100644 index 0000000..0b16873 --- /dev/null +++ b/__exclude.cpp @@ -0,0 +1,13 @@ +#include "__exclude.h" +#include "Exception.h" + +namespace jet { + + __exclude::__exclude(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local) : Tag(in, parentOut, global, parent, this) { + if(!hasContainer) + throw coreutils::Exception("exclude must have a container."); + output = true; + evaluate = false; + } + +} diff --git a/__exclude.h b/__exclude.h new file mode 100644 index 0000000..77cbd95 --- /dev/null +++ b/__exclude.h @@ -0,0 +1,17 @@ +#ifndef ____exclude_h__ +#define ____exclude_h__ + +#include "Tag.h" + +namespace jet { + + class __exclude : public Tag { + + public: + __exclude(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent, Tag *local); + + }; + +} + +#endif diff --git a/docs/JetCore.aux b/docs/JetCore.aux new file mode 100644 index 0000000..3a60a28 --- /dev/null +++ b/docs/JetCore.aux @@ -0,0 +1,59 @@ +\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} diff --git a/docs/JetCore.dvi b/docs/JetCore.dvi new file mode 100644 index 0000000..1d25976 Binary files /dev/null and b/docs/JetCore.dvi differ diff --git a/docs/JetCore.log b/docs/JetCore.log new file mode 100644 index 0000000..59cd379 --- /dev/null +++ b/docs/JetCore.log @@ -0,0 +1,186 @@ +This is e-pTeX, Version 3.141592653-p4.1.0-230214-2.6 (utf8.euc) (TeX Live 2023/Debian) (preloaded format=ptex 2025.1.13) 30 APR 2025 16:16 + restricted \write18 enabled. + %&-line parsing enabled. +**JetCore.txt +(./JetCore.txt +! Undefined control sequence. +l.1 \documentclass + {book} +? +! Undefined control sequence. +l.3 \title + {JET Extension Tags} +? q +OK, entering \batchmode... +! Undefined control sequence. +l.4 \author + {Bradford Matthew Arant Sr.} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.5 \date + {\today} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.5 \date{\today + } +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.7 \begin + {document} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.9 \maketitle + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.11 \tableofcontents + +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.13 \chapter + {Introduction} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.23 \chapter + {Tags and Attributes} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.32 ...e from mysql may be performed using the \< + mysql\> tag +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Missing $ inserted. + + $ + + \mskip +\>->\mskip + \medmuskip +l.32 ...mysql may be performed using the \ + tag +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + +! Undefined control sequence. +l.33 in combination with the \< + ifrow\>, \ and \ tags. +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.33 in combination with the \, \< + whilerow\> and \ tags. +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.33 ...on with the \, \ and \< + sql\> tags. +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Missing $ inserted. + + $ + + \par +l.34 + +I've inserted a begin-math/end-math symbol since I think +you left one out. Proceed, with fingers crossed. + + +Overfull \hbox (81.87863pt too wide) in paragraph at lines 32--34 +[]\tenrm Outputting a database from mysql may be per-formed us-ing the mysql$ \ +teni tagincombinationwiththeifrow ; whilerow andsql tags:$ | + +\hbox(6.94444+1.94444)x469.75499, glue set - 1.0 +.\hbox(0.0+0.0)x20.0 +.\displace 0.0 +.\tenrm O +.\tenrm u +.\tenrm t +.etc. + +! Undefined control sequence. +l.35 \section + {User Defined Tags and Tag Liraries} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.66 \chapter + {Variables and Variable Types} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + +! Undefined control sequence. +l.78 \begin + {itemize} +The control sequence at the end of the top line +of your error message was never \def'ed. If you have +misspelled it (e.g., `\hobx'), type `I' and the correct +spelling (e.g., `I\hbox'). Otherwise just continue, +and I'll forget about whatever was undefined. + + [1] ) +Output written on JetCore.dvi (1 page, 3708 bytes). diff --git a/docs/JetCore.pdf b/docs/JetCore.pdf new file mode 100644 index 0000000..134e07c Binary files /dev/null and b/docs/JetCore.pdf differ diff --git a/docs/JetCore.toc b/docs/JetCore.toc new file mode 100644 index 0000000..d450647 --- /dev/null +++ b/docs/JetCore.toc @@ -0,0 +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}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}{}% diff --git a/docs/JetCore.txt b/docs/JetCore.txt new file mode 100644 index 0000000..2ba16e3 --- /dev/null +++ b/docs/JetCore.txt @@ -0,0 +1,482 @@ +\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 \ tag +in combination with the \, \ and \ 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 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 is processed before the container containing the + 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 tag containing the document or + 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 + +\section{Session Control} + +Common use of the CGI is requiring the transaction based interaction +of a web browser to maintain a state between interactions. JET 2.0 +provides a built in mechanism to assist in managing a session concept. +This approach uses a single session cookie to identify the session to +the back end services. + +By specifying a seesiondir keyword on the tag you enable the +session control functionality. Upon the delivery of a request that +does not contain a session 'token' a session token will be generated +for the request and a cookie will be returned in the reponse +containing the session token. Additionally, a session file is placed +into the directory named after the token. Captured session data will +become available to future requests coming into the server and made +available through the variable formats for the session. + +The tag will also have an additional scope value that can be +used to store the value in the session. This is scope="session". + + + +\chapter{Tag Reference} + +This chapter will cover all the tags and parameters required to +perform the operations that JET provides. + +A special character sequence is used to exclude a section from tag and +variable parsing. This sequence is |> this is not parsed or resolved +<|. This takes affect through all levels and depths of tag processing +and is different from the tag as exclude may be further +parsed if output is again evaluated. + +\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} + +\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{exclude} + +Use the exclude tag to exclude a conainer contents from normal parsing +and variable resolution. + +\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} \ No newline at end of file diff --git a/docs/JetCore.txt.pdf b/docs/JetCore.txt.pdf new file mode 100644 index 0000000..062875b Binary files /dev/null and b/docs/JetCore.txt.pdf differ