aboutsummaryrefslogtreecommitdiff
path: root/doc/latex
diff options
context:
space:
mode:
authorSilvio <silvio@devlet.com.br>2010-08-20 15:39:56 -0300
committerSilvio <silvio@devlet.com.br>2010-08-20 15:39:56 -0300
commitb879f0fcc8651b49ae46a6db64d7eb1a27c7af1a (patch)
tree5fd92d1ec675d64bf1a79e8f246a99c2e47f8e2b /doc/latex
parent298ac8892db90e518da71540c8fab72f885d66ff (diff)
downloadcinisis-b879f0fcc8651b49ae46a6db64d7eb1a27c7af1a.tar.gz
cinisis-b879f0fcc8651b49ae46a6db64d7eb1a27c7af1a.tar.bz2
Adding generated docs
Diffstat (limited to 'doc/latex')
-rw-r--r--doc/latex/Makefile19
-rw-r--r--doc/latex/annotated.tex24
-rw-r--r--doc/latex/classBiblioIsisDb.eps197
-rw-r--r--doc/latex/classBiblioIsisDb.pdfbin0 -> 4432 bytes
-rw-r--r--doc/latex/classBiblioIsisDb.tex312
-rw-r--r--doc/latex/classCinIsis.tex100
-rw-r--r--doc/latex/classCinisis.tex185
-rw-r--r--doc/latex/classCinisisDb.tex170
-rw-r--r--doc/latex/classCinisisDisplayHelper.tex296
-rw-r--r--doc/latex/classCinisisHttpHelper.tex63
-rw-r--r--doc/latex/classIsisAudit.eps215
-rw-r--r--doc/latex/classIsisAudit.pdfbin0 -> 5896 bytes
-rw-r--r--doc/latex/classIsisAudit.tex31
-rw-r--r--doc/latex/classIsisConnector.eps215
-rw-r--r--doc/latex/classIsisConnector.pdfbin0 -> 5892 bytes
-rw-r--r--doc/latex/classIsisConnector.tex281
-rw-r--r--doc/latex/classIsisEntryIterator.tex68
-rw-r--r--doc/latex/classIsisFieldIterator.tex82
-rw-r--r--doc/latex/classIsisFinder.eps215
-rw-r--r--doc/latex/classIsisFinder.pdfbin0 -> 5893 bytes
-rw-r--r--doc/latex/classIsisFinder.tex84
-rw-r--r--doc/latex/classIsisItemIterator.tex68
-rw-r--r--doc/latex/classIsisMainItemIterator.tex82
-rw-r--r--doc/latex/classIsisMap.eps215
-rw-r--r--doc/latex/classIsisMap.pdfbin0 -> 5892 bytes
-rw-r--r--doc/latex/classIsisMap.tex261
-rw-r--r--doc/latex/classIsisMethodIterator.tex68
-rw-r--r--doc/latex/classIsisNormalItemFilterIterator.tex25
-rw-r--r--doc/latex/classIsisNormalSubfieldFilterIterator.tex25
-rw-r--r--doc/latex/classIsisReader.eps215
-rw-r--r--doc/latex/classIsisReader.pdfbin0 -> 5892 bytes
-rw-r--r--doc/latex/classIsisReader.tex157
-rw-r--r--doc/latex/classIsisRowIterator.tex68
-rw-r--r--doc/latex/classIsisSubfieldIterator.tex68
-rw-r--r--doc/latex/classIsisValueIterator.tex68
-rw-r--r--doc/latex/classMaleteDb.eps197
-rw-r--r--doc/latex/classMaleteDb.pdfbin0 -> 4661 bytes
-rw-r--r--doc/latex/classMaleteDb.tex179
-rw-r--r--doc/latex/classMateleDb.tex12
-rw-r--r--doc/latex/classPhpIsisDb.eps197
-rw-r--r--doc/latex/classPhpIsisDb.pdfbin0 -> 4491 bytes
-rw-r--r--doc/latex/classPhpIsisDb.tex192
-rw-r--r--doc/latex/classSchemaDb.tex69
-rw-r--r--doc/latex/doxygen.sty350
-rw-r--r--doc/latex/hierarchy.tex34
-rw-r--r--doc/latex/interfaceIsisDb.eps207
-rw-r--r--doc/latex/interfaceIsisDb.pdfbin0 -> 5431 bytes
-rw-r--r--doc/latex/interfaceIsisDb.tex123
-rw-r--r--doc/latex/refman.tex84
-rw-r--r--doc/latex/todo.tex20
50 files changed, 5541 insertions, 0 deletions
diff --git a/doc/latex/Makefile b/doc/latex/Makefile
new file mode 100644
index 0000000..8b7c89a
--- /dev/null
+++ b/doc/latex/Makefile
@@ -0,0 +1,19 @@
+all: clean refman.pdf
+
+pdf: refman.pdf
+
+refman.pdf: refman.tex
+ pdflatex refman.tex
+ makeindex refman.idx
+ pdflatex refman.tex
+ latex_count=5 ; \
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
+ do \
+ echo "Rerunning latex...." ;\
+ pdflatex refman.tex ;\
+ latex_count=`expr $$latex_count - 1` ;\
+ done
+
+
+clean:
+ rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf
diff --git a/doc/latex/annotated.tex b/doc/latex/annotated.tex
new file mode 100644
index 0000000..3091313
--- /dev/null
+++ b/doc/latex/annotated.tex
@@ -0,0 +1,24 @@
+\section{Class List}
+Here are the classes, structs, unions and interfaces with brief descriptions:\begin{DoxyCompactList}
+\item\contentsline{section}{\hyperlink{classBiblioIsisDb}{BiblioIsisDb} }{\pageref{classBiblioIsisDb}}{}
+\item\contentsline{section}{\hyperlink{classCinisis}{Cinisis} }{\pageref{classCinisis}}{}
+\item\contentsline{section}{\hyperlink{classCinisisDisplayHelper}{CinisisDisplayHelper} }{\pageref{classCinisisDisplayHelper}}{}
+\item\contentsline{section}{\hyperlink{classCinisisHttpHelper}{CinisisHttpHelper} }{\pageref{classCinisisHttpHelper}}{}
+\item\contentsline{section}{\hyperlink{classIsisAudit}{IsisAudit} }{\pageref{classIsisAudit}}{}
+\item\contentsline{section}{\hyperlink{classIsisConnector}{IsisConnector} }{\pageref{classIsisConnector}}{}
+\item\contentsline{section}{\hyperlink{interfaceIsisDb}{IsisDb} }{\pageref{interfaceIsisDb}}{}
+\item\contentsline{section}{\hyperlink{classIsisEntryIterator}{IsisEntryIterator} }{\pageref{classIsisEntryIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisFinder}{IsisFinder} }{\pageref{classIsisFinder}}{}
+\item\contentsline{section}{\hyperlink{classIsisItemIterator}{IsisItemIterator} }{\pageref{classIsisItemIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisMainItemIterator}{IsisMainItemIterator} }{\pageref{classIsisMainItemIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisMap}{IsisMap} }{\pageref{classIsisMap}}{}
+\item\contentsline{section}{\hyperlink{classIsisMethodIterator}{IsisMethodIterator} }{\pageref{classIsisMethodIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisNormalItemFilterIterator}{IsisNormalItemFilterIterator} }{\pageref{classIsisNormalItemFilterIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisReader}{IsisReader} }{\pageref{classIsisReader}}{}
+\item\contentsline{section}{\hyperlink{classIsisRowIterator}{IsisRowIterator} }{\pageref{classIsisRowIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisSubfieldIterator}{IsisSubfieldIterator} }{\pageref{classIsisSubfieldIterator}}{}
+\item\contentsline{section}{\hyperlink{classIsisValueIterator}{IsisValueIterator} }{\pageref{classIsisValueIterator}}{}
+\item\contentsline{section}{\hyperlink{classMaleteDb}{MaleteDb} }{\pageref{classMaleteDb}}{}
+\item\contentsline{section}{\hyperlink{classPhpIsisDb}{PhpIsisDb} }{\pageref{classPhpIsisDb}}{}
+\item\contentsline{section}{\hyperlink{classSchemaDb}{SchemaDb} }{\pageref{classSchemaDb}}{}
+\end{DoxyCompactList}
diff --git a/doc/latex/classBiblioIsisDb.eps b/doc/latex/classBiblioIsisDb.eps
new file mode 100644
index 0000000..ad82ed9
--- /dev/null
+++ b/doc/latex/classBiblioIsisDb.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 470.588
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 1.0625 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(BiblioIsisDb) cw
+(IsisDb) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (BiblioIsisDb) 0 0 box
+ (IsisDb) 0 1 box
+
+% ----- relations -----
+
+solid
+0 0 0 out
+solid
+1 0 1 in
diff --git a/doc/latex/classBiblioIsisDb.pdf b/doc/latex/classBiblioIsisDb.pdf
new file mode 100644
index 0000000..3572559
--- /dev/null
+++ b/doc/latex/classBiblioIsisDb.pdf
Binary files differ
diff --git a/doc/latex/classBiblioIsisDb.tex b/doc/latex/classBiblioIsisDb.tex
new file mode 100644
index 0000000..4e933f9
--- /dev/null
+++ b/doc/latex/classBiblioIsisDb.tex
@@ -0,0 +1,312 @@
+\hypertarget{classBiblioIsisDb}{
+\section{BiblioIsisDb Class Reference}
+\label{classBiblioIsisDb}\index{BiblioIsisDb@{BiblioIsisDb}}
+}
+Inheritance diagram for BiblioIsisDb:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2cm]{classBiblioIsisDb}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classBiblioIsisDb_ab2c5ec782b324847e104d8ad35a230af}{\_\-\_\-construct} (\$schema)
+\item
+\hyperlink{classBiblioIsisDb_a286fb16de5797785d28021068efca561}{logger} (\$message)
+\item
+\hyperlink{classBiblioIsisDb_ad5704f5c9454ac053e66a489797ba221}{backend} (\$method= 'count', \$args=NULL)
+\item
+\hyperlink{classBiblioIsisDb_a808cdbc0d4c8f62a1465e74064f4422f}{read} (\$id, \$method= 'fetch')
+\item
+\hyperlink{classBiblioIsisDb_ab6b0a977c066c25c6bdca5c1d3a083e8}{entries} ()
+\item
+\hyperlink{classBiblioIsisDb_a8e76b289b9e3a9893b9469094753d2bc}{example} ()
+\item
+\hyperlink{classBiblioIsisDb_a34483b463d81ba1d8031576b5735efbc}{tag} (\$results, \$method= 'fetch')
+\item
+\hyperlink{classBiblioIsisDb_a73d5d998f9ab7e410c5f71f65e83948b}{has\_\-subfields} (\$key)
+\item
+\hyperlink{classBiblioIsisDb_af0be305b211b96dcb4aeb8452c8331a9}{subfields\_\-switch} (\$key, \&\$value)
+\item
+\hyperlink{classBiblioIsisDb_a450e26ae0b7f4967d8e25c9a3d023c75}{subfields} (\$name, \$key, \$method)
+\item
+\hyperlink{classBiblioIsisDb_a8c6a0081c5296a6db520e98998502ef7}{subfields\_\-from\_\-to\_\-hash} (\$name, \$key)
+\item
+\hyperlink{classBiblioIsisDb_a2b08c6a7ba20f6f5eb07edb2b4a914c1}{subfields\_\-from\_\-fetch} (\$name, \$key)
+\item
+\hyperlink{classBiblioIsisDb_aa86380f9e66ea8f175c50675d1fe0a88}{is\_\-repetitive} (\$field, \$value)
+\item
+\hyperlink{classBiblioIsisDb_a04089d61ce04b18aa6a78c94ca02edb9}{repetition} (\$key, \$value)
+\item
+\hyperlink{classBiblioIsisDb_a2b6fd7b7316f63ac5649ebf3947c4fae}{charset} (\&\$data)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classBiblioIsisDb_a929467f1907d3aeaeebe493f0c188c5b}{check} (\$schema, \$section=NULL)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classBiblioIsisDb_a978a9243ea53b1f2426115d7b4191b07}{\$fdt}
+\item
+\hyperlink{classBiblioIsisDb_a7eccfa964dcd1469a263340447c38143}{\$perl}
+\item
+\hyperlink{classBiblioIsisDb_ab9fb3b6f10d2734a198ca7802ee38c2d}{\$format}
+\item
+\hyperlink{classBiblioIsisDb_a67337d78af0fc21d0ff10471aa638c62}{\$log}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Biblio::Isis implementation of \hyperlink{interfaceIsisDb}{IsisDb}.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classBiblioIsisDb_ab2c5ec782b324847e104d8ad35a230af}{
+\index{BiblioIsisDb@{BiblioIsisDb}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::\_\-\_\-construct (\$ {\em schema})}}
+\label{classBiblioIsisDb_ab2c5ec782b324847e104d8ad35a230af}
+Constructor.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb::\_\-\_\-construct()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb}.
+
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classBiblioIsisDb_ad5704f5c9454ac053e66a489797ba221}{
+\index{BiblioIsisDb@{BiblioIsisDb}!backend@{backend}}
+\index{backend@{backend}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{backend}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::backend (\$ {\em method} = {\ttfamily 'count'}, \/ \$ {\em args} = {\ttfamily NULL})}}
+\label{classBiblioIsisDb_ad5704f5c9454ac053e66a489797ba221}
+Send requests to the perl backend.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$method}]Backend method name to invoke.\item[{\em \$args}]Backend method arguments.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Backend return value.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a2b6fd7b7316f63ac5649ebf3947c4fae}{
+\index{BiblioIsisDb@{BiblioIsisDb}!charset@{charset}}
+\index{charset@{charset}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{charset}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::charset (\&\$ {\em data})}}
+\label{classBiblioIsisDb_a2b6fd7b7316f63ac5649ebf3947c4fae}
+Charset conversion.
+
+Converts a string from the database charset to UTF-\/8.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$data}]String to be converted.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+String converted to UTF-\/8.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a929467f1907d3aeaeebe493f0c188c5b}{
+\index{BiblioIsisDb@{BiblioIsisDb}!check@{check}}
+\index{check@{check}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static BiblioIsisDb::check (\$ {\em schema}, \/ \$ {\em section} = {\ttfamily NULL})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classBiblioIsisDb_a929467f1907d3aeaeebe493f0c188c5b}
+Check configuration.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb::check()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb}.
+
+\hypertarget{classBiblioIsisDb_ab6b0a977c066c25c6bdca5c1d3a083e8}{
+\index{BiblioIsisDb@{BiblioIsisDb}!entries@{entries}}
+\index{entries@{entries}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{entries}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::entries ()}}
+\label{classBiblioIsisDb_ab6b0a977c066c25c6bdca5c1d3a083e8}
+Return number of entries in the database.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb::entries()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb}.
+
+\hypertarget{classBiblioIsisDb_a8e76b289b9e3a9893b9469094753d2bc}{
+\index{BiblioIsisDb@{BiblioIsisDb}!example@{example}}
+\index{example@{example}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{example}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::example ()}}
+\label{classBiblioIsisDb_a8e76b289b9e3a9893b9469094753d2bc}
+Return an example schema.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb::example()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb}.
+
+\hypertarget{classBiblioIsisDb_a73d5d998f9ab7e410c5f71f65e83948b}{
+\index{BiblioIsisDb@{BiblioIsisDb}!has\_\-subfields@{has\_\-subfields}}
+\index{has\_\-subfields@{has\_\-subfields}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{has\_\-subfields}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::has\_\-subfields (\$ {\em key})}}
+\label{classBiblioIsisDb_a73d5d998f9ab7e410c5f71f65e83948b}
+Checks whether a field has subfields.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$key}]Field key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if has subfields, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_aa86380f9e66ea8f175c50675d1fe0a88}{
+\index{BiblioIsisDb@{BiblioIsisDb}!is\_\-repetitive@{is\_\-repetitive}}
+\index{is\_\-repetitive@{is\_\-repetitive}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{is\_\-repetitive}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::is\_\-repetitive (\$ {\em field}, \/ \$ {\em value})}}
+\label{classBiblioIsisDb_aa86380f9e66ea8f175c50675d1fe0a88}
+Deals with repetition.
+
+As Biblio::Isis always return field values as arrays, we have to check the database schema to see if we want to convert then to a single value.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Database field.\item[{\em \$value}]Data (with or without repetition).\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if repetitive, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a286fb16de5797785d28021068efca561}{
+\index{BiblioIsisDb@{BiblioIsisDb}!logger@{logger}}
+\index{logger@{logger}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{logger}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::logger (\$ {\em message})}}
+\label{classBiblioIsisDb_a286fb16de5797785d28021068efca561}
+Class logger.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$message}]Log message. \end{DoxyParams}
+\hypertarget{classBiblioIsisDb_a808cdbc0d4c8f62a1465e74064f4422f}{
+\index{BiblioIsisDb@{BiblioIsisDb}!read@{read}}
+\index{read@{read}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{read}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::read (\$ {\em id}, \/ \$ {\em method} = {\ttfamily 'fetch'})}}
+\label{classBiblioIsisDb_a808cdbc0d4c8f62a1465e74064f4422f}
+Read an entry.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$id}]Record Id.\item[{\em \$method}]Database read method.\end{DoxyParams}
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{IsisDb::read()}
+\end{DoxySeeAlso}
+\hypertarget{classBiblioIsisDb_a04089d61ce04b18aa6a78c94ca02edb9}{
+\index{BiblioIsisDb@{BiblioIsisDb}!repetition@{repetition}}
+\index{repetition@{repetition}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{repetition}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::repetition (\$ {\em key}, \/ \$ {\em value})}}
+\label{classBiblioIsisDb_a04089d61ce04b18aa6a78c94ca02edb9}
+Deals with repetition.
+
+As Biblio::Isis always return field values as arrays, we have to check the database schema to see if we want to convert then to a single value. The current implementation is just a placeholder as no conversion is done.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$key}]Database key.\item[{\em \$value}]Query field result.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The value according to the repetition config.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a450e26ae0b7f4967d8e25c9a3d023c75}{
+\index{BiblioIsisDb@{BiblioIsisDb}!subfields@{subfields}}
+\index{subfields@{subfields}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{subfields}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::subfields (\$ {\em name}, \/ \$ {\em key}, \/ \$ {\em method})}}
+\label{classBiblioIsisDb_a450e26ae0b7f4967d8e25c9a3d023c75}
+Makes subfield substitution in a dataset.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Dataset.\item[{\em \$key}]Field key.\item[{\em \$method}]Database read method.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Data with processed subfields.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a2b08c6a7ba20f6f5eb07edb2b4a914c1}{
+\index{BiblioIsisDb@{BiblioIsisDb}!subfields\_\-from\_\-fetch@{subfields\_\-from\_\-fetch}}
+\index{subfields\_\-from\_\-fetch@{subfields\_\-from\_\-fetch}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{subfields\_\-from\_\-fetch}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::subfields\_\-from\_\-fetch (\$ {\em name}, \/ \$ {\em key})}}
+\label{classBiblioIsisDb_a2b08c6a7ba20f6f5eb07edb2b4a914c1}
+Subfield handling for data read by 'from\_\-fetch' method.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Dataset.\item[{\em \$key}]Field key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Data with processed subfields.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_a8c6a0081c5296a6db520e98998502ef7}{
+\index{BiblioIsisDb@{BiblioIsisDb}!subfields\_\-from\_\-to\_\-hash@{subfields\_\-from\_\-to\_\-hash}}
+\index{subfields\_\-from\_\-to\_\-hash@{subfields\_\-from\_\-to\_\-hash}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{subfields\_\-from\_\-to\_\-hash}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::subfields\_\-from\_\-to\_\-hash (\$ {\em name}, \/ \$ {\em key})}}
+\label{classBiblioIsisDb_a8c6a0081c5296a6db520e98998502ef7}
+Subfield handling for data read by 'to\_\-hash' method. This method is not fully supported and therefore not recommended.
+
+It does not deal very well when data has \char`\"{}main\char`\"{} fields and subfields (like \char`\"{}data1$^\wedge$adata2$^\wedge$bdata3\char`\"{}) and doesn't deal with advanced configuration such as 'join\_\-subfields'.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Dataset.\item[{\em \$key}]Field key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Data with processed subfields.
+\end{DoxyReturn}
+\hypertarget{classBiblioIsisDb_af0be305b211b96dcb4aeb8452c8331a9}{
+\index{BiblioIsisDb@{BiblioIsisDb}!subfields\_\-switch@{subfields\_\-switch}}
+\index{subfields\_\-switch@{subfields\_\-switch}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{subfields\_\-switch}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::subfields\_\-switch (\$ {\em key}, \/ \&\$ {\em value})}}
+\label{classBiblioIsisDb_af0be305b211b96dcb4aeb8452c8331a9}
+Switch keys on subfields.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$key}]Field key.\item[{\em \$value}]Dataset. \end{DoxyParams}
+\hypertarget{classBiblioIsisDb_a34483b463d81ba1d8031576b5735efbc}{
+\index{BiblioIsisDb@{BiblioIsisDb}!tag@{tag}}
+\index{tag@{tag}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{tag}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::tag (\$ {\em results}, \/ \$ {\em method} = {\ttfamily 'fetch'})}}
+\label{classBiblioIsisDb_a34483b463d81ba1d8031576b5735efbc}
+Tag results of a db query.
+
+This function converts the keys of query result from field numbers to names.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$results}]Database query results.\item[{\em \$method}]Database read method.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Tagged database result.
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classBiblioIsisDb_a978a9243ea53b1f2426115d7b4191b07}{
+\index{BiblioIsisDb@{BiblioIsisDb}!\$fdt@{\$fdt}}
+\index{\$fdt@{\$fdt}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{\$fdt}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::\$fdt}}
+\label{classBiblioIsisDb_a978a9243ea53b1f2426115d7b4191b07}
+Field description table. \hypertarget{classBiblioIsisDb_ab9fb3b6f10d2734a198ca7802ee38c2d}{
+\index{BiblioIsisDb@{BiblioIsisDb}!\$format@{\$format}}
+\index{\$format@{\$format}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{\$format}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::\$format}}
+\label{classBiblioIsisDb_ab9fb3b6f10d2734a198ca7802ee38c2d}
+Database format, derived from \$schema. \hypertarget{classBiblioIsisDb_a67337d78af0fc21d0ff10471aa638c62}{
+\index{BiblioIsisDb@{BiblioIsisDb}!\$log@{\$log}}
+\index{\$log@{\$log}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{\$log}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::\$log}}
+\label{classBiblioIsisDb_a67337d78af0fc21d0ff10471aa638c62}
+Class action log. \hypertarget{classBiblioIsisDb_a7eccfa964dcd1469a263340447c38143}{
+\index{BiblioIsisDb@{BiblioIsisDb}!\$perl@{\$perl}}
+\index{\$perl@{\$perl}!BiblioIsisDb@{BiblioIsisDb}}
+\subsubsection[{\$perl}]{\setlength{\rightskip}{0pt plus 5cm}BiblioIsisDb::\$perl}}
+\label{classBiblioIsisDb_a7eccfa964dcd1469a263340447c38143}
+Class instance of a perl interpreter;
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/backends/BiblioIsisDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classCinIsis.tex b/doc/latex/classCinIsis.tex
new file mode 100644
index 0000000..9d1c557
--- /dev/null
+++ b/doc/latex/classCinIsis.tex
@@ -0,0 +1,100 @@
+\hypertarget{classCinIsis}{
+\section{CinIsis Class Reference}
+\label{classCinIsis}\index{CinIsis@{CinIsis}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinIsis_a0f8b918be2f0f1d2c68955b3295034fe}{\_\-\_\-construct} (\$config= 'config/config.yaml')
+\item
+\hyperlink{classCinIsis_a831607c2fe9ffac63be8de42e1c9dbae}{load} (\$file)
+\item
+\hyperlink{classCinIsis_afa9cbac9e165ebed194b24487344d2fb}{parse} (\$config, \$type= 'cinisis')
+\item
+\hyperlink{classCinIsis_acd7e7486428fac5a0a85ad46b0486820}{check} (\$config)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinIsis_ada0e16c222436f776f040e0fe1a25184}{\$db}
+\item
+\hyperlink{classCinIsis_aea1086b32d45308f6875f6ed0a6db2fc}{\$implementation}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+\hyperlink{classCinIsis}{CinIsis} main class.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classCinIsis_a0f8b918be2f0f1d2c68955b3295034fe}{
+\index{CinIsis@{CinIsis}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!CinIsis@{CinIsis}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::\_\-\_\-construct (\$ {\em config} = {\ttfamily 'config/config.yaml'})}}
+\label{classCinIsis_a0f8b918be2f0f1d2c68955b3295034fe}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Optional parameter to set alternative config file or array with configuration. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classCinIsis_acd7e7486428fac5a0a85ad46b0486820}{
+\index{CinIsis@{CinIsis}!check@{check}}
+\index{check@{check}!CinIsis@{CinIsis}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::check (\$ {\em config})}}
+\label{classCinIsis_acd7e7486428fac5a0a85ad46b0486820}
+Check configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+\hypertarget{classCinIsis_a831607c2fe9ffac63be8de42e1c9dbae}{
+\index{CinIsis@{CinIsis}!load@{load}}
+\index{load@{load}!CinIsis@{CinIsis}}
+\subsubsection[{load}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::load (\$ {\em file})}}
+\label{classCinIsis_a831607c2fe9ffac63be8de42e1c9dbae}
+Config file load.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$file}]Config file.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration.
+\end{DoxyReturn}
+\hypertarget{classCinIsis_afa9cbac9e165ebed194b24487344d2fb}{
+\index{CinIsis@{CinIsis}!parse@{parse}}
+\index{parse@{parse}!CinIsis@{CinIsis}}
+\subsubsection[{parse}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::parse (\$ {\em config}, \/ \$ {\em type} = {\ttfamily 'cinisis'})}}
+\label{classCinIsis_afa9cbac9e165ebed194b24487344d2fb}
+Parse configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\item[{\em \$type}]Configuration type (either 'cinisis' or 'schema').\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+\begin{Desc}
+\item[\hyperlink{todo__todo000001}{Todo}]Config and system check. \end{Desc}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classCinIsis_ada0e16c222436f776f040e0fe1a25184}{
+\index{CinIsis@{CinIsis}!\$db@{\$db}}
+\index{\$db@{\$db}!CinIsis@{CinIsis}}
+\subsubsection[{\$db}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::\$db}}
+\label{classCinIsis_ada0e16c222436f776f040e0fe1a25184}
+Database resource. \hypertarget{classCinIsis_aea1086b32d45308f6875f6ed0a6db2fc}{
+\index{CinIsis@{CinIsis}!\$implementation@{\$implementation}}
+\index{\$implementation@{\$implementation}!CinIsis@{CinIsis}}
+\subsubsection[{\$implementation}]{\setlength{\rightskip}{0pt plus 5cm}CinIsis::\$implementation}}
+\label{classCinIsis_aea1086b32d45308f6875f6ed0a6db2fc}
+Database implementation.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/CinIsis.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classCinisis.tex b/doc/latex/classCinisis.tex
new file mode 100644
index 0000000..7f6193b
--- /dev/null
+++ b/doc/latex/classCinisis.tex
@@ -0,0 +1,185 @@
+\hypertarget{classCinisis}{
+\section{Cinisis Class Reference}
+\label{classCinisis}\index{Cinisis@{Cinisis}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinisis_ab9cb7a94d6a5dfb13d50e83e58a4cc10}{\_\-\_\-construct} (\$config=NULL)
+\item
+\hyperlink{classCinisis_ad5ebe493037aad5a2d8a2f6c51fab09f}{open} (\$config)
+\item
+\hyperlink{classCinisis_a0bd044303b01793f1a59c54040ff0242}{load} (\$file)
+\item
+\hyperlink{classCinisis_ae8d2f767bfb149031b1ac7077c45c7d6}{parse} (\$config, \$class=\_\-\_\-CLASS\_\-\_\-)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classCinisis_add6ffac62cffb6ba5e5b0bec552b2cee}{yaml} (\$file)
+\item
+static \hyperlink{classCinisis_ae6f679192f136ba61e85130ccab8e7ef}{check} (\$config)
+\item
+static \hyperlink{classCinisis_a125ecd4426e15e2c27daa16d4aaac3f2}{base} ()
+\item
+static \hyperlink{classCinisis_aac686f5d4862085721eb0de1d6203a57}{file} (\$config=NULL, \$section= 'config')
+\item
+static \hyperlink{classCinisis_a0163d3358b31657bd6e91f94aa618918}{join\_\-subfields} (\$format)
+\item
+static \hyperlink{classCinisis_ac470ab9dc1f8c02545708f1c7b820d9e}{main\_\-field\_\-name} (\$format, \$key)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinisis_ae8aedec88384439c95da89f423a219c0}{\$db}
+\item
+\hyperlink{classCinisis_ae537c5305e84e86ae7dd305d2cd253fc}{\$implementation}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+\hyperlink{classCinisis}{Cinisis} main class.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classCinisis_ab9cb7a94d6a5dfb13d50e83e58a4cc10}{
+\index{Cinisis@{Cinisis}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!Cinisis@{Cinisis}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::\_\-\_\-construct (\$ {\em config} = {\ttfamily NULL})}}
+\label{classCinisis_ab9cb7a94d6a5dfb13d50e83e58a4cc10}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Optional parameter to set alternative config file or array with configuration. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classCinisis_a125ecd4426e15e2c27daa16d4aaac3f2}{
+\index{Cinisis@{Cinisis}!base@{base}}
+\index{base@{base}!Cinisis@{Cinisis}}
+\subsubsection[{base}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::base ()\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_a125ecd4426e15e2c27daa16d4aaac3f2}
+Get library base folder.
+
+\begin{DoxyReturn}{Returns}
+Return base folder.
+\end{DoxyReturn}
+\hypertarget{classCinisis_ae6f679192f136ba61e85130ccab8e7ef}{
+\index{Cinisis@{Cinisis}!check@{check}}
+\index{check@{check}!Cinisis@{Cinisis}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::check (\$ {\em config})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_ae6f679192f136ba61e85130ccab8e7ef}
+Check configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+\hypertarget{classCinisis_aac686f5d4862085721eb0de1d6203a57}{
+\index{Cinisis@{Cinisis}!file@{file}}
+\index{file@{file}!Cinisis@{Cinisis}}
+\subsubsection[{file}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::file (\$ {\em config} = {\ttfamily NULL}, \/ \$ {\em section} = {\ttfamily 'config'})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_aac686f5d4862085721eb0de1d6203a57}
+Get a file path.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file name (either relative to the library or absolute) or array with configuration.\item[{\em \$section}]Config file section (ignored for absolute files).\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Return the assembled file path.
+\end{DoxyReturn}
+\hypertarget{classCinisis_a0163d3358b31657bd6e91f94aa618918}{
+\index{Cinisis@{Cinisis}!join\_\-subfields@{join\_\-subfields}}
+\index{join\_\-subfields@{join\_\-subfields}!Cinisis@{Cinisis}}
+\subsubsection[{join\_\-subfields}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::join\_\-subfields (\$ {\em format})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_a0163d3358b31657bd6e91f94aa618918}
+Whether to join field and subfields in a single array.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$format}]Database format.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Boolean.
+\end{DoxyReturn}
+\hypertarget{classCinisis_a0bd044303b01793f1a59c54040ff0242}{
+\index{Cinisis@{Cinisis}!load@{load}}
+\index{load@{load}!Cinisis@{Cinisis}}
+\subsubsection[{load}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::load (\$ {\em file})}}
+\label{classCinisis_a0bd044303b01793f1a59c54040ff0242}
+Config file load.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$file}]Config file.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE if error.
+\end{DoxyReturn}
+\hypertarget{classCinisis_ac470ab9dc1f8c02545708f1c7b820d9e}{
+\index{Cinisis@{Cinisis}!main\_\-field\_\-name@{main\_\-field\_\-name}}
+\index{main\_\-field\_\-name@{main\_\-field\_\-name}!Cinisis@{Cinisis}}
+\subsubsection[{main\_\-field\_\-name}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::main\_\-field\_\-name (\$ {\em format}, \/ \$ {\em key})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_ac470ab9dc1f8c02545708f1c7b820d9e}
+Determine the main field name depending on db configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$key}]Field key.\item[{\em \$format}]Database format.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Main field name, 'field' by default.
+\end{DoxyReturn}
+\hypertarget{classCinisis_ad5ebe493037aad5a2d8a2f6c51fab09f}{
+\index{Cinisis@{Cinisis}!open@{open}}
+\index{open@{open}!Cinisis@{Cinisis}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::open (\$ {\em config})}}
+\label{classCinisis_ad5ebe493037aad5a2d8a2f6c51fab09f}
+Open an ISIS database.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Optional parameter to set alternative config file or array with configuration. \end{DoxyParams}
+\hypertarget{classCinisis_ae8d2f767bfb149031b1ac7077c45c7d6}{
+\index{Cinisis@{Cinisis}!parse@{parse}}
+\index{parse@{parse}!Cinisis@{Cinisis}}
+\subsubsection[{parse}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::parse (\$ {\em config}, \/ \$ {\em class} = {\ttfamily \_\-\_\-CLASS\_\-\_\-})}}
+\label{classCinisis_ae8d2f767bfb149031b1ac7077c45c7d6}
+Parse configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\item[{\em \$class}]Configuration class name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+\hypertarget{classCinisis_add6ffac62cffb6ba5e5b0bec552b2cee}{
+\index{Cinisis@{Cinisis}!yaml@{yaml}}
+\index{yaml@{yaml}!Cinisis@{Cinisis}}
+\subsubsection[{yaml}]{\setlength{\rightskip}{0pt plus 5cm}static Cinisis::yaml (\$ {\em file})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisis_add6ffac62cffb6ba5e5b0bec552b2cee}
+Load YAML into array using backend libraries.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$file}]Config file.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE if error.
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classCinisis_ae8aedec88384439c95da89f423a219c0}{
+\index{Cinisis@{Cinisis}!\$db@{\$db}}
+\index{\$db@{\$db}!Cinisis@{Cinisis}}
+\subsubsection[{\$db}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::\$db}}
+\label{classCinisis_ae8aedec88384439c95da89f423a219c0}
+Database resource. \hypertarget{classCinisis_ae537c5305e84e86ae7dd305d2cd253fc}{
+\index{Cinisis@{Cinisis}!\$implementation@{\$implementation}}
+\index{\$implementation@{\$implementation}!Cinisis@{Cinisis}}
+\subsubsection[{\$implementation}]{\setlength{\rightskip}{0pt plus 5cm}Cinisis::\$implementation}}
+\label{classCinisis_ae537c5305e84e86ae7dd305d2cd253fc}
+Database implementation.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/Cinisis.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classCinisisDb.tex b/doc/latex/classCinisisDb.tex
new file mode 100644
index 0000000..3b57076
--- /dev/null
+++ b/doc/latex/classCinisisDb.tex
@@ -0,0 +1,170 @@
+\hypertarget{classCinisisDb}{
+\section{CinisisDb Class Reference}
+\label{classCinisisDb}\index{CinisisDb@{CinisisDb}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinisisDb_a0693dfb4a5bb8b039f3c7e7848dc1861}{\_\-\_\-construct} (\$config=NULL)
+\item
+\hyperlink{classCinisisDb_ab6fe06865770b4ade264116627cab487}{open} (\$config)
+\item
+\hyperlink{classCinisisDb_a517ae044290df8ccea6b04ad91d19a7f}{load} (\$file)
+\item
+\hyperlink{classCinisisDb_a5b0ec2897d714c79c673d5950dde8e14}{parse} (\$config, \$class=\_\-\_\-CLASS\_\-\_\-)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classCinisisDb_ad1691843692ee6e9461e5bcb692263c8}{check} (\$config)
+\item
+static \hyperlink{classCinisisDb_ab44fe0ebdf6a954bc02d50bc7bcc3464}{base} ()
+\item
+static \hyperlink{classCinisisDb_ac44f1e510c52d21090aab8b903c6ddf5}{file} (\$config=NULL, \$section= 'config')
+\item
+static \hyperlink{classCinisisDb_a18c5fa49b8683ed0e80cdf72d360d50a}{join\_\-subfields} (\$format)
+\item
+static \hyperlink{classCinisisDb_a5f0fe8ae1b21721f759bde7fc260a283}{main\_\-field\_\-name} (\$format, \$key)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinisisDb_af5032dd536f8b50a71871dd35c8be175}{\$db}
+\item
+\hyperlink{classCinisisDb_af236be4b737a41fff5e97cf4471f1c00}{\$implementation}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+\hyperlink{classCinisisDb}{CinisisDb} main class.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classCinisisDb_a0693dfb4a5bb8b039f3c7e7848dc1861}{
+\index{CinisisDb@{CinisisDb}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!CinisisDb@{CinisisDb}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::\_\-\_\-construct (\$ {\em config} = {\ttfamily NULL})}}
+\label{classCinisisDb_a0693dfb4a5bb8b039f3c7e7848dc1861}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Optional parameter to set alternative config file or array with configuration. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classCinisisDb_ab44fe0ebdf6a954bc02d50bc7bcc3464}{
+\index{CinisisDb@{CinisisDb}!base@{base}}
+\index{base@{base}!CinisisDb@{CinisisDb}}
+\subsubsection[{base}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDb::base ()\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDb_ab44fe0ebdf6a954bc02d50bc7bcc3464}
+Get library base folder.
+
+\begin{DoxyReturn}{Returns}
+Return base folder.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_ad1691843692ee6e9461e5bcb692263c8}{
+\index{CinisisDb@{CinisisDb}!check@{check}}
+\index{check@{check}!CinisisDb@{CinisisDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDb::check (\$ {\em config})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDb_ad1691843692ee6e9461e5bcb692263c8}
+Check configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_ac44f1e510c52d21090aab8b903c6ddf5}{
+\index{CinisisDb@{CinisisDb}!file@{file}}
+\index{file@{file}!CinisisDb@{CinisisDb}}
+\subsubsection[{file}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDb::file (\$ {\em config} = {\ttfamily NULL}, \/ \$ {\em section} = {\ttfamily 'config'})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDb_ac44f1e510c52d21090aab8b903c6ddf5}
+Get a file path.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file name (either relative to the library or absolute) or array with configuration.\item[{\em \$section}]Config file section (ignored for absolute files).\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Return the assembled file path.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_a18c5fa49b8683ed0e80cdf72d360d50a}{
+\index{CinisisDb@{CinisisDb}!join\_\-subfields@{join\_\-subfields}}
+\index{join\_\-subfields@{join\_\-subfields}!CinisisDb@{CinisisDb}}
+\subsubsection[{join\_\-subfields}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDb::join\_\-subfields (\$ {\em format})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDb_a18c5fa49b8683ed0e80cdf72d360d50a}
+Whether to join field and subfields in a single array.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$format}]Database format.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Boolean.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_a517ae044290df8ccea6b04ad91d19a7f}{
+\index{CinisisDb@{CinisisDb}!load@{load}}
+\index{load@{load}!CinisisDb@{CinisisDb}}
+\subsubsection[{load}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::load (\$ {\em file})}}
+\label{classCinisisDb_a517ae044290df8ccea6b04ad91d19a7f}
+Config file load.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$file}]Config file.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE if error.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_a5f0fe8ae1b21721f759bde7fc260a283}{
+\index{CinisisDb@{CinisisDb}!main\_\-field\_\-name@{main\_\-field\_\-name}}
+\index{main\_\-field\_\-name@{main\_\-field\_\-name}!CinisisDb@{CinisisDb}}
+\subsubsection[{main\_\-field\_\-name}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDb::main\_\-field\_\-name (\$ {\em format}, \/ \$ {\em key})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDb_a5f0fe8ae1b21721f759bde7fc260a283}
+Determine the main field name depending on db configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$key}]Field key.\item[{\em \$format}]Database format.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Main field name, 'field' by default.
+\end{DoxyReturn}
+\hypertarget{classCinisisDb_ab6fe06865770b4ade264116627cab487}{
+\index{CinisisDb@{CinisisDb}!open@{open}}
+\index{open@{open}!CinisisDb@{CinisisDb}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::open (\$ {\em config})}}
+\label{classCinisisDb_ab6fe06865770b4ade264116627cab487}
+Open an ISIS database.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Optional parameter to set alternative config file or array with configuration. \end{DoxyParams}
+\hypertarget{classCinisisDb_a5b0ec2897d714c79c673d5950dde8e14}{
+\index{CinisisDb@{CinisisDb}!parse@{parse}}
+\index{parse@{parse}!CinisisDb@{CinisisDb}}
+\subsubsection[{parse}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::parse (\$ {\em config}, \/ \$ {\em class} = {\ttfamily \_\-\_\-CLASS\_\-\_\-})}}
+\label{classCinisisDb_a5b0ec2897d714c79c673d5950dde8e14}
+Parse configuration.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array with configuration.\item[{\em \$class}]Configuration class name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with configuration or FALSE on error.
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classCinisisDb_af5032dd536f8b50a71871dd35c8be175}{
+\index{CinisisDb@{CinisisDb}!\$db@{\$db}}
+\index{\$db@{\$db}!CinisisDb@{CinisisDb}}
+\subsubsection[{\$db}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::\$db}}
+\label{classCinisisDb_af5032dd536f8b50a71871dd35c8be175}
+Database resource. \hypertarget{classCinisisDb_af236be4b737a41fff5e97cf4471f1c00}{
+\index{CinisisDb@{CinisisDb}!\$implementation@{\$implementation}}
+\index{\$implementation@{\$implementation}!CinisisDb@{CinisisDb}}
+\subsubsection[{\$implementation}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDb::\$implementation}}
+\label{classCinisisDb_af236be4b737a41fff5e97cf4471f1c00}
+Database implementation.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/CinisisDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classCinisisDisplayHelper.tex b/doc/latex/classCinisisDisplayHelper.tex
new file mode 100644
index 0000000..80624db
--- /dev/null
+++ b/doc/latex/classCinisisDisplayHelper.tex
@@ -0,0 +1,296 @@
+\hypertarget{classCinisisDisplayHelper}{
+\section{CinisisDisplayHelper Class Reference}
+\label{classCinisisDisplayHelper}\index{CinisisDisplayHelper@{CinisisDisplayHelper}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classCinisisDisplayHelper_ae60a4cc7ad15109c83b3d934f89b283e}{\_\-\_\-construct} (\$title)
+\item
+\hyperlink{classCinisisDisplayHelper_a5601da7181ece90313c1abe2fd0ae621}{\_\-\_\-call} (\$method, \$arguments)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classCinisisDisplayHelper_ab263cf81e5c459c60baa6ef7fa5f76b2}{methodName} (\$method)
+\item
+static \hyperlink{classCinisisDisplayHelper_abae906d7606b7d76ef5ed754835ba7e2}{\_\-\_\-callStatic} (\$method, \$arguments)
+\end{DoxyCompactItemize}
+\subsection*{Static Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classCinisisDisplayHelper_af3849efbba5e6980ddfdb4ceddb6ad17}{webTitle} (\$title)
+\item
+static \hyperlink{classCinisisDisplayHelper_a8f0c8aec5b11a144b14278d287238c85}{cliTitle} (\$title)
+\item
+static \hyperlink{classCinisisDisplayHelper_a356d8117dfcb220b7bb9996b569f5f25}{webHeader} (\$title)
+\item
+static \hyperlink{classCinisisDisplayHelper_aa331cd95a86ffd270784736e74f253e6}{webFooter} ()
+\item
+static \hyperlink{classCinisisDisplayHelper_a7ba5dd0ddd1ba9de5efdbfa1b62d4efa}{webForm} (\$content, \$action= 'index.php', \$method= 'get')
+\item
+static \hyperlink{classCinisisDisplayHelper_a4c8934dc88cda9c7a894106b4dc7abba}{webFormInputText} (\$name, \$default=null)
+\item
+static \hyperlink{classCinisisDisplayHelper_a291e2da97fd646e7fa34fb92879fc3d6}{webNavbar} (\$entry, \$entries, \$action= 'index.php', \$extra=NULL)
+\item
+static \hyperlink{classCinisisDisplayHelper_aadc869909d8be43402d73fa3415827b4}{webLink} (\$action, \$args, \$title)
+\item
+static \hyperlink{classCinisisDisplayHelper_a7ffe33c336d0b495807a2c4bae78cbfb}{webEntryLink} (\$entry)
+\item
+static \hyperlink{classCinisisDisplayHelper_a4028def92d8511e525251ec7ab06246d}{webOpenTable} ()
+\item
+static \hyperlink{classCinisisDisplayHelper_ab4e55ec58b59bc8b2af32b93cdf0d7c1}{webCloseTable} ()
+\item
+static \hyperlink{classCinisisDisplayHelper_a0f2e5c78f6fdd146df04382e497cfe94}{webH2} (\$text)
+\item
+static \hyperlink{classCinisisDisplayHelper_aa15ca1975a280814a1cdc2df82b8c67d}{cliH2} (\$text)
+\item
+static \hyperlink{classCinisisDisplayHelper_acc20c726a214895584d15a434b2f3548}{webH3} (\$text)
+\item
+static \hyperlink{classCinisisDisplayHelper_a1ed9ee357ffda8e2efd885a6eae20550}{cliH3} (\$text)
+\item
+static \hyperlink{classCinisisDisplayHelper_a9c8b637e47e4263901baf4c5f2064d8d}{webBr} ()
+\item
+static \hyperlink{classCinisisDisplayHelper_ad61db99c9d639678c96879aa34288323}{cliBr} ()
+\item
+static \hyperlink{classCinisisDisplayHelper_a528283a8b16090918f1878dca5ee24fb}{webPre} (\$text)
+\item
+static \hyperlink{classCinisisDisplayHelper_a50bf73bd3722766cbae1b46b3092453d}{cliPre} (\$text)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Display helpers for test scripts.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classCinisisDisplayHelper_ae60a4cc7ad15109c83b3d934f89b283e}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDisplayHelper::\_\-\_\-construct (\$ {\em title})}}
+\label{classCinisisDisplayHelper_ae60a4cc7ad15109c83b3d934f89b283e}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$title}]Page title; \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classCinisisDisplayHelper_a5601da7181ece90313c1abe2fd0ae621}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!\_\-\_\-call@{\_\-\_\-call}}
+\index{\_\-\_\-call@{\_\-\_\-call}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{\_\-\_\-call}]{\setlength{\rightskip}{0pt plus 5cm}CinisisDisplayHelper::\_\-\_\-call (\$ {\em method}, \/ \$ {\em arguments})}}
+\label{classCinisisDisplayHelper_a5601da7181ece90313c1abe2fd0ae621}
+Dispatcher, dynamic version.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$method}]Method name.\item[{\em \$arguments}]Argument list.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Callback result.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_abae906d7606b7d76ef5ed754835ba7e2}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!\_\-\_\-callStatic@{\_\-\_\-callStatic}}
+\index{\_\-\_\-callStatic@{\_\-\_\-callStatic}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{\_\-\_\-callStatic}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::\_\-\_\-callStatic (\$ {\em method}, \/ \$ {\em arguments})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDisplayHelper_abae906d7606b7d76ef5ed754835ba7e2}
+Dispatcher, static version.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$method}]Method name.\item[{\em \$arguments}]Argument list.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Callback result.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_ad61db99c9d639678c96879aa34288323}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!cliBr@{cliBr}}
+\index{cliBr@{cliBr}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{cliBr}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::cliBr ()\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_ad61db99c9d639678c96879aa34288323}
+Draws a line break element, CLI version. \hypertarget{classCinisisDisplayHelper_aa15ca1975a280814a1cdc2df82b8c67d}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!cliH2@{cliH2}}
+\index{cliH2@{cliH2}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{cliH2}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::cliH2 (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_aa15ca1975a280814a1cdc2df82b8c67d}
+Draws a h2 element, CLI version.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a1ed9ee357ffda8e2efd885a6eae20550}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!cliH3@{cliH3}}
+\index{cliH3@{cliH3}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{cliH3}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::cliH3 (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a1ed9ee357ffda8e2efd885a6eae20550}
+Draws a h3 element, CLI version.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a50bf73bd3722766cbae1b46b3092453d}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!cliPre@{cliPre}}
+\index{cliPre@{cliPre}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{cliPre}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::cliPre (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a50bf73bd3722766cbae1b46b3092453d}
+Draws a pre format block element.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a8f0c8aec5b11a144b14278d287238c85}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!cliTitle@{cliTitle}}
+\index{cliTitle@{cliTitle}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{cliTitle}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::cliTitle (\$ {\em title})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a8f0c8aec5b11a144b14278d287238c85}
+Draws title, CLI version.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$title}]Page title; \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_ab263cf81e5c459c60baa6ef7fa5f76b2}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!methodName@{methodName}}
+\index{methodName@{methodName}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{methodName}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::methodName (\$ {\em method})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisDisplayHelper_ab263cf81e5c459c60baa6ef7fa5f76b2}
+Determine internal method names.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$method}]Method name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Method name.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_a9c8b637e47e4263901baf4c5f2064d8d}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webBr@{webBr}}
+\index{webBr@{webBr}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webBr}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webBr ()\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a9c8b637e47e4263901baf4c5f2064d8d}
+Draws a line break element. \hypertarget{classCinisisDisplayHelper_ab4e55ec58b59bc8b2af32b93cdf0d7c1}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webCloseTable@{webCloseTable}}
+\index{webCloseTable@{webCloseTable}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webCloseTable}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webCloseTable ()\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_ab4e55ec58b59bc8b2af32b93cdf0d7c1}
+Draws tags for closing a table. \hypertarget{classCinisisDisplayHelper_a7ffe33c336d0b495807a2c4bae78cbfb}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webEntryLink@{webEntryLink}}
+\index{webEntryLink@{webEntryLink}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webEntryLink}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webEntryLink (\$ {\em entry})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a7ffe33c336d0b495807a2c4bae78cbfb}
+Format an entry link.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Entry number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Formatted link.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_aa331cd95a86ffd270784736e74f253e6}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webFooter@{webFooter}}
+\index{webFooter@{webFooter}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webFooter}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webFooter ()\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_aa331cd95a86ffd270784736e74f253e6}
+Draws the page footer. \hypertarget{classCinisisDisplayHelper_a7ba5dd0ddd1ba9de5efdbfa1b62d4efa}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webForm@{webForm}}
+\index{webForm@{webForm}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webForm}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webForm (\$ {\em content}, \/ \$ {\em action} = {\ttfamily 'index.php'}, \/ \$ {\em method} = {\ttfamily 'get'})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a7ba5dd0ddd1ba9de5efdbfa1b62d4efa}
+Draws a form.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$content}]Form inner content.\item[{\em \$action}]Form action.\item[{\em \$method}]Form method. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a4c8934dc88cda9c7a894106b4dc7abba}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webFormInputText@{webFormInputText}}
+\index{webFormInputText@{webFormInputText}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webFormInputText}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webFormInputText (\$ {\em name}, \/ \$ {\em default} = {\ttfamily null})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a4c8934dc88cda9c7a894106b4dc7abba}
+Draws a form text input.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Input name.\item[{\em \$default}]Default value.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Rendered text input.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_a0f2e5c78f6fdd146df04382e497cfe94}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webH2@{webH2}}
+\index{webH2@{webH2}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webH2}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webH2 (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a0f2e5c78f6fdd146df04382e497cfe94}
+Draws a h2 element.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_acc20c726a214895584d15a434b2f3548}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webH3@{webH3}}
+\index{webH3@{webH3}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webH3}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webH3 (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_acc20c726a214895584d15a434b2f3548}
+Draws a h3 element.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a356d8117dfcb220b7bb9996b569f5f25}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webHeader@{webHeader}}
+\index{webHeader@{webHeader}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webHeader}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webHeader (\$ {\em title})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a356d8117dfcb220b7bb9996b569f5f25}
+Draws the page header.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$title}]Page title; \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_aadc869909d8be43402d73fa3415827b4}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webLink@{webLink}}
+\index{webLink@{webLink}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webLink}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webLink (\$ {\em action}, \/ \$ {\em args}, \/ \$ {\em title})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_aadc869909d8be43402d73fa3415827b4}
+Format a link.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$action}]Link action.\item[{\em \$args}]Action arguments.\item[{\em \$title}]Link title.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Formatted link.
+\end{DoxyReturn}
+\hypertarget{classCinisisDisplayHelper_a291e2da97fd646e7fa34fb92879fc3d6}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webNavbar@{webNavbar}}
+\index{webNavbar@{webNavbar}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webNavbar}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webNavbar (\$ {\em entry}, \/ \$ {\em entries}, \/ \$ {\em action} = {\ttfamily 'index.php'}, \/ \$ {\em extra} = {\ttfamily NULL})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a291e2da97fd646e7fa34fb92879fc3d6}
+Draws a navigation bar.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Current entry.\item[{\em \$entries}]Total number of entries.\item[{\em \$action}]Page action.\item[{\em \$extra}]Extra parameters. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_a4028def92d8511e525251ec7ab06246d}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webOpenTable@{webOpenTable}}
+\index{webOpenTable@{webOpenTable}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webOpenTable}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webOpenTable ()\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a4028def92d8511e525251ec7ab06246d}
+Draws tags for opening a table. \hypertarget{classCinisisDisplayHelper_a528283a8b16090918f1878dca5ee24fb}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webPre@{webPre}}
+\index{webPre@{webPre}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webPre}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webPre (\$ {\em text})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_a528283a8b16090918f1878dca5ee24fb}
+Draws a pre format block element.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$text}]Inner text. \end{DoxyParams}
+\hypertarget{classCinisisDisplayHelper_af3849efbba5e6980ddfdb4ceddb6ad17}{
+\index{CinisisDisplayHelper@{CinisisDisplayHelper}!webTitle@{webTitle}}
+\index{webTitle@{webTitle}!CinisisDisplayHelper@{CinisisDisplayHelper}}
+\subsubsection[{webTitle}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisDisplayHelper::webTitle (\$ {\em title})\hspace{0.3cm}{\ttfamily \mbox{[}static, protected\mbox{]}}}}
+\label{classCinisisDisplayHelper_af3849efbba5e6980ddfdb4ceddb6ad17}
+Draws a page title.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$title}]Page title; \end{DoxyParams}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/helpers/CinisisDisplayHelper.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classCinisisHttpHelper.tex b/doc/latex/classCinisisHttpHelper.tex
new file mode 100644
index 0000000..ca5bd6d
--- /dev/null
+++ b/doc/latex/classCinisisHttpHelper.tex
@@ -0,0 +1,63 @@
+\hypertarget{classCinisisHttpHelper}{
+\section{CinisisHttpHelper Class Reference}
+\label{classCinisisHttpHelper}\index{CinisisHttpHelper@{CinisisHttpHelper}}
+}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classCinisisHttpHelper_aabbbd96f654baf3086dfb83728b581fa}{get\_\-arg} (\$name, \$default=1)
+\item
+static \hyperlink{classCinisisHttpHelper_ac61168ccb1eb83a15bb82b012759d67e}{get\_\-numeric\_\-arg} (\$name)
+\item
+static \hyperlink{classCinisisHttpHelper_aa4c258abb234e9585d2215dfa44247ee}{get\_\-textual\_\-arg} (\$name)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Http helper for test scripts.
+
+\subsection{Member Function Documentation}
+\hypertarget{classCinisisHttpHelper_aabbbd96f654baf3086dfb83728b581fa}{
+\index{CinisisHttpHelper@{CinisisHttpHelper}!get\_\-arg@{get\_\-arg}}
+\index{get\_\-arg@{get\_\-arg}!CinisisHttpHelper@{CinisisHttpHelper}}
+\subsubsection[{get\_\-arg}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisHttpHelper::get\_\-arg (\$ {\em name}, \/ \$ {\em default} = {\ttfamily 1})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisHttpHelper_aabbbd96f654baf3086dfb83728b581fa}
+Get an argument.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Argument name.\item[{\em \$default}]Default value.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Argument value.
+\end{DoxyReturn}
+\hypertarget{classCinisisHttpHelper_ac61168ccb1eb83a15bb82b012759d67e}{
+\index{CinisisHttpHelper@{CinisisHttpHelper}!get\_\-numeric\_\-arg@{get\_\-numeric\_\-arg}}
+\index{get\_\-numeric\_\-arg@{get\_\-numeric\_\-arg}!CinisisHttpHelper@{CinisisHttpHelper}}
+\subsubsection[{get\_\-numeric\_\-arg}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisHttpHelper::get\_\-numeric\_\-arg (\$ {\em name})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisHttpHelper_ac61168ccb1eb83a15bb82b012759d67e}
+Get a numeric argument.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Argument name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Argument value.
+\end{DoxyReturn}
+\hypertarget{classCinisisHttpHelper_aa4c258abb234e9585d2215dfa44247ee}{
+\index{CinisisHttpHelper@{CinisisHttpHelper}!get\_\-textual\_\-arg@{get\_\-textual\_\-arg}}
+\index{get\_\-textual\_\-arg@{get\_\-textual\_\-arg}!CinisisHttpHelper@{CinisisHttpHelper}}
+\subsubsection[{get\_\-textual\_\-arg}]{\setlength{\rightskip}{0pt plus 5cm}static CinisisHttpHelper::get\_\-textual\_\-arg (\$ {\em name})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classCinisisHttpHelper_aa4c258abb234e9585d2215dfa44247ee}
+Get a string argument.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Argument name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Argument value.
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/helpers/CinisisHttpHelper.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisAudit.eps b/doc/latex/classIsisAudit.eps
new file mode 100644
index 0000000..cc7334b
--- /dev/null
+++ b/doc/latex/classIsisAudit.eps
@@ -0,0 +1,215 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 1030.93
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.485 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 5 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisAudit) cw
+(IsisFinder) cw
+(IsisConnector) cw
+(IsisMap) cw
+(IsisReader) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisAudit) 0 0 box
+ (IsisFinder) 0 1 box
+ (IsisConnector) 0 2 box
+ (IsisMap) 0 3 box
+ (IsisReader) 0 4 box
+
+% ----- relations -----
+
+solid
+0 0 0 out
+solid
+1 0 1 in
+solid
+0 0 1 out
+solid
+1 0 2 in
+solid
+0 0 2 out
+solid
+1 0 3 in
+solid
+0 0 3 out
+solid
+1 0 4 in
diff --git a/doc/latex/classIsisAudit.pdf b/doc/latex/classIsisAudit.pdf
new file mode 100644
index 0000000..1e3b1e2
--- /dev/null
+++ b/doc/latex/classIsisAudit.pdf
Binary files differ
diff --git a/doc/latex/classIsisAudit.tex b/doc/latex/classIsisAudit.tex
new file mode 100644
index 0000000..b8a5a71
--- /dev/null
+++ b/doc/latex/classIsisAudit.tex
@@ -0,0 +1,31 @@
+\hypertarget{classIsisAudit}{
+\section{IsisAudit Class Reference}
+\label{classIsisAudit}\index{IsisAudit@{IsisAudit}}
+}
+Inheritance diagram for IsisAudit:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=5cm]{classIsisAudit}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisAudit_a2fb1d5a12933f63f396188bc4229f671}{run} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Methods for auditing an Isis database.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisAudit_a2fb1d5a12933f63f396188bc4229f671}{
+\index{IsisAudit@{IsisAudit}!run@{run}}
+\index{run@{run}!IsisAudit@{IsisAudit}}
+\subsubsection[{run}]{\setlength{\rightskip}{0pt plus 5cm}IsisAudit::run ()}}
+\label{classIsisAudit_a2fb1d5a12933f63f396188bc4229f671}
+Run a standard audit procedure.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/IsisAudit.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisConnector.eps b/doc/latex/classIsisConnector.eps
new file mode 100644
index 0000000..c780276
--- /dev/null
+++ b/doc/latex/classIsisConnector.eps
@@ -0,0 +1,215 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 1030.93
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.485 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 5 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisConnector) cw
+(IsisMap) cw
+(IsisReader) cw
+(IsisFinder) cw
+(IsisAudit) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisConnector) 0 2 box
+ (IsisMap) 0 3 box
+ (IsisReader) 0 4 box
+ (IsisFinder) 0 1 box
+ (IsisAudit) 0 0 box
+
+% ----- relations -----
+
+solid
+0 0 2 out
+solid
+1 0 3 in
+solid
+0 0 3 out
+solid
+1 0 4 in
+solid
+1 0 1.25 out
+solid
+0 0 1.75 in
+solid
+1 0 0.25 out
+solid
+0 0 0.75 in
diff --git a/doc/latex/classIsisConnector.pdf b/doc/latex/classIsisConnector.pdf
new file mode 100644
index 0000000..593a8a6
--- /dev/null
+++ b/doc/latex/classIsisConnector.pdf
Binary files differ
diff --git a/doc/latex/classIsisConnector.tex b/doc/latex/classIsisConnector.tex
new file mode 100644
index 0000000..e090fb8
--- /dev/null
+++ b/doc/latex/classIsisConnector.tex
@@ -0,0 +1,281 @@
+\hypertarget{classIsisConnector}{
+\section{IsisConnector Class Reference}
+\label{classIsisConnector}\index{IsisConnector@{IsisConnector}}
+}
+Inheritance diagram for IsisConnector:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=5cm]{classIsisConnector}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisConnector_a0d1ebc176fe54568044aae02d7932c9b}{getRows} (\$field)
+\item
+\hyperlink{classIsisConnector_ad806dcc5be703fe9aea63d72d68af0a2}{getValues} (\$field)
+\item
+\hyperlink{classIsisConnector_aa16bb24a54837048eee6244957cbf091}{getItem} (\$field, \$item, \$row=0)
+\item
+\hyperlink{classIsisConnector_aa928456a26e0264bf0c1a4869a02cbb3}{getItems} (\$field, \$item)
+\item
+\hyperlink{classIsisConnector_a21c7c4e9fec2440f8c7d36f8a632c8c2}{getMainItem} (\$field, \$row=0)
+\item
+\hyperlink{classIsisConnector_a2bace7162ec3bf49df9f7acd9367c360}{getMainItems} (\$field)
+\item
+\hyperlink{classIsisConnector_a1ddaff24266ee02d652de9a752c1be8e}{getSubfield} (\$field, \$subfield, \$row=0)
+\item
+\hyperlink{classIsisConnector_ad8af0f5cef3b139649d9fb317264df10}{getSubfields} (\$field, \$subfield)
+\item
+\hyperlink{classIsisConnector_afc97554b42b8b9e98f396811bbfa13d8}{explodeSubfield} (\$field, \$subfield, \$row)
+\item
+\hyperlink{classIsisConnector_acfea4d86a683cc7455d258cdb80db478}{explodeItem} (\$field, \$item, \$row)
+\item
+\hyperlink{classIsisConnector_a8baad24b6abc2ef29d8968f353ea6dae}{filterSubfield} (\$field, \$subfield, \$row)
+\item
+\hyperlink{classIsisConnector_ad88ed9012aac0687aef1c8554879cd52}{hasItem} (\$field, \$item, \$row=0)
+\item
+\hyperlink{classIsisConnector_a7bc914f2aa6c523404f368dc0b7b130b}{hasMainItem} (\$field, \$row)
+\item
+\hyperlink{classIsisConnector_a2e6970a3aca76a1dbb5b4bb5ac3adda1}{hasSubfield} (\$field, \$subfield, \$row)
+\item
+\hyperlink{classIsisConnector_a10669b49c4145a86dc3662c77733d74d}{existingItemKeys} (\$field, \$row=0)
+\item
+\hyperlink{classIsisConnector_afbcef48a723b073a2777d5a5ed73d280}{hasFieldSubfieldCondition} (\$field, \$subfield, \$key, \$subkey)
+\item
+\hyperlink{classIsisConnector_a9050227e8d8f10821a4df08a5705832a}{specialItem} (\$field, \$subfield, \$return= 'boolean')
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+\hyperlink{classIsisConnector}{IsisConnector}: provides an easy interface to connect an application with \hyperlink{classCinisis}{Cinisis}.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisConnector_a10669b49c4145a86dc3662c77733d74d}{
+\index{IsisConnector@{IsisConnector}!existingItemKeys@{existingItemKeys}}
+\index{existingItemKeys@{existingItemKeys}!IsisConnector@{IsisConnector}}
+\subsubsection[{existingItemKeys}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::existingItemKeys (\$ {\em field}, \/ \$ {\em row} = {\ttfamily 0})}}
+\label{classIsisConnector_a10669b49c4145a86dc3662c77733d74d}
+Return the existing key items for a result.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with existing item keys
+\end{DoxyReturn}
+\begin{Desc}
+\item[\hyperlink{todo__todo000001}{Todo}]Test. \end{Desc}
+\hypertarget{classIsisConnector_acfea4d86a683cc7455d258cdb80db478}{
+\index{IsisConnector@{IsisConnector}!explodeItem@{explodeItem}}
+\index{explodeItem@{explodeItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{explodeItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::explodeItem (\$ {\em field}, \/ \$ {\em item}, \/ \$ {\em row})}}
+\label{classIsisConnector_acfea4d86a683cc7455d258cdb80db478}
+Explode brackets for a given item, avoiding null entries.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$item}]Item.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Exploded item data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_afc97554b42b8b9e98f396811bbfa13d8}{
+\index{IsisConnector@{IsisConnector}!explodeSubfield@{explodeSubfield}}
+\index{explodeSubfield@{explodeSubfield}!IsisConnector@{IsisConnector}}
+\subsubsection[{explodeSubfield}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::explodeSubfield (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em row})}}
+\label{classIsisConnector_afc97554b42b8b9e98f396811bbfa13d8}
+Explode brackets for a given subfield, avoiding null entries.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Exploded subfield data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a8baad24b6abc2ef29d8968f353ea6dae}{
+\index{IsisConnector@{IsisConnector}!filterSubfield@{filterSubfield}}
+\index{filterSubfield@{filterSubfield}!IsisConnector@{IsisConnector}}
+\subsubsection[{filterSubfield}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::filterSubfield (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em row})}}
+\label{classIsisConnector_a8baad24b6abc2ef29d8968f353ea6dae}
+Filter brackets for a given subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Filterd subfield data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_aa16bb24a54837048eee6244957cbf091}{
+\index{IsisConnector@{IsisConnector}!getItem@{getItem}}
+\index{getItem@{getItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{getItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getItem (\$ {\em field}, \/ \$ {\em item}, \/ \$ {\em row} = {\ttfamily 0})}}
+\label{classIsisConnector_aa16bb24a54837048eee6244957cbf091}
+Get both main field or subfields from a given field and row.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]field array.\item[{\em \$item}]item name (field or subfield).\item[{\em \$row}]row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Item data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_aa928456a26e0264bf0c1a4869a02cbb3}{
+\index{IsisConnector@{IsisConnector}!getItems@{getItems}}
+\index{getItems@{getItems}!IsisConnector@{IsisConnector}}
+\subsubsection[{getItems}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getItems (\$ {\em field}, \/ \$ {\em item})}}
+\label{classIsisConnector_aa928456a26e0264bf0c1a4869a02cbb3}
+Get all rows both main field or subfields from a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]field array.\item[{\em \$item}]item name (field or subfield).\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Item data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a21c7c4e9fec2440f8c7d36f8a632c8c2}{
+\index{IsisConnector@{IsisConnector}!getMainItem@{getMainItem}}
+\index{getMainItem@{getMainItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{getMainItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getMainItem (\$ {\em field}, \/ \$ {\em row} = {\ttfamily 0})}}
+\label{classIsisConnector_a21c7c4e9fec2440f8c7d36f8a632c8c2}
+Get the value of a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$row}]Optional row number if repetitive field.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a2bace7162ec3bf49df9f7acd9367c360}{
+\index{IsisConnector@{IsisConnector}!getMainItems@{getMainItems}}
+\index{getMainItems@{getMainItems}!IsisConnector@{IsisConnector}}
+\subsubsection[{getMainItems}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getMainItems (\$ {\em field})}}
+\label{classIsisConnector_a2bace7162ec3bf49df9f7acd9367c360}
+Get all values of a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a0d1ebc176fe54568044aae02d7932c9b}{
+\index{IsisConnector@{IsisConnector}!getRows@{getRows}}
+\index{getRows@{getRows}!IsisConnector@{IsisConnector}}
+\subsubsection[{getRows}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getRows (\$ {\em field})}}
+\label{classIsisConnector_a0d1ebc176fe54568044aae02d7932c9b}
+Get the number of resulting rows for a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Number of rows.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a1ddaff24266ee02d652de9a752c1be8e}{
+\index{IsisConnector@{IsisConnector}!getSubfield@{getSubfield}}
+\index{getSubfield@{getSubfield}!IsisConnector@{IsisConnector}}
+\subsubsection[{getSubfield}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getSubfield (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em row} = {\ttfamily 0})}}
+\label{classIsisConnector_a1ddaff24266ee02d652de9a752c1be8e}
+Get the value of a given subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$subfield}]Subfield name.\item[{\em \$row}]Row number if repetitive data.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Subfield data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_ad8af0f5cef3b139649d9fb317264df10}{
+\index{IsisConnector@{IsisConnector}!getSubfields@{getSubfields}}
+\index{getSubfields@{getSubfields}!IsisConnector@{IsisConnector}}
+\subsubsection[{getSubfields}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getSubfields (\$ {\em field}, \/ \$ {\em subfield})}}
+\label{classIsisConnector_ad8af0f5cef3b139649d9fb317264df10}
+Get all values of a given subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$subfield}]Subfield name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Subfield data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_ad806dcc5be703fe9aea63d72d68af0a2}{
+\index{IsisConnector@{IsisConnector}!getValues@{getValues}}
+\index{getValues@{getValues}!IsisConnector@{IsisConnector}}
+\subsubsection[{getValues}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::getValues (\$ {\em field})}}
+\label{classIsisConnector_ad806dcc5be703fe9aea63d72d68af0a2}
+Get all values of a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field data.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_afbcef48a723b073a2777d5a5ed73d280}{
+\index{IsisConnector@{IsisConnector}!hasFieldSubfieldCondition@{hasFieldSubfieldCondition}}
+\index{hasFieldSubfieldCondition@{hasFieldSubfieldCondition}!IsisConnector@{IsisConnector}}
+\subsubsection[{hasFieldSubfieldCondition}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::hasFieldSubfieldCondition (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em key}, \/ \$ {\em subkey})}}
+\label{classIsisConnector_afbcef48a723b073a2777d5a5ed73d280}
+Check if a field and subfield match a given condition.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield.\item[{\em \$key}]Field key.\item[{\em \$subkey}]Subfield key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if condition match, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_ad88ed9012aac0687aef1c8554879cd52}{
+\index{IsisConnector@{IsisConnector}!hasItem@{hasItem}}
+\index{hasItem@{hasItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{hasItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::hasItem (\$ {\em field}, \/ \$ {\em item}, \/ \$ {\em row} = {\ttfamily 0})}}
+\label{classIsisConnector_ad88ed9012aac0687aef1c8554879cd52}
+Check if a field result has an item.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$item}]Item code ('main' for the main item).\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if result has the main item, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a7bc914f2aa6c523404f368dc0b7b130b}{
+\index{IsisConnector@{IsisConnector}!hasMainItem@{hasMainItem}}
+\index{hasMainItem@{hasMainItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{hasMainItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::hasMainItem (\$ {\em field}, \/ \$ {\em row})}}
+\label{classIsisConnector_a7bc914f2aa6c523404f368dc0b7b130b}
+Check if a field result has a main item.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if result has the main item, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a2e6970a3aca76a1dbb5b4bb5ac3adda1}{
+\index{IsisConnector@{IsisConnector}!hasSubfield@{hasSubfield}}
+\index{hasSubfield@{hasSubfield}!IsisConnector@{IsisConnector}}
+\subsubsection[{hasSubfield}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::hasSubfield (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em row})}}
+\label{classIsisConnector_a2e6970a3aca76a1dbb5b4bb5ac3adda1}
+Check if a field result and row has a given subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield.\item[{\em \$row}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if result has the subfield, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisConnector_a9050227e8d8f10821a4df08a5705832a}{
+\index{IsisConnector@{IsisConnector}!specialItem@{specialItem}}
+\index{specialItem@{specialItem}!IsisConnector@{IsisConnector}}
+\subsubsection[{specialItem}]{\setlength{\rightskip}{0pt plus 5cm}IsisConnector::specialItem (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em return} = {\ttfamily 'boolean'})}}
+\label{classIsisConnector_a9050227e8d8f10821a4df08a5705832a}
+Deal with special items.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data from ISIS database schema.\item[{\em \$subfield}]Subfield name.\item[{\em \$return}]Specify return type.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if special subfield, false otherwise of special return type
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/IsisConnector.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisEntryIterator.tex b/doc/latex/classIsisEntryIterator.tex
new file mode 100644
index 0000000..07f9418
--- /dev/null
+++ b/doc/latex/classIsisEntryIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisEntryIterator}{
+\section{IsisEntryIterator Class Reference}
+\label{classIsisEntryIterator}\index{IsisEntryIterator@{IsisEntryIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisEntryIterator_a056fcc7d817523faf1fb033fa9f8ad6e}{\_\-\_\-construct} (\$class, \$entry=1)
+\item
+\hyperlink{classIsisEntryIterator_a985e88cdfb69b42e3389f24c08b2404a}{rewind} ()
+\item
+\hyperlink{classIsisEntryIterator_a4a740dacedb86023ece4561092c33a65}{key} ()
+\item
+\hyperlink{classIsisEntryIterator_ac482f43403fc4d2e1b620fb4e0f6797f}{current} ()
+\item
+\hyperlink{classIsisEntryIterator_a2d1d0fe5d3c22d1720e93e03952b877d}{next} ()
+\item
+\hyperlink{classIsisEntryIterator_aff9e54b112cc728b7cd6cf00c0359c49}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis entry iterator. Iterates over all entries in the database.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisEntryIterator_a056fcc7d817523faf1fb033fa9f8ad6e}{
+\index{IsisEntryIterator@{IsisEntryIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em entry} = {\ttfamily 1})}}
+\label{classIsisEntryIterator_a056fcc7d817523faf1fb033fa9f8ad6e}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$entry}]Start entry number to iterate from. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisEntryIterator_ac482f43403fc4d2e1b620fb4e0f6797f}{
+\index{IsisEntryIterator@{IsisEntryIterator}!current@{current}}
+\index{current@{current}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::current ()}}
+\label{classIsisEntryIterator_ac482f43403fc4d2e1b620fb4e0f6797f}
+Return the current element. \hypertarget{classIsisEntryIterator_a4a740dacedb86023ece4561092c33a65}{
+\index{IsisEntryIterator@{IsisEntryIterator}!key@{key}}
+\index{key@{key}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::key ()}}
+\label{classIsisEntryIterator_a4a740dacedb86023ece4561092c33a65}
+Return the key of the current element. \hypertarget{classIsisEntryIterator_a2d1d0fe5d3c22d1720e93e03952b877d}{
+\index{IsisEntryIterator@{IsisEntryIterator}!next@{next}}
+\index{next@{next}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::next ()}}
+\label{classIsisEntryIterator_a2d1d0fe5d3c22d1720e93e03952b877d}
+Move forward to next element. \hypertarget{classIsisEntryIterator_a985e88cdfb69b42e3389f24c08b2404a}{
+\index{IsisEntryIterator@{IsisEntryIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::rewind ()}}
+\label{classIsisEntryIterator_a985e88cdfb69b42e3389f24c08b2404a}
+Rewind the Iterator to the first element. \hypertarget{classIsisEntryIterator_aff9e54b112cc728b7cd6cf00c0359c49}{
+\index{IsisEntryIterator@{IsisEntryIterator}!valid@{valid}}
+\index{valid@{valid}!IsisEntryIterator@{IsisEntryIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisEntryIterator::valid ()}}
+\label{classIsisEntryIterator_aff9e54b112cc728b7cd6cf00c0359c49}
+Check if there is a current element after calls to \hyperlink{classIsisEntryIterator_a985e88cdfb69b42e3389f24c08b2404a}{rewind()} or \hyperlink{classIsisEntryIterator_a2d1d0fe5d3c22d1720e93e03952b877d}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisEntryIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisFieldIterator.tex b/doc/latex/classIsisFieldIterator.tex
new file mode 100644
index 0000000..191d4c9
--- /dev/null
+++ b/doc/latex/classIsisFieldIterator.tex
@@ -0,0 +1,82 @@
+\hypertarget{classIsisFieldIterator}{
+\section{IsisFieldIterator Class Reference}
+\label{classIsisFieldIterator}\index{IsisFieldIterator@{IsisFieldIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisFieldIterator_a6be7899f5131064d980017dbaa892a1f}{\_\-\_\-construct} (\$class, \$field)
+\item
+\hyperlink{classIsisFieldIterator_a19e38c95726a11124f0a46228095cea0}{rewind} ()
+\item
+\hyperlink{classIsisFieldIterator_afad4839168701adff27f1037b2d8fafc}{key} ()
+\item
+\hyperlink{classIsisFieldIterator_a23a9cbf26e7786777bca2c7a0cb3d87e}{current} ()
+\item
+\hyperlink{classIsisFieldIterator_a7a8b7866abd01b6e7ea07c7bb24e9de0}{next} ()
+\item
+\hyperlink{classIsisFieldIterator_aff5eab62ba63049c0c09609300dfd348}{has\_\-more\_\-rows} ()
+\item
+\hyperlink{classIsisFieldIterator_a0904dcbdd044353ef339c4f1a96d4387}{current\_\-null} ()
+\item
+\hyperlink{classIsisFieldIterator_a030cf47b3e4d174e9409c635ce1b49c7}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis field iterator. Iterates over all field values for each result row.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisFieldIterator_a6be7899f5131064d980017dbaa892a1f}{
+\index{IsisFieldIterator@{IsisFieldIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field})}}
+\label{classIsisFieldIterator_a6be7899f5131064d980017dbaa892a1f}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisFieldIterator_a23a9cbf26e7786777bca2c7a0cb3d87e}{
+\index{IsisFieldIterator@{IsisFieldIterator}!current@{current}}
+\index{current@{current}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::current ()}}
+\label{classIsisFieldIterator_a23a9cbf26e7786777bca2c7a0cb3d87e}
+Return the current element. \hypertarget{classIsisFieldIterator_a0904dcbdd044353ef339c4f1a96d4387}{
+\index{IsisFieldIterator@{IsisFieldIterator}!current\_\-null@{current\_\-null}}
+\index{current\_\-null@{current\_\-null}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{current\_\-null}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::current\_\-null ()}}
+\label{classIsisFieldIterator_a0904dcbdd044353ef339c4f1a96d4387}
+Check if the current value is null. \hypertarget{classIsisFieldIterator_aff5eab62ba63049c0c09609300dfd348}{
+\index{IsisFieldIterator@{IsisFieldIterator}!has\_\-more\_\-rows@{has\_\-more\_\-rows}}
+\index{has\_\-more\_\-rows@{has\_\-more\_\-rows}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{has\_\-more\_\-rows}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::has\_\-more\_\-rows ()}}
+\label{classIsisFieldIterator_aff5eab62ba63049c0c09609300dfd348}
+Check if there are more rows. \hypertarget{classIsisFieldIterator_afad4839168701adff27f1037b2d8fafc}{
+\index{IsisFieldIterator@{IsisFieldIterator}!key@{key}}
+\index{key@{key}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::key ()}}
+\label{classIsisFieldIterator_afad4839168701adff27f1037b2d8fafc}
+Return the key of the current element. \hypertarget{classIsisFieldIterator_a7a8b7866abd01b6e7ea07c7bb24e9de0}{
+\index{IsisFieldIterator@{IsisFieldIterator}!next@{next}}
+\index{next@{next}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::next ()}}
+\label{classIsisFieldIterator_a7a8b7866abd01b6e7ea07c7bb24e9de0}
+Move forward to next element. \hypertarget{classIsisFieldIterator_a19e38c95726a11124f0a46228095cea0}{
+\index{IsisFieldIterator@{IsisFieldIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::rewind ()}}
+\label{classIsisFieldIterator_a19e38c95726a11124f0a46228095cea0}
+Rewind the Iterator to the first element. \hypertarget{classIsisFieldIterator_a030cf47b3e4d174e9409c635ce1b49c7}{
+\index{IsisFieldIterator@{IsisFieldIterator}!valid@{valid}}
+\index{valid@{valid}!IsisFieldIterator@{IsisFieldIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisFieldIterator::valid ()}}
+\label{classIsisFieldIterator_a030cf47b3e4d174e9409c635ce1b49c7}
+Check if there is a current element after calls to \hyperlink{classIsisFieldIterator_a19e38c95726a11124f0a46228095cea0}{rewind()} or \hyperlink{classIsisFieldIterator_a7a8b7866abd01b6e7ea07c7bb24e9de0}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisFieldIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisFinder.eps b/doc/latex/classIsisFinder.eps
new file mode 100644
index 0000000..4401a3c
--- /dev/null
+++ b/doc/latex/classIsisFinder.eps
@@ -0,0 +1,215 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 1030.93
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.485 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 5 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisFinder) cw
+(IsisConnector) cw
+(IsisMap) cw
+(IsisReader) cw
+(IsisAudit) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisFinder) 0 1 box
+ (IsisConnector) 0 2 box
+ (IsisMap) 0 3 box
+ (IsisReader) 0 4 box
+ (IsisAudit) 0 0 box
+
+% ----- relations -----
+
+solid
+0 0 1 out
+solid
+1 0 2 in
+solid
+0 0 2 out
+solid
+1 0 3 in
+solid
+0 0 3 out
+solid
+1 0 4 in
+solid
+1 0 0.25 out
+solid
+0 0 0.75 in
diff --git a/doc/latex/classIsisFinder.pdf b/doc/latex/classIsisFinder.pdf
new file mode 100644
index 0000000..e53403e
--- /dev/null
+++ b/doc/latex/classIsisFinder.pdf
Binary files differ
diff --git a/doc/latex/classIsisFinder.tex b/doc/latex/classIsisFinder.tex
new file mode 100644
index 0000000..fb78842
--- /dev/null
+++ b/doc/latex/classIsisFinder.tex
@@ -0,0 +1,84 @@
+\hypertarget{classIsisFinder}{
+\section{IsisFinder Class Reference}
+\label{classIsisFinder}\index{IsisFinder@{IsisFinder}}
+}
+Inheritance diagram for IsisFinder:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=5cm]{classIsisFinder}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisFinder_ac4e3a8f45995cbf940b3f2899b71bd1e}{nextRepetition} (\$field, \$entry=1)
+\item
+\hyperlink{classIsisFinder_a7d708e281bea35ee38f5875c8f2cad8d}{nextField} (\$field, \$entry=1)
+\item
+\hyperlink{classIsisFinder_aa367980783d341197e003684a639ff1a}{nextSubfield} (\$field, \$subfield, \$entry=1)
+\item
+\hyperlink{classIsisFinder_a41410b18c4462c05ac669e4ee889d8a7}{hasSubfieldInRows} (\$field, \$subfield)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Provides Isis Database search methods.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisFinder_a41410b18c4462c05ac669e4ee889d8a7}{
+\index{IsisFinder@{IsisFinder}!hasSubfieldInRows@{hasSubfieldInRows}}
+\index{hasSubfieldInRows@{hasSubfieldInRows}!IsisFinder@{IsisFinder}}
+\subsubsection[{hasSubfieldInRows}]{\setlength{\rightskip}{0pt plus 5cm}IsisFinder::hasSubfieldInRows (\$ {\em field}, \/ \$ {\em subfield})}}
+\label{classIsisFinder_a41410b18c4462c05ac669e4ee889d8a7}
+Check if a field result has a given subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if result has the subfield, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisFinder_a7d708e281bea35ee38f5875c8f2cad8d}{
+\index{IsisFinder@{IsisFinder}!nextField@{nextField}}
+\index{nextField@{nextField}!IsisFinder@{IsisFinder}}
+\subsubsection[{nextField}]{\setlength{\rightskip}{0pt plus 5cm}IsisFinder::nextField (\$ {\em field}, \/ \$ {\em entry} = {\ttfamily 1})}}
+\label{classIsisFinder_a7d708e281bea35ee38f5875c8f2cad8d}
+Find the next occurrence of a field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Start entry number to begin the search.\item[{\em \$field}]Field data.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Next occurrence.
+\end{DoxyReturn}
+\hypertarget{classIsisFinder_ac4e3a8f45995cbf940b3f2899b71bd1e}{
+\index{IsisFinder@{IsisFinder}!nextRepetition@{nextRepetition}}
+\index{nextRepetition@{nextRepetition}!IsisFinder@{IsisFinder}}
+\subsubsection[{nextRepetition}]{\setlength{\rightskip}{0pt plus 5cm}IsisFinder::nextRepetition (\$ {\em field}, \/ \$ {\em entry} = {\ttfamily 1})}}
+\label{classIsisFinder_ac4e3a8f45995cbf940b3f2899b71bd1e}
+Find the next repetition of a field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Start entry number to begin the search.\item[{\em \$field}]Field data.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Next repetition entry and result.
+\end{DoxyReturn}
+\hypertarget{classIsisFinder_aa367980783d341197e003684a639ff1a}{
+\index{IsisFinder@{IsisFinder}!nextSubfield@{nextSubfield}}
+\index{nextSubfield@{nextSubfield}!IsisFinder@{IsisFinder}}
+\subsubsection[{nextSubfield}]{\setlength{\rightskip}{0pt plus 5cm}IsisFinder::nextSubfield (\$ {\em field}, \/ \$ {\em subfield}, \/ \$ {\em entry} = {\ttfamily 1})}}
+\label{classIsisFinder_aa367980783d341197e003684a639ff1a}
+Find the next occurrence of a subfield.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Start entry number to begin the search.\item[{\em \$field}]Field data.\item[{\em \$subfield}]Subfield name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Next occurrence.
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/IsisFinder.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisItemIterator.tex b/doc/latex/classIsisItemIterator.tex
new file mode 100644
index 0000000..ba95027
--- /dev/null
+++ b/doc/latex/classIsisItemIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisItemIterator}{
+\section{IsisItemIterator Class Reference}
+\label{classIsisItemIterator}\index{IsisItemIterator@{IsisItemIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisItemIterator_a6ee7fe126baaffa77ad2cf177fefc46a}{\_\-\_\-construct} (\$class, \$field, \$main=false)
+\item
+\hyperlink{classIsisItemIterator_ab87a4387a9fd745366ccf8e138a9f60c}{rewind} ()
+\item
+\hyperlink{classIsisItemIterator_ab51757f546b7d9efb9decd701a38b8b5}{key} ()
+\item
+\hyperlink{classIsisItemIterator_a3f602399a600d7b95d23b87111d0e72b}{current} ()
+\item
+\hyperlink{classIsisItemIterator_a17c6a2e50a0ca67feb92f4ffc4cbec23}{next} ()
+\item
+\hyperlink{classIsisItemIterator_aacea6ed6fd269ef1549ce86820da8b3b}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis field iterator. Iterates over a field for each result row.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisItemIterator_a6ee7fe126baaffa77ad2cf177fefc46a}{
+\index{IsisItemIterator@{IsisItemIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field}, \/ \$ {\em main} = {\ttfamily false})}}
+\label{classIsisItemIterator_a6ee7fe126baaffa77ad2cf177fefc46a}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over.\item[{\em \$main}]Control to which item the main field should be mapped to. By default no mapping is made. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisItemIterator_a3f602399a600d7b95d23b87111d0e72b}{
+\index{IsisItemIterator@{IsisItemIterator}!current@{current}}
+\index{current@{current}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::current ()}}
+\label{classIsisItemIterator_a3f602399a600d7b95d23b87111d0e72b}
+Return the current element. \hypertarget{classIsisItemIterator_ab51757f546b7d9efb9decd701a38b8b5}{
+\index{IsisItemIterator@{IsisItemIterator}!key@{key}}
+\index{key@{key}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::key ()}}
+\label{classIsisItemIterator_ab51757f546b7d9efb9decd701a38b8b5}
+Return the key of the current element. \hypertarget{classIsisItemIterator_a17c6a2e50a0ca67feb92f4ffc4cbec23}{
+\index{IsisItemIterator@{IsisItemIterator}!next@{next}}
+\index{next@{next}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::next ()}}
+\label{classIsisItemIterator_a17c6a2e50a0ca67feb92f4ffc4cbec23}
+Move forward to next element. \hypertarget{classIsisItemIterator_ab87a4387a9fd745366ccf8e138a9f60c}{
+\index{IsisItemIterator@{IsisItemIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::rewind ()}}
+\label{classIsisItemIterator_ab87a4387a9fd745366ccf8e138a9f60c}
+Rewind the Iterator to the first element. \hypertarget{classIsisItemIterator_aacea6ed6fd269ef1549ce86820da8b3b}{
+\index{IsisItemIterator@{IsisItemIterator}!valid@{valid}}
+\index{valid@{valid}!IsisItemIterator@{IsisItemIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisItemIterator::valid ()}}
+\label{classIsisItemIterator_aacea6ed6fd269ef1549ce86820da8b3b}
+Check if there is a current element after calls to \hyperlink{classIsisItemIterator_ab87a4387a9fd745366ccf8e138a9f60c}{rewind()} or \hyperlink{classIsisItemIterator_a17c6a2e50a0ca67feb92f4ffc4cbec23}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisItemIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisMainItemIterator.tex b/doc/latex/classIsisMainItemIterator.tex
new file mode 100644
index 0000000..e89dc99
--- /dev/null
+++ b/doc/latex/classIsisMainItemIterator.tex
@@ -0,0 +1,82 @@
+\hypertarget{classIsisMainItemIterator}{
+\section{IsisMainItemIterator Class Reference}
+\label{classIsisMainItemIterator}\index{IsisMainItemIterator@{IsisMainItemIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisMainItemIterator_a486e2d00fe13ed908b7384d64fd5f6f0}{\_\-\_\-construct} (\$class, \$field)
+\item
+\hyperlink{classIsisMainItemIterator_a37bf1484646334c5c41d3f7f50558b07}{rewind} ()
+\item
+\hyperlink{classIsisMainItemIterator_a3676fc993eb38641c65363f2e05873f3}{key} ()
+\item
+\hyperlink{classIsisMainItemIterator_adab612db1a4e1f16c6bc5848c3d4ee21}{current} ()
+\item
+\hyperlink{classIsisMainItemIterator_af63043a1ab350854c0a30561ccb42dae}{next} ()
+\item
+\hyperlink{classIsisMainItemIterator_a6c406f34a89316ff7e7fa15a80806b39}{has\_\-more\_\-rows} ()
+\item
+\hyperlink{classIsisMainItemIterator_ad0f3d297912d5101d5227139f8414c80}{current\_\-null} ()
+\item
+\hyperlink{classIsisMainItemIterator_a376387f6168a95890fc9f3a441967135}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis field iterator. Iterates over all field main values for each result row.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisMainItemIterator_a486e2d00fe13ed908b7384d64fd5f6f0}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field})}}
+\label{classIsisMainItemIterator_a486e2d00fe13ed908b7384d64fd5f6f0}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisMainItemIterator_adab612db1a4e1f16c6bc5848c3d4ee21}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!current@{current}}
+\index{current@{current}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::current ()}}
+\label{classIsisMainItemIterator_adab612db1a4e1f16c6bc5848c3d4ee21}
+Return the current element. \hypertarget{classIsisMainItemIterator_ad0f3d297912d5101d5227139f8414c80}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!current\_\-null@{current\_\-null}}
+\index{current\_\-null@{current\_\-null}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{current\_\-null}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::current\_\-null ()}}
+\label{classIsisMainItemIterator_ad0f3d297912d5101d5227139f8414c80}
+Check if the current value is null. \hypertarget{classIsisMainItemIterator_a6c406f34a89316ff7e7fa15a80806b39}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!has\_\-more\_\-rows@{has\_\-more\_\-rows}}
+\index{has\_\-more\_\-rows@{has\_\-more\_\-rows}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{has\_\-more\_\-rows}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::has\_\-more\_\-rows ()}}
+\label{classIsisMainItemIterator_a6c406f34a89316ff7e7fa15a80806b39}
+Check if there are more rows. \hypertarget{classIsisMainItemIterator_a3676fc993eb38641c65363f2e05873f3}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!key@{key}}
+\index{key@{key}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::key ()}}
+\label{classIsisMainItemIterator_a3676fc993eb38641c65363f2e05873f3}
+Return the key of the current element. \hypertarget{classIsisMainItemIterator_af63043a1ab350854c0a30561ccb42dae}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!next@{next}}
+\index{next@{next}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::next ()}}
+\label{classIsisMainItemIterator_af63043a1ab350854c0a30561ccb42dae}
+Move forward to next element. \hypertarget{classIsisMainItemIterator_a37bf1484646334c5c41d3f7f50558b07}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::rewind ()}}
+\label{classIsisMainItemIterator_a37bf1484646334c5c41d3f7f50558b07}
+Rewind the Iterator to the first element. \hypertarget{classIsisMainItemIterator_a376387f6168a95890fc9f3a441967135}{
+\index{IsisMainItemIterator@{IsisMainItemIterator}!valid@{valid}}
+\index{valid@{valid}!IsisMainItemIterator@{IsisMainItemIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisMainItemIterator::valid ()}}
+\label{classIsisMainItemIterator_a376387f6168a95890fc9f3a441967135}
+Check if there is a current element after calls to \hyperlink{classIsisMainItemIterator_a37bf1484646334c5c41d3f7f50558b07}{rewind()} or \hyperlink{classIsisMainItemIterator_af63043a1ab350854c0a30561ccb42dae}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisMainItemIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisMap.eps b/doc/latex/classIsisMap.eps
new file mode 100644
index 0000000..d1fdab3
--- /dev/null
+++ b/doc/latex/classIsisMap.eps
@@ -0,0 +1,215 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 1030.93
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.485 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 5 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisMap) cw
+(IsisReader) cw
+(IsisConnector) cw
+(IsisFinder) cw
+(IsisAudit) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisMap) 0 3 box
+ (IsisReader) 0 4 box
+ (IsisConnector) 0 2 box
+ (IsisFinder) 0 1 box
+ (IsisAudit) 0 0 box
+
+% ----- relations -----
+
+solid
+0 0 3 out
+solid
+1 0 4 in
+solid
+1 0 2.25 out
+solid
+0 0 2.75 in
+solid
+1 0 1.25 out
+solid
+0 0 1.75 in
+solid
+1 0 0.25 out
+solid
+0 0 0.75 in
diff --git a/doc/latex/classIsisMap.pdf b/doc/latex/classIsisMap.pdf
new file mode 100644
index 0000000..7eba2cf
--- /dev/null
+++ b/doc/latex/classIsisMap.pdf
Binary files differ
diff --git a/doc/latex/classIsisMap.tex b/doc/latex/classIsisMap.tex
new file mode 100644
index 0000000..8d21717
--- /dev/null
+++ b/doc/latex/classIsisMap.tex
@@ -0,0 +1,261 @@
+\hypertarget{classIsisMap}{
+\section{IsisMap Class Reference}
+\label{classIsisMap}\index{IsisMap@{IsisMap}}
+}
+Inheritance diagram for IsisMap:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=5cm]{classIsisMap}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisMap_af689f27e67b0b38a3e880ead17a487f5}{getMainItemName} (\$field)
+\item
+\hyperlink{classIsisMap_ad0b61ec2fbfb011db4bf89c5f54efab4}{getSubfieldList} (\$field)
+\item
+\hyperlink{classIsisMap_a29eb2c45b51f95fdfb9ff7af770ca6ce}{getMap} (\$field, \$subfield=NULL)
+\item
+\hyperlink{classIsisMap_a62b933be483fb6704e12e41f10286cd5}{getMapType} (\$field)
+\item
+\hyperlink{classIsisMap_af94e1fc5d73a6272f04a60c0acaeb409}{fieldHasMap} (\$field)
+\item
+\hyperlink{classIsisMap_ab5493af644e529c11a3c3e6edc37c3b9}{subfieldHasMap} (\$field, \$subfield)
+\item
+\hyperlink{classIsisMap_ae5d904b8407b38751656715fb9efd7cf}{getSubfieldKey} (\$field, \$subfield)
+\item
+\hyperlink{classIsisMap_a994934784caa4149737bda55160a459f}{getItemKey} (\$field, \$item)
+\item
+\hyperlink{classIsisMap_ac6a4eed048ddfa62c76e6d813754af81}{getFieldKey} (\$field)
+\item
+\hyperlink{classIsisMap_aee1953b6e46b1612c725b2da82414d14}{getFieldArray} (\$field\_\-key)
+\item
+\hyperlink{classIsisMap_a83ffdd84c385513a09e5ab523a44d6f2}{getSubfieldName} (\$field\_\-key, \$subfield\_\-key)
+\item
+\hyperlink{classIsisMap_ae41313537e399f15ff16a4db887cf5b9}{getFieldName} (\$field\_\-key)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classIsisMap_af80aedabfeca623a9022dfcbc95d591c}{methodName} (\$type)
+\item
+static \hyperlink{classIsisMap_ae2abf0591a4862f537fa23537ffca705}{normalizeFieldName} (\$name)
+\item
+static \hyperlink{classIsisMap_a7f1b9b1cce7a02dea704a40ca85e2117}{mapName} (\$name)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Provides mappings and schema functionalities around \hyperlink{classCinisis}{Cinisis}.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisMap_af94e1fc5d73a6272f04a60c0acaeb409}{
+\index{IsisMap@{IsisMap}!fieldHasMap@{fieldHasMap}}
+\index{fieldHasMap@{fieldHasMap}!IsisMap@{IsisMap}}
+\subsubsection[{fieldHasMap}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::fieldHasMap (\$ {\em field})}}
+\label{classIsisMap_af94e1fc5d73a6272f04a60c0acaeb409}
+Check on an ISIS schema whether a field has a map.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+TRUE if field has a map, FALSE otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_aee1953b6e46b1612c725b2da82414d14}{
+\index{IsisMap@{IsisMap}!getFieldArray@{getFieldArray}}
+\index{getFieldArray@{getFieldArray}!IsisMap@{IsisMap}}
+\subsubsection[{getFieldArray}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getFieldArray (\$ {\em field\_\-key})}}
+\label{classIsisMap_aee1953b6e46b1612c725b2da82414d14}
+Get the array which defines a field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field\_\-key}]Field key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field array.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ac6a4eed048ddfa62c76e6d813754af81}{
+\index{IsisMap@{IsisMap}!getFieldKey@{getFieldKey}}
+\index{getFieldKey@{getFieldKey}!IsisMap@{IsisMap}}
+\subsubsection[{getFieldKey}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getFieldKey (\$ {\em field})}}
+\label{classIsisMap_ac6a4eed048ddfa62c76e6d813754af81}
+Get the key of a field entry.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field key.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ae41313537e399f15ff16a4db887cf5b9}{
+\index{IsisMap@{IsisMap}!getFieldName@{getFieldName}}
+\index{getFieldName@{getFieldName}!IsisMap@{IsisMap}}
+\subsubsection[{getFieldName}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getFieldName (\$ {\em field\_\-key})}}
+\label{classIsisMap_ae41313537e399f15ff16a4db887cf5b9}
+Get a field name.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field\_\-key}]Field key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Field name.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_a994934784caa4149737bda55160a459f}{
+\index{IsisMap@{IsisMap}!getItemKey@{getItemKey}}
+\index{getItemKey@{getItemKey}!IsisMap@{IsisMap}}
+\subsubsection[{getItemKey}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getItemKey (\$ {\em field}, \/ \$ {\em item})}}
+\label{classIsisMap_a994934784caa4149737bda55160a459f}
+Get the item key.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$item}]Item name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Item key.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_af689f27e67b0b38a3e880ead17a487f5}{
+\index{IsisMap@{IsisMap}!getMainItemName@{getMainItemName}}
+\index{getMainItemName@{getMainItemName}!IsisMap@{IsisMap}}
+\subsubsection[{getMainItemName}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getMainItemName (\$ {\em field})}}
+\label{classIsisMap_af689f27e67b0b38a3e880ead17a487f5}
+Get the main field name.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field data from ISIS database schema.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Main field name.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_a29eb2c45b51f95fdfb9ff7af770ca6ce}{
+\index{IsisMap@{IsisMap}!getMap@{getMap}}
+\index{getMap@{getMap}!IsisMap@{IsisMap}}
+\subsubsection[{getMap}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getMap (\$ {\em field}, \/ \$ {\em subfield} = {\ttfamily NULL})}}
+\label{classIsisMap_a29eb2c45b51f95fdfb9ff7af770ca6ce}
+Determine which model field an ISIS db field should be mapped to. When importing an ISIS database to another system, a mapping provided in the database schema can be used to put the originating entries (fields and subfields) in the right place at the destination database.
+
+Map format:
+
+map: type: relation
+
+map: type: value field: dest subfields: a: dest b: dest
+
+Examples:
+
+map: type: Performer
+
+map: type: value field: title subfields: a: subtitle
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$subfield}]Subfield name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+A map destination to the field or subfield.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_a62b933be483fb6704e12e41f10286cd5}{
+\index{IsisMap@{IsisMap}!getMapType@{getMapType}}
+\index{getMapType@{getMapType}!IsisMap@{IsisMap}}
+\subsubsection[{getMapType}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getMapType (\$ {\em field})}}
+\label{classIsisMap_a62b933be483fb6704e12e41f10286cd5}
+Get the mapping type of a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+The mapping type.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ae5d904b8407b38751656715fb9efd7cf}{
+\index{IsisMap@{IsisMap}!getSubfieldKey@{getSubfieldKey}}
+\index{getSubfieldKey@{getSubfieldKey}!IsisMap@{IsisMap}}
+\subsubsection[{getSubfieldKey}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getSubfieldKey (\$ {\em field}, \/ \$ {\em subfield})}}
+\label{classIsisMap_ae5d904b8407b38751656715fb9efd7cf}
+Get the key of a subfield entry.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$subfield}]Subfield name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Subfield key.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ad0b61ec2fbfb011db4bf89c5f54efab4}{
+\index{IsisMap@{IsisMap}!getSubfieldList@{getSubfieldList}}
+\index{getSubfieldList@{getSubfieldList}!IsisMap@{IsisMap}}
+\subsubsection[{getSubfieldList}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getSubfieldList (\$ {\em field})}}
+\label{classIsisMap_ad0b61ec2fbfb011db4bf89c5f54efab4}
+Get the list of subfields from a given field.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array. \end{DoxyParams}
+\hypertarget{classIsisMap_a83ffdd84c385513a09e5ab523a44d6f2}{
+\index{IsisMap@{IsisMap}!getSubfieldName@{getSubfieldName}}
+\index{getSubfieldName@{getSubfieldName}!IsisMap@{IsisMap}}
+\subsubsection[{getSubfieldName}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::getSubfieldName (\$ {\em field\_\-key}, \/ \$ {\em subfield\_\-key})}}
+\label{classIsisMap_a83ffdd84c385513a09e5ab523a44d6f2}
+Get a subfield name.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field\_\-key}]Field key.\item[{\em \$subfield\_\-key}]Subfield key.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Subfield name.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_a7f1b9b1cce7a02dea704a40ca85e2117}{
+\index{IsisMap@{IsisMap}!mapName@{mapName}}
+\index{mapName@{mapName}!IsisMap@{IsisMap}}
+\subsubsection[{mapName}]{\setlength{\rightskip}{0pt plus 5cm}static IsisMap::mapName (\$ {\em name})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classIsisMap_a7f1b9b1cce7a02dea704a40ca85e2117}
+Build a map name.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Field name\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Map name
+\end{DoxyReturn}
+\hypertarget{classIsisMap_af80aedabfeca623a9022dfcbc95d591c}{
+\index{IsisMap@{IsisMap}!methodName@{methodName}}
+\index{methodName@{methodName}!IsisMap@{IsisMap}}
+\subsubsection[{methodName}]{\setlength{\rightskip}{0pt plus 5cm}static IsisMap::methodName (\$ {\em type})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classIsisMap_af80aedabfeca623a9022dfcbc95d591c}
+Guess a method name from a type.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$type}]Mapping type.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Method name.
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ae2abf0591a4862f537fa23537ffca705}{
+\index{IsisMap@{IsisMap}!normalizeFieldName@{normalizeFieldName}}
+\index{normalizeFieldName@{normalizeFieldName}!IsisMap@{IsisMap}}
+\subsubsection[{normalizeFieldName}]{\setlength{\rightskip}{0pt plus 5cm}static IsisMap::normalizeFieldName (\$ {\em name})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classIsisMap_ae2abf0591a4862f537fa23537ffca705}
+Normalize field names.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$name}]Field name\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Normalized field name
+\end{DoxyReturn}
+\hypertarget{classIsisMap_ab5493af644e529c11a3c3e6edc37c3b9}{
+\index{IsisMap@{IsisMap}!subfieldHasMap@{subfieldHasMap}}
+\index{subfieldHasMap@{subfieldHasMap}!IsisMap@{IsisMap}}
+\subsubsection[{subfieldHasMap}]{\setlength{\rightskip}{0pt plus 5cm}IsisMap::subfieldHasMap (\$ {\em field}, \/ \$ {\em subfield})}}
+\label{classIsisMap_ab5493af644e529c11a3c3e6edc37c3b9}
+Check on an ISIS schema whether a subfield has a map.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$field}]Field array.\item[{\em \$subfield}]Subfield name.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+TRUE if subfield has a map, FALSE otherwise.
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/IsisMap.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisMethodIterator.tex b/doc/latex/classIsisMethodIterator.tex
new file mode 100644
index 0000000..fc6940c
--- /dev/null
+++ b/doc/latex/classIsisMethodIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisMethodIterator}{
+\section{IsisMethodIterator Class Reference}
+\label{classIsisMethodIterator}\index{IsisMethodIterator@{IsisMethodIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisMethodIterator_a1cf2e69c03a092839a2494264ca2ed07}{\_\-\_\-construct} (\$class)
+\item
+\hyperlink{classIsisMethodIterator_a1a0ee1617a50e6aa57fe80cd0c2023df}{rewind} ()
+\item
+\hyperlink{classIsisMethodIterator_ad750f5dd57dcb6480f64f9ac703492fc}{key} ()
+\item
+\hyperlink{classIsisMethodIterator_a1d7236d349cd282c4c0ff6ec8f186e93}{current} ()
+\item
+\hyperlink{classIsisMethodIterator_a8a02e17d6597ba1f199bd82ab9fc1b32}{next} ()
+\item
+\hyperlink{classIsisMethodIterator_acb2ac4c3a336d9c6c25d97bd47f60759}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Iterates over all callable methods for database mapping.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisMethodIterator_a1cf2e69c03a092839a2494264ca2ed07}{
+\index{IsisMethodIterator@{IsisMethodIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::\_\-\_\-construct (\$ {\em class})}}
+\label{classIsisMethodIterator_a1cf2e69c03a092839a2494264ca2ed07}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisMethodIterator_a1d7236d349cd282c4c0ff6ec8f186e93}{
+\index{IsisMethodIterator@{IsisMethodIterator}!current@{current}}
+\index{current@{current}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::current ()}}
+\label{classIsisMethodIterator_a1d7236d349cd282c4c0ff6ec8f186e93}
+Return the current element. \hypertarget{classIsisMethodIterator_ad750f5dd57dcb6480f64f9ac703492fc}{
+\index{IsisMethodIterator@{IsisMethodIterator}!key@{key}}
+\index{key@{key}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::key ()}}
+\label{classIsisMethodIterator_ad750f5dd57dcb6480f64f9ac703492fc}
+Return the key of the current element. \hypertarget{classIsisMethodIterator_a8a02e17d6597ba1f199bd82ab9fc1b32}{
+\index{IsisMethodIterator@{IsisMethodIterator}!next@{next}}
+\index{next@{next}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::next ()}}
+\label{classIsisMethodIterator_a8a02e17d6597ba1f199bd82ab9fc1b32}
+Move forward to next element. The method should be callable, otherwise we move to the next position. \hypertarget{classIsisMethodIterator_a1a0ee1617a50e6aa57fe80cd0c2023df}{
+\index{IsisMethodIterator@{IsisMethodIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::rewind ()}}
+\label{classIsisMethodIterator_a1a0ee1617a50e6aa57fe80cd0c2023df}
+Rewind the Iterator to the first valid element. \hypertarget{classIsisMethodIterator_acb2ac4c3a336d9c6c25d97bd47f60759}{
+\index{IsisMethodIterator@{IsisMethodIterator}!valid@{valid}}
+\index{valid@{valid}!IsisMethodIterator@{IsisMethodIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisMethodIterator::valid ()}}
+\label{classIsisMethodIterator_acb2ac4c3a336d9c6c25d97bd47f60759}
+Check if there is a current element after calls to \hyperlink{classIsisMethodIterator_a1a0ee1617a50e6aa57fe80cd0c2023df}{rewind()} or \hyperlink{classIsisMethodIterator_a8a02e17d6597ba1f199bd82ab9fc1b32}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisMethodIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisNormalItemFilterIterator.tex b/doc/latex/classIsisNormalItemFilterIterator.tex
new file mode 100644
index 0000000..30d095f
--- /dev/null
+++ b/doc/latex/classIsisNormalItemFilterIterator.tex
@@ -0,0 +1,25 @@
+\hypertarget{classIsisNormalItemFilterIterator}{
+\section{IsisNormalItemFilterIterator Class Reference}
+\label{classIsisNormalItemFilterIterator}\index{IsisNormalItemFilterIterator@{IsisNormalItemFilterIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisNormalItemFilterIterator_ad3ef2ecdafb6a163a01b199a7e98cd6f}{accept} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis normal subfield iterator. Filter out special subfields.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisNormalItemFilterIterator_ad3ef2ecdafb6a163a01b199a7e98cd6f}{
+\index{IsisNormalItemFilterIterator@{IsisNormalItemFilterIterator}!accept@{accept}}
+\index{accept@{accept}!IsisNormalItemFilterIterator@{IsisNormalItemFilterIterator}}
+\subsubsection[{accept}]{\setlength{\rightskip}{0pt plus 5cm}IsisNormalItemFilterIterator::accept ()}}
+\label{classIsisNormalItemFilterIterator_ad3ef2ecdafb6a163a01b199a7e98cd6f}
+Filter out special subfields.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisNormalItemFilterIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisNormalSubfieldFilterIterator.tex b/doc/latex/classIsisNormalSubfieldFilterIterator.tex
new file mode 100644
index 0000000..08eec2f
--- /dev/null
+++ b/doc/latex/classIsisNormalSubfieldFilterIterator.tex
@@ -0,0 +1,25 @@
+\hypertarget{classIsisNormalSubfieldFilterIterator}{
+\section{IsisNormalSubfieldFilterIterator Class Reference}
+\label{classIsisNormalSubfieldFilterIterator}\index{IsisNormalSubfieldFilterIterator@{IsisNormalSubfieldFilterIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisNormalSubfieldFilterIterator_a855e83f44d790d75c2bcc9bdeedef317}{accept} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis normal subfield iterator. Filter out special subfields.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisNormalSubfieldFilterIterator_a855e83f44d790d75c2bcc9bdeedef317}{
+\index{IsisNormalSubfieldFilterIterator@{IsisNormalSubfieldFilterIterator}!accept@{accept}}
+\index{accept@{accept}!IsisNormalSubfieldFilterIterator@{IsisNormalSubfieldFilterIterator}}
+\subsubsection[{accept}]{\setlength{\rightskip}{0pt plus 5cm}IsisNormalSubfieldFilterIterator::accept ()}}
+\label{classIsisNormalSubfieldFilterIterator_a855e83f44d790d75c2bcc9bdeedef317}
+Filter out special subfields.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisNormalSubfieldFilterIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisReader.eps b/doc/latex/classIsisReader.eps
new file mode 100644
index 0000000..7d4c258
--- /dev/null
+++ b/doc/latex/classIsisReader.eps
@@ -0,0 +1,215 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 1030.93
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.485 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 5 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisReader) cw
+(IsisMap) cw
+(IsisConnector) cw
+(IsisFinder) cw
+(IsisAudit) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisReader) 0 4 box
+ (IsisMap) 0 3 box
+ (IsisConnector) 0 2 box
+ (IsisFinder) 0 1 box
+ (IsisAudit) 0 0 box
+
+% ----- relations -----
+
+solid
+1 0 3.25 out
+solid
+0 0 3.75 in
+solid
+1 0 2.25 out
+solid
+0 0 2.75 in
+solid
+1 0 1.25 out
+solid
+0 0 1.75 in
+solid
+1 0 0.25 out
+solid
+0 0 0.75 in
diff --git a/doc/latex/classIsisReader.pdf b/doc/latex/classIsisReader.pdf
new file mode 100644
index 0000000..131f9e5
--- /dev/null
+++ b/doc/latex/classIsisReader.pdf
Binary files differ
diff --git a/doc/latex/classIsisReader.tex b/doc/latex/classIsisReader.tex
new file mode 100644
index 0000000..a52b96e
--- /dev/null
+++ b/doc/latex/classIsisReader.tex
@@ -0,0 +1,157 @@
+\hypertarget{classIsisReader}{
+\section{IsisReader Class Reference}
+\label{classIsisReader}\index{IsisReader@{IsisReader}}
+}
+Inheritance diagram for IsisReader:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=5cm]{classIsisReader}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisReader_a70d1444cf56269795b4947dd82b2a4ac}{\_\-\_\-construct} (\$config=null)
+\item
+\hyperlink{classIsisReader_afa6e3d3d94854913e5ed2604919d2316}{open} (\$config)
+\item
+\hyperlink{classIsisReader_a630791a319bec2bc55d0102cbb7f93df}{read} (\$entry)
+\item
+\hyperlink{classIsisReader_a99ce7b10b2997dad6a64558ac1f9f10e}{removeBrackets} (\$value)
+\item
+\hyperlink{classIsisReader_a60ece3bbe11a2b4ac6afa6e65f282724}{removeBracketsFromArray} (\&\$values)
+\item
+\hyperlink{classIsisReader_a4610ebcf69c197e2c596965e2dc0358e}{explodeBrackets} (\$subject)
+\item
+\hyperlink{classIsisReader_aa6099ed6bd276b32bd7bba184f144529}{filterBrackets} (\$values)
+\item
+\hyperlink{classIsisReader_a109a6ef49b2190bfbcee796dae954baf}{hasBrackets} (\$value)
+\item
+\hyperlink{classIsisReader_a3cc08df25da082046d496db93778709b}{explodeValue} (\$value)
+\item
+\hyperlink{classIsisReader_ae65e172e3b5c9ac3c8a5e1352ba80904}{joinSubfields} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Provides basic Isis read capabilities around \hyperlink{classCinisis}{Cinisis}.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisReader_a70d1444cf56269795b4947dd82b2a4ac}{
+\index{IsisReader@{IsisReader}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisReader@{IsisReader}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::\_\-\_\-construct (\$ {\em config} = {\ttfamily null})}}
+\label{classIsisReader_a70d1444cf56269795b4947dd82b2a4ac}
+Constructor.
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisReader_a4610ebcf69c197e2c596965e2dc0358e}{
+\index{IsisReader@{IsisReader}!explodeBrackets@{explodeBrackets}}
+\index{explodeBrackets@{explodeBrackets}!IsisReader@{IsisReader}}
+\subsubsection[{explodeBrackets}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::explodeBrackets (\$ {\em subject})}}
+\label{classIsisReader_a4610ebcf69c197e2c596965e2dc0358e}
+Explode a bracketed string into values. Just strings inside brackets are returned.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$subject}]Strings containing brackets.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array of matched strings.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_a3cc08df25da082046d496db93778709b}{
+\index{IsisReader@{IsisReader}!explodeValue@{explodeValue}}
+\index{explodeValue@{explodeValue}!IsisReader@{IsisReader}}
+\subsubsection[{explodeValue}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::explodeValue (\$ {\em value})}}
+\label{classIsisReader_a3cc08df25da082046d496db93778709b}
+Explode values from fields or subfields. Split values inside brackets if needed, but then doesn't return any value outside brackets.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$value}]String with values.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Array with values.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_aa6099ed6bd276b32bd7bba184f144529}{
+\index{IsisReader@{IsisReader}!filterBrackets@{filterBrackets}}
+\index{filterBrackets@{filterBrackets}!IsisReader@{IsisReader}}
+\subsubsection[{filterBrackets}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::filterBrackets (\$ {\em values})}}
+\label{classIsisReader_aa6099ed6bd276b32bd7bba184f144529}
+Filter out brackets from strings.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$values}]String (or array filled with strings) to be filtered.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Filtered string or array.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_a109a6ef49b2190bfbcee796dae954baf}{
+\index{IsisReader@{IsisReader}!hasBrackets@{hasBrackets}}
+\index{hasBrackets@{hasBrackets}!IsisReader@{IsisReader}}
+\subsubsection[{hasBrackets}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::hasBrackets (\$ {\em value})}}
+\label{classIsisReader_a109a6ef49b2190bfbcee796dae954baf}
+Check if a string has brackets.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$value}]String to be compared.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+True if string has brackets, false otherwise.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_ae65e172e3b5c9ac3c8a5e1352ba80904}{
+\index{IsisReader@{IsisReader}!joinSubfields@{joinSubfields}}
+\index{joinSubfields@{joinSubfields}!IsisReader@{IsisReader}}
+\subsubsection[{joinSubfields}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::joinSubfields ()}}
+\label{classIsisReader_ae65e172e3b5c9ac3c8a5e1352ba80904}
+Whether to join field and subfields in a single array.
+
+\begin{DoxyReturn}{Returns}
+Boolean.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_afa6e3d3d94854913e5ed2604919d2316}{
+\index{IsisReader@{IsisReader}!open@{open}}
+\index{open@{open}!IsisReader@{IsisReader}}
+\subsubsection[{open}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::open (\$ {\em config})}}
+\label{classIsisReader_afa6e3d3d94854913e5ed2604919d2316}
+Open a database.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$config}]Config file or array. \end{DoxyParams}
+\hypertarget{classIsisReader_a630791a319bec2bc55d0102cbb7f93df}{
+\index{IsisReader@{IsisReader}!read@{read}}
+\index{read@{read}!IsisReader@{IsisReader}}
+\subsubsection[{read}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::read (\$ {\em entry})}}
+\label{classIsisReader_a630791a319bec2bc55d0102cbb7f93df}
+Alias to \$isis-\/$>$db-\/$>$\hyperlink{classIsisReader_a630791a319bec2bc55d0102cbb7f93df}{read()}.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$entry}]Row number.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Resulting data.
+\end{DoxyReturn}
+\hypertarget{classIsisReader_a99ce7b10b2997dad6a64558ac1f9f10e}{
+\index{IsisReader@{IsisReader}!removeBrackets@{removeBrackets}}
+\index{removeBrackets@{removeBrackets}!IsisReader@{IsisReader}}
+\subsubsection[{removeBrackets}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::removeBrackets (\$ {\em value})}}
+\label{classIsisReader_a99ce7b10b2997dad6a64558ac1f9f10e}
+Remove brackets from strings whithin an array.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$value}]Array with bracketed strings. \end{DoxyParams}
+\hypertarget{classIsisReader_a60ece3bbe11a2b4ac6afa6e65f282724}{
+\index{IsisReader@{IsisReader}!removeBracketsFromArray@{removeBracketsFromArray}}
+\index{removeBracketsFromArray@{removeBracketsFromArray}!IsisReader@{IsisReader}}
+\subsubsection[{removeBracketsFromArray}]{\setlength{\rightskip}{0pt plus 5cm}IsisReader::removeBracketsFromArray (\&\$ {\em values})}}
+\label{classIsisReader_a60ece3bbe11a2b4ac6afa6e65f282724}
+Remove brackets from strings whithin an array.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \&\$values}]Array with bracketed strings. \end{DoxyParams}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/IsisReader.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisRowIterator.tex b/doc/latex/classIsisRowIterator.tex
new file mode 100644
index 0000000..ead6d26
--- /dev/null
+++ b/doc/latex/classIsisRowIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisRowIterator}{
+\section{IsisRowIterator Class Reference}
+\label{classIsisRowIterator}\index{IsisRowIterator@{IsisRowIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisRowIterator_acaab99d2bf18f6f958ddf07db55cb15d}{\_\-\_\-construct} (\$class, \$field)
+\item
+\hyperlink{classIsisRowIterator_a5ef72f942cc738bf24cf251018c28edf}{rewind} ()
+\item
+\hyperlink{classIsisRowIterator_a96f65bca7f2e048a449e6f316d802e6f}{key} ()
+\item
+\hyperlink{classIsisRowIterator_abe18cfd484f70348fb5832444186b10d}{current} ()
+\item
+\hyperlink{classIsisRowIterator_ad084ce947a265969f738e7d7dc8a1853}{next} ()
+\item
+\hyperlink{classIsisRowIterator_a69cb2b1c6e8feaffcfe65363a9178b72}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Iterates over all rows from a field result.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisRowIterator_acaab99d2bf18f6f958ddf07db55cb15d}{
+\index{IsisRowIterator@{IsisRowIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field})}}
+\label{classIsisRowIterator_acaab99d2bf18f6f958ddf07db55cb15d}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisRowIterator_abe18cfd484f70348fb5832444186b10d}{
+\index{IsisRowIterator@{IsisRowIterator}!current@{current}}
+\index{current@{current}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::current ()}}
+\label{classIsisRowIterator_abe18cfd484f70348fb5832444186b10d}
+Return the current element. \hypertarget{classIsisRowIterator_a96f65bca7f2e048a449e6f316d802e6f}{
+\index{IsisRowIterator@{IsisRowIterator}!key@{key}}
+\index{key@{key}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::key ()}}
+\label{classIsisRowIterator_a96f65bca7f2e048a449e6f316d802e6f}
+Return the key of the current element. \hypertarget{classIsisRowIterator_ad084ce947a265969f738e7d7dc8a1853}{
+\index{IsisRowIterator@{IsisRowIterator}!next@{next}}
+\index{next@{next}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::next ()}}
+\label{classIsisRowIterator_ad084ce947a265969f738e7d7dc8a1853}
+Move forward to next element. \hypertarget{classIsisRowIterator_a5ef72f942cc738bf24cf251018c28edf}{
+\index{IsisRowIterator@{IsisRowIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::rewind ()}}
+\label{classIsisRowIterator_a5ef72f942cc738bf24cf251018c28edf}
+Rewind the Iterator to the first element. \hypertarget{classIsisRowIterator_a69cb2b1c6e8feaffcfe65363a9178b72}{
+\index{IsisRowIterator@{IsisRowIterator}!valid@{valid}}
+\index{valid@{valid}!IsisRowIterator@{IsisRowIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisRowIterator::valid ()}}
+\label{classIsisRowIterator_a69cb2b1c6e8feaffcfe65363a9178b72}
+Check if there is a current element after calls to \hyperlink{classIsisRowIterator_a5ef72f942cc738bf24cf251018c28edf}{rewind()} or \hyperlink{classIsisRowIterator_ad084ce947a265969f738e7d7dc8a1853}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisRowIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisSubfieldIterator.tex b/doc/latex/classIsisSubfieldIterator.tex
new file mode 100644
index 0000000..9f2f193
--- /dev/null
+++ b/doc/latex/classIsisSubfieldIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisSubfieldIterator}{
+\section{IsisSubfieldIterator Class Reference}
+\label{classIsisSubfieldIterator}\index{IsisSubfieldIterator@{IsisSubfieldIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisSubfieldIterator_adc5472ca67d20defcab9eba45975dc29}{\_\-\_\-construct} (\$class, \$field, \$main=false)
+\item
+\hyperlink{classIsisSubfieldIterator_a971b36317fab4fc07573f215a118fb40}{rewind} ()
+\item
+\hyperlink{classIsisSubfieldIterator_a4ee62ad436a7c4ec1dac0c0c5d2a2c85}{key} ()
+\item
+\hyperlink{classIsisSubfieldIterator_a7c31b7e8db31e1465d29fb58b2448bd8}{current} ()
+\item
+\hyperlink{classIsisSubfieldIterator_a74363e3dbfbde6d409b8ba3b70fc9371}{next} ()
+\item
+\hyperlink{classIsisSubfieldIterator_a1934438bfdfa1827e6bcc71d3c90f2db}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis subfield iterator. Iterates over subfields for each result row.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisSubfieldIterator_adc5472ca67d20defcab9eba45975dc29}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field}, \/ \$ {\em main} = {\ttfamily false})}}
+\label{classIsisSubfieldIterator_adc5472ca67d20defcab9eba45975dc29}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over.\item[{\em \$main}]Control to which subfield the main field should be mapped to. By default no mapping is made. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisSubfieldIterator_a7c31b7e8db31e1465d29fb58b2448bd8}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!current@{current}}
+\index{current@{current}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::current ()}}
+\label{classIsisSubfieldIterator_a7c31b7e8db31e1465d29fb58b2448bd8}
+Return the current element. \hypertarget{classIsisSubfieldIterator_a4ee62ad436a7c4ec1dac0c0c5d2a2c85}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!key@{key}}
+\index{key@{key}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::key ()}}
+\label{classIsisSubfieldIterator_a4ee62ad436a7c4ec1dac0c0c5d2a2c85}
+Return the key of the current element. \hypertarget{classIsisSubfieldIterator_a74363e3dbfbde6d409b8ba3b70fc9371}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!next@{next}}
+\index{next@{next}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::next ()}}
+\label{classIsisSubfieldIterator_a74363e3dbfbde6d409b8ba3b70fc9371}
+Move forward to next element. \hypertarget{classIsisSubfieldIterator_a971b36317fab4fc07573f215a118fb40}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::rewind ()}}
+\label{classIsisSubfieldIterator_a971b36317fab4fc07573f215a118fb40}
+Rewind the Iterator to the first element. \hypertarget{classIsisSubfieldIterator_a1934438bfdfa1827e6bcc71d3c90f2db}{
+\index{IsisSubfieldIterator@{IsisSubfieldIterator}!valid@{valid}}
+\index{valid@{valid}!IsisSubfieldIterator@{IsisSubfieldIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisSubfieldIterator::valid ()}}
+\label{classIsisSubfieldIterator_a1934438bfdfa1827e6bcc71d3c90f2db}
+Check if there is a current element after calls to \hyperlink{classIsisSubfieldIterator_a971b36317fab4fc07573f215a118fb40}{rewind()} or \hyperlink{classIsisSubfieldIterator_a74363e3dbfbde6d409b8ba3b70fc9371}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisSubfieldIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classIsisValueIterator.tex b/doc/latex/classIsisValueIterator.tex
new file mode 100644
index 0000000..3447da2
--- /dev/null
+++ b/doc/latex/classIsisValueIterator.tex
@@ -0,0 +1,68 @@
+\hypertarget{classIsisValueIterator}{
+\section{IsisValueIterator Class Reference}
+\label{classIsisValueIterator}\index{IsisValueIterator@{IsisValueIterator}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classIsisValueIterator_a4b5811fff950f830cbba2da40dfac497}{\_\-\_\-construct} (\$class, \$field)
+\item
+\hyperlink{classIsisValueIterator_a175fe47671b335eecc591598053a6a88}{rewind} ()
+\item
+\hyperlink{classIsisValueIterator_a173b393699278fb2fb928e6bd2448a05}{key} ()
+\item
+\hyperlink{classIsisValueIterator_ad7c6dd479b6129ba5bfc2f2003f6ca49}{current} ()
+\item
+\hyperlink{classIsisValueIterator_adc2fb9b1dd029cab4be0b48d6e0f11f9}{next} ()
+\item
+\hyperlink{classIsisValueIterator_a7f6b3e0941c2110f1b2ba10ba2b87fb8}{valid} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Isis value iterator. Iterates over all values for each result row.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classIsisValueIterator_a4b5811fff950f830cbba2da40dfac497}{
+\index{IsisValueIterator@{IsisValueIterator}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::\_\-\_\-construct (\$ {\em class}, \/ \$ {\em field})}}
+\label{classIsisValueIterator_a4b5811fff950f830cbba2da40dfac497}
+Constructor.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$class}]Instance of \hyperlink{classIsisConnector}{IsisConnector} or child class.\item[{\em \$field}]Field to iterate over. \end{DoxyParams}
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classIsisValueIterator_ad7c6dd479b6129ba5bfc2f2003f6ca49}{
+\index{IsisValueIterator@{IsisValueIterator}!current@{current}}
+\index{current@{current}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{current}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::current ()}}
+\label{classIsisValueIterator_ad7c6dd479b6129ba5bfc2f2003f6ca49}
+Return the current element. \hypertarget{classIsisValueIterator_a173b393699278fb2fb928e6bd2448a05}{
+\index{IsisValueIterator@{IsisValueIterator}!key@{key}}
+\index{key@{key}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{key}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::key ()}}
+\label{classIsisValueIterator_a173b393699278fb2fb928e6bd2448a05}
+Return the key of the current element. \hypertarget{classIsisValueIterator_adc2fb9b1dd029cab4be0b48d6e0f11f9}{
+\index{IsisValueIterator@{IsisValueIterator}!next@{next}}
+\index{next@{next}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{next}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::next ()}}
+\label{classIsisValueIterator_adc2fb9b1dd029cab4be0b48d6e0f11f9}
+Move forward to next element. \hypertarget{classIsisValueIterator_a175fe47671b335eecc591598053a6a88}{
+\index{IsisValueIterator@{IsisValueIterator}!rewind@{rewind}}
+\index{rewind@{rewind}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{rewind}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::rewind ()}}
+\label{classIsisValueIterator_a175fe47671b335eecc591598053a6a88}
+Rewind the Iterator to the first element. \hypertarget{classIsisValueIterator_a7f6b3e0941c2110f1b2ba10ba2b87fb8}{
+\index{IsisValueIterator@{IsisValueIterator}!valid@{valid}}
+\index{valid@{valid}!IsisValueIterator@{IsisValueIterator}}
+\subsubsection[{valid}]{\setlength{\rightskip}{0pt plus 5cm}IsisValueIterator::valid ()}}
+\label{classIsisValueIterator_a7f6b3e0941c2110f1b2ba10ba2b87fb8}
+Check if there is a current element after calls to \hyperlink{classIsisValueIterator_a175fe47671b335eecc591598053a6a88}{rewind()} or \hyperlink{classIsisValueIterator_adc2fb9b1dd029cab4be0b48d6e0f11f9}{next()}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/iterators/IsisValueIterator.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classMaleteDb.eps b/doc/latex/classMaleteDb.eps
new file mode 100644
index 0000000..01ae186
--- /dev/null
+++ b/doc/latex/classMaleteDb.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 540.541
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.925 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(MaleteDb) cw
+(IsisDb) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (MaleteDb) 0 0 box
+ (IsisDb) 0 1 box
+
+% ----- relations -----
+
+solid
+0 0 0 out
+solid
+1 0 1 in
diff --git a/doc/latex/classMaleteDb.pdf b/doc/latex/classMaleteDb.pdf
new file mode 100644
index 0000000..f9c5a0f
--- /dev/null
+++ b/doc/latex/classMaleteDb.pdf
Binary files differ
diff --git a/doc/latex/classMaleteDb.tex b/doc/latex/classMaleteDb.tex
new file mode 100644
index 0000000..0baaf89
--- /dev/null
+++ b/doc/latex/classMaleteDb.tex
@@ -0,0 +1,179 @@
+\hypertarget{classMaleteDb}{
+\section{MaleteDb Class Reference}
+\label{classMaleteDb}\index{MaleteDb@{MaleteDb}}
+}
+Inheritance diagram for MaleteDb:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2cm]{classMaleteDb}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classMaleteDb_a60f87371bc1ec156b010e5b38b4c22e2}{\_\-\_\-construct} (\$schema)
+\item
+\hyperlink{classMaleteDb_ad2a65876db24adc388afce465e0c153e}{read} (\$id)
+\item
+\hyperlink{classMaleteDb_a5c6cb09a072e5d2ddce31c77098ccba4}{entries} ()
+\item
+\hyperlink{classMaleteDb_a4f16c48facae498d0db1a042e9727d04}{example} ()
+\item
+\hyperlink{classMaleteDb_ab2da32d84af17df79d947ae32257b4ec}{check} (\$schema, \$section=NULL)
+\item
+\hyperlink{classMaleteDb_ac87c3ac1b3d9a6297be8574aa303e033}{tag} (\$results)
+\item
+\hyperlink{classMaleteDb_a17562c1c53594762454d65be823fcdb5}{logger} (\$message)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classMaleteDb_af2cd60ce81381edc3ca09a6812cf79fd}{\$fdt}
+\item
+\hyperlink{classMaleteDb_a4b970df3631d2763f001c96ee417f27a}{\$db}
+\item
+\hyperlink{classMaleteDb_a833fed4faae9537306053ee966c06197}{\$format}
+\item
+\hyperlink{classMaleteDb_ae1c8cefd1a6e661fb03c214f47336368}{\$log}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Malete implementation of \hyperlink{interfaceIsisDb}{IsisDb}.
+
+\begin{DoxyWarning}{Warning}
+This implementation is currently outdated and lacks basic functionalities such as subfield handling and therefore it's use is not recommended.
+\end{DoxyWarning}
+
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classMaleteDb_a60f87371bc1ec156b010e5b38b4c22e2}{
+\index{MaleteDb@{MaleteDb}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!MaleteDb@{MaleteDb}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::\_\-\_\-construct (\$ {\em schema})}}
+\label{classMaleteDb_a60f87371bc1ec156b010e5b38b4c22e2}
+Constructor.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb::\_\-\_\-construct()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb}.
+
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classMaleteDb_ab2da32d84af17df79d947ae32257b4ec}{
+\index{MaleteDb@{MaleteDb}!check@{check}}
+\index{check@{check}!MaleteDb@{MaleteDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::check (\$ {\em schema}, \/ \$ {\em section} = {\ttfamily NULL})}}
+\label{classMaleteDb_ab2da32d84af17df79d947ae32257b4ec}
+Check configuration.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb::check()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb}.
+
+\hypertarget{classMaleteDb_a5c6cb09a072e5d2ddce31c77098ccba4}{
+\index{MaleteDb@{MaleteDb}!entries@{entries}}
+\index{entries@{entries}!MaleteDb@{MaleteDb}}
+\subsubsection[{entries}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::entries ()}}
+\label{classMaleteDb_a5c6cb09a072e5d2ddce31c77098ccba4}
+Return number of entries in the database.
+
+The Malete API doen't implement such feature so we have to emulate it by iterating over all entries until \hyperlink{classMaleteDb_ad2a65876db24adc388afce465e0c153e}{MaleteDb::read()} returns FALSE.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb::entries()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb}.
+
+\hypertarget{classMaleteDb_a4f16c48facae498d0db1a042e9727d04}{
+\index{MaleteDb@{MaleteDb}!example@{example}}
+\index{example@{example}!MaleteDb@{MaleteDb}}
+\subsubsection[{example}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::example ()}}
+\label{classMaleteDb_a4f16c48facae498d0db1a042e9727d04}
+Return an example schema.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb::example()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb}.
+
+\hypertarget{classMaleteDb_a17562c1c53594762454d65be823fcdb5}{
+\index{MaleteDb@{MaleteDb}!logger@{logger}}
+\index{logger@{logger}!MaleteDb@{MaleteDb}}
+\subsubsection[{logger}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::logger (\$ {\em message})}}
+\label{classMaleteDb_a17562c1c53594762454d65be823fcdb5}
+Class logger.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$message}]Log message. \end{DoxyParams}
+\hypertarget{classMaleteDb_ad2a65876db24adc388afce465e0c153e}{
+\index{MaleteDb@{MaleteDb}!read@{read}}
+\index{read@{read}!MaleteDb@{MaleteDb}}
+\subsubsection[{read}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::read (\$ {\em id})}}
+\label{classMaleteDb_ad2a65876db24adc388afce465e0c153e}
+Read an entry.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{IsisDb::read()}
+\end{DoxySeeAlso}
+\begin{Desc}
+\item[\hyperlink{todo__todo000002}{Todo}]Subfield handling. \end{Desc}
+
+
+Implements \hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{IsisDb}.
+
+\hypertarget{classMaleteDb_ac87c3ac1b3d9a6297be8574aa303e033}{
+\index{MaleteDb@{MaleteDb}!tag@{tag}}
+\index{tag@{tag}!MaleteDb@{MaleteDb}}
+\subsubsection[{tag}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::tag (\$ {\em results})}}
+\label{classMaleteDb_ac87c3ac1b3d9a6297be8574aa303e033}
+Tag results of a db query.
+
+This function converts the keys of query result from field numbers to names and and also puts repetition fields into place as Malete deals with field repetition by using a 'tag' property in the resulting query object.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$results}]Database query results.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Tagged database result.
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classMaleteDb_a4b970df3631d2763f001c96ee417f27a}{
+\index{MaleteDb@{MaleteDb}!\$db@{\$db}}
+\index{\$db@{\$db}!MaleteDb@{MaleteDb}}
+\subsubsection[{\$db}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::\$db}}
+\label{classMaleteDb_a4b970df3631d2763f001c96ee417f27a}
+Database resource. \hypertarget{classMaleteDb_af2cd60ce81381edc3ca09a6812cf79fd}{
+\index{MaleteDb@{MaleteDb}!\$fdt@{\$fdt}}
+\index{\$fdt@{\$fdt}!MaleteDb@{MaleteDb}}
+\subsubsection[{\$fdt}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::\$fdt}}
+\label{classMaleteDb_af2cd60ce81381edc3ca09a6812cf79fd}
+Field description table. \hypertarget{classMaleteDb_a833fed4faae9537306053ee966c06197}{
+\index{MaleteDb@{MaleteDb}!\$format@{\$format}}
+\index{\$format@{\$format}!MaleteDb@{MaleteDb}}
+\subsubsection[{\$format}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::\$format}}
+\label{classMaleteDb_a833fed4faae9537306053ee966c06197}
+Database format, derived from \$schema. \hypertarget{classMaleteDb_ae1c8cefd1a6e661fb03c214f47336368}{
+\index{MaleteDb@{MaleteDb}!\$log@{\$log}}
+\index{\$log@{\$log}!MaleteDb@{MaleteDb}}
+\subsubsection[{\$log}]{\setlength{\rightskip}{0pt plus 5cm}MaleteDb::\$log}}
+\label{classMaleteDb_ae1c8cefd1a6e661fb03c214f47336368}
+Class action log.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/backends/MaleteDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classMateleDb.tex b/doc/latex/classMateleDb.tex
new file mode 100644
index 0000000..14718b9
--- /dev/null
+++ b/doc/latex/classMateleDb.tex
@@ -0,0 +1,12 @@
+\hypertarget{classMateleDb}{
+\section{MateleDb Class Reference}
+\label{classMateleDb}\index{MateleDb@{MateleDb}}
+}
+
+
+\subsection{Detailed Description}
+Malete implementation of \hyperlink{interfaceIsisDb}{IsisDb}.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/MaleteDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classPhpIsisDb.eps b/doc/latex/classPhpIsisDb.eps
new file mode 100644
index 0000000..753674f
--- /dev/null
+++ b/doc/latex/classPhpIsisDb.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 526.316
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 0.95 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(PhpIsisDb) cw
+(IsisDb) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (PhpIsisDb) 0 0 box
+ (IsisDb) 0 1 box
+
+% ----- relations -----
+
+solid
+0 0 0 out
+solid
+1 0 1 in
diff --git a/doc/latex/classPhpIsisDb.pdf b/doc/latex/classPhpIsisDb.pdf
new file mode 100644
index 0000000..7784b22
--- /dev/null
+++ b/doc/latex/classPhpIsisDb.pdf
Binary files differ
diff --git a/doc/latex/classPhpIsisDb.tex b/doc/latex/classPhpIsisDb.tex
new file mode 100644
index 0000000..a8ae462
--- /dev/null
+++ b/doc/latex/classPhpIsisDb.tex
@@ -0,0 +1,192 @@
+\hypertarget{classPhpIsisDb}{
+\section{PhpIsisDb Class Reference}
+\label{classPhpIsisDb}\index{PhpIsisDb@{PhpIsisDb}}
+}
+Inheritance diagram for PhpIsisDb:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2cm]{classPhpIsisDb}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classPhpIsisDb_abb6db51373d065baf9135fd278653bc5}{\_\-\_\-construct} (\$schema)
+\item
+\hyperlink{classPhpIsisDb_af2266931746f6f2335b831be8b8333fb}{read} (\$id)
+\item
+\hyperlink{classPhpIsisDb_a0491ce84e5a85e775f811f18e63ef0fb}{entries} ()
+\item
+\hyperlink{classPhpIsisDb_a7f4f3a9fd6dab86bd3cb3149d65f92cd}{example} ()
+\item
+\hyperlink{classPhpIsisDb_a849f238c3323f53431be1c225a914d98}{tag} (\$results)
+\item
+\hyperlink{classPhpIsisDb_a46f8c39b305f170e2cf8ae5f4d218e74}{charset} (\&\$data)
+\item
+\hyperlink{classPhpIsisDb_a8d8185060a26d4fe673844b2ea3db39a}{logger} (\$message)
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classPhpIsisDb_a23761cc04114090a2863467b2accc80a}{check} (\$schema, \$section=NULL)
+\end{DoxyCompactItemize}
+\subsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classPhpIsisDb_a536e4c67dda71a7c7dad9ffbac299f9b}{\$db}
+\item
+\hyperlink{classPhpIsisDb_a275e29f3711d37fc67cea340b564ddf3}{\$format}
+\item
+\hyperlink{classPhpIsisDb_a0742105b3efab477fda99cd0561f98c7}{\$log}
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+PHP-\/Isis implementation of \hyperlink{interfaceIsisDb}{IsisDb}.
+
+\begin{DoxyWarning}{Warning}
+This implementation is currently outdated and lacks basic functionalities such as subfield handling and therefore it's use is not recommended.
+\end{DoxyWarning}
+
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{classPhpIsisDb_abb6db51373d065baf9135fd278653bc5}{
+\index{PhpIsisDb@{PhpIsisDb}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::\_\-\_\-construct (\$ {\em schema})}}
+\label{classPhpIsisDb_abb6db51373d065baf9135fd278653bc5}
+Constructor.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb::\_\-\_\-construct()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{IsisDb}.
+
+
+
+\subsection{Member Function Documentation}
+\hypertarget{classPhpIsisDb_a46f8c39b305f170e2cf8ae5f4d218e74}{
+\index{PhpIsisDb@{PhpIsisDb}!charset@{charset}}
+\index{charset@{charset}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{charset}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::charset (\&\$ {\em data})}}
+\label{classPhpIsisDb_a46f8c39b305f170e2cf8ae5f4d218e74}
+Charset conversion.
+
+Converts a string from the database charset to UTF-\/8.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$data}]String to be converted.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+String converted to UTF-\/8.
+\end{DoxyReturn}
+\hypertarget{classPhpIsisDb_a23761cc04114090a2863467b2accc80a}{
+\index{PhpIsisDb@{PhpIsisDb}!check@{check}}
+\index{check@{check}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static PhpIsisDb::check (\$ {\em schema}, \/ \$ {\em section} = {\ttfamily NULL})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classPhpIsisDb_a23761cc04114090a2863467b2accc80a}
+Check configuration.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb::check()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb}.
+
+\hypertarget{classPhpIsisDb_a0491ce84e5a85e775f811f18e63ef0fb}{
+\index{PhpIsisDb@{PhpIsisDb}!entries@{entries}}
+\index{entries@{entries}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{entries}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::entries ()}}
+\label{classPhpIsisDb_a0491ce84e5a85e775f811f18e63ef0fb}
+Return number of entries in the database.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb::entries()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{IsisDb}.
+
+\hypertarget{classPhpIsisDb_a7f4f3a9fd6dab86bd3cb3149d65f92cd}{
+\index{PhpIsisDb@{PhpIsisDb}!example@{example}}
+\index{example@{example}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{example}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::example ()}}
+\label{classPhpIsisDb_a7f4f3a9fd6dab86bd3cb3149d65f92cd}
+Return an example schema.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb::example()}
+\end{DoxySeeAlso}
+
+
+Implements \hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb}.
+
+\hypertarget{classPhpIsisDb_a8d8185060a26d4fe673844b2ea3db39a}{
+\index{PhpIsisDb@{PhpIsisDb}!logger@{logger}}
+\index{logger@{logger}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{logger}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::logger (\$ {\em message})}}
+\label{classPhpIsisDb_a8d8185060a26d4fe673844b2ea3db39a}
+Class logger.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$message}]Log message. \end{DoxyParams}
+\hypertarget{classPhpIsisDb_af2266931746f6f2335b831be8b8333fb}{
+\index{PhpIsisDb@{PhpIsisDb}!read@{read}}
+\index{read@{read}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{read}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::read (\$ {\em id})}}
+\label{classPhpIsisDb_af2266931746f6f2335b831be8b8333fb}
+Read an entry.
+
+The PHP-\/Isis API doen't implement such feature so we have to emulate it by geting all entries and using isis\_\-data\_\-seek() to get the desired record.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{IsisDb::read()}
+\end{DoxySeeAlso}
+\begin{Desc}
+\item[\hyperlink{todo__todo000003}{Todo}]Subfield handling. \end{Desc}
+
+
+Implements \hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{IsisDb}.
+
+\hypertarget{classPhpIsisDb_a849f238c3323f53431be1c225a914d98}{
+\index{PhpIsisDb@{PhpIsisDb}!tag@{tag}}
+\index{tag@{tag}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{tag}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::tag (\$ {\em results})}}
+\label{classPhpIsisDb_a849f238c3323f53431be1c225a914d98}
+Tag results of a db query.
+
+This function converts the keys of query result from field numbers to names.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$results}]Database query results.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Tagged database result.
+\end{DoxyReturn}
+
+
+\subsection{Member Data Documentation}
+\hypertarget{classPhpIsisDb_a536e4c67dda71a7c7dad9ffbac299f9b}{
+\index{PhpIsisDb@{PhpIsisDb}!\$db@{\$db}}
+\index{\$db@{\$db}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{\$db}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::\$db}}
+\label{classPhpIsisDb_a536e4c67dda71a7c7dad9ffbac299f9b}
+Database resource. \hypertarget{classPhpIsisDb_a275e29f3711d37fc67cea340b564ddf3}{
+\index{PhpIsisDb@{PhpIsisDb}!\$format@{\$format}}
+\index{\$format@{\$format}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{\$format}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::\$format}}
+\label{classPhpIsisDb_a275e29f3711d37fc67cea340b564ddf3}
+Database format, derived from \$schema. \hypertarget{classPhpIsisDb_a0742105b3efab477fda99cd0561f98c7}{
+\index{PhpIsisDb@{PhpIsisDb}!\$log@{\$log}}
+\index{\$log@{\$log}!PhpIsisDb@{PhpIsisDb}}
+\subsubsection[{\$log}]{\setlength{\rightskip}{0pt plus 5cm}PhpIsisDb::\$log}}
+\label{classPhpIsisDb_a0742105b3efab477fda99cd0561f98c7}
+Class action log.
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/backends/PhpIsisDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/classSchemaDb.tex b/doc/latex/classSchemaDb.tex
new file mode 100644
index 0000000..d2a5c1c
--- /dev/null
+++ b/doc/latex/classSchemaDb.tex
@@ -0,0 +1,69 @@
+\hypertarget{classSchemaDb}{
+\section{SchemaDb Class Reference}
+\label{classSchemaDb}\index{SchemaDb@{SchemaDb}}
+}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{classSchemaDb_af5c9271759bed2f9cccc80a05f7c5da8}{optional} ()
+\item
+\hyperlink{classSchemaDb_a923a94169459c4dee3f74000b4aa1807}{example} ()
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{classSchemaDb_a31db21bccb179162b5bb02b14b72d3e3}{required} ()
+\item
+static \hyperlink{classSchemaDb_a42acc85b08a20b121204b1caf3a83e61}{check} (\$schema, \$section=NULL)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+\hyperlink{classSchemaDb}{SchemaDb} class with standard database procedures and configuration.
+
+\subsection{Member Function Documentation}
+\hypertarget{classSchemaDb_a42acc85b08a20b121204b1caf3a83e61}{
+\index{SchemaDb@{SchemaDb}!check@{check}}
+\index{check@{check}!SchemaDb@{SchemaDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static SchemaDb::check (\$ {\em schema}, \/ \$ {\em section} = {\ttfamily NULL})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classSchemaDb_a42acc85b08a20b121204b1caf3a83e61}
+Recursively check for required fields in a database schema.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{IsisDb::check()}
+\end{DoxySeeAlso}
+\hypertarget{classSchemaDb_a923a94169459c4dee3f74000b4aa1807}{
+\index{SchemaDb@{SchemaDb}!example@{example}}
+\index{example@{example}!SchemaDb@{SchemaDb}}
+\subsubsection[{example}]{\setlength{\rightskip}{0pt plus 5cm}SchemaDb::example ()}}
+\label{classSchemaDb_a923a94169459c4dee3f74000b4aa1807}
+Return an example database schema.
+
+\begin{DoxySeeAlso}{See also}
+\hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{IsisDb::example()}
+\end{DoxySeeAlso}
+\hypertarget{classSchemaDb_af5c9271759bed2f9cccc80a05f7c5da8}{
+\index{SchemaDb@{SchemaDb}!optional@{optional}}
+\index{optional@{optional}!SchemaDb@{SchemaDb}}
+\subsubsection[{optional}]{\setlength{\rightskip}{0pt plus 5cm}SchemaDb::optional ()}}
+\label{classSchemaDb_af5c9271759bed2f9cccc80a05f7c5da8}
+Return the optional database config.
+
+\begin{DoxyReturn}{Returns}
+Array with optional config.
+\end{DoxyReturn}
+\hypertarget{classSchemaDb_a31db21bccb179162b5bb02b14b72d3e3}{
+\index{SchemaDb@{SchemaDb}!required@{required}}
+\index{required@{required}!SchemaDb@{SchemaDb}}
+\subsubsection[{required}]{\setlength{\rightskip}{0pt plus 5cm}static SchemaDb::required ()\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{classSchemaDb_a31db21bccb179162b5bb02b14b72d3e3}
+Return the required database config.
+
+\begin{DoxyReturn}{Returns}
+Array with required config.
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/backends/SchemaDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/doxygen.sty b/doc/latex/doxygen.sty
new file mode 100644
index 0000000..05595bf
--- /dev/null
+++ b/doc/latex/doxygen.sty
@@ -0,0 +1,350 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+\RequirePackage{array}
+\RequirePackage{calc}
+\RequirePackage{color}
+\RequirePackage{fancyhdr}
+\RequirePackage{verbatim}
+
+% Setup fancy headings
+\pagestyle{fancyplain}
+\newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+}
+\renewcommand{\chaptermark}[1]{%
+ \markboth{#1}{}%
+}
+\renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+}
+\lhead[\fancyplain{}{\bfseries\thepage}]{%
+ \fancyplain{}{\bfseries\rightmark}%
+}
+\rhead[\fancyplain{}{\bfseries\leftmark}]{%
+ \fancyplain{}{\bfseries\thepage}%
+}
+\rfoot[\fancyplain{}{\bfseries\scriptsize%
+ Generated on Fri Aug 20 15:38:19 2010 for Cinisis Database Reader by Doxygen }]{}
+\lfoot[]{\fancyplain{}{\bfseries\scriptsize%
+ Generated on Fri Aug 20 15:38:19 2010 for Cinisis Database Reader by Doxygen }}
+\cfoot{}
+
+%---------- Internal commands used in this style file ----------------
+
+% Generic environment used by all paragraph-based environments defined
+% below. Note that the command \title{...} needs to be defined inside
+% those environments!
+\newenvironment{DoxyDesc}[1]{%
+ \begin{list}{}%
+ {%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{-4pt}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}{%
+ \DoxyCode%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\newenvironment{DoxyEnumerate}{%
+ \enumerate%
+}{%
+ \endenumerate%
+}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\newenvironment{DoxyItemize}{%
+ \itemize%
+}{%
+ \enditemize%
+}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, and @dot ... @enddot
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \begin{center}%
+}{%
+ \end{center}%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{list}{}%
+ {%
+ \settowidth{\labelwidth}{40pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{-4pt}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[1]{%
+ \begin{DoxyDesc}{#1}%
+ \begin{description}%
+}{%
+ \end{description}%
+ \end{DoxyDesc}%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \begin{DoxyDesc}{#1}%
+ \begin{description}%
+}{%
+ \end{description}%
+ \end{DoxyDesc}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \begin{DoxyDesc}{#1}%
+ \begin{description}%
+}{%
+ \end{description}%
+ \end{DoxyDesc}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \begin{DoxyDesc}{#1}%
+ \begin{description}%
+}{%
+ \end{description}%
+ \end{DoxyDesc}%
+}
+
+\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
+\newenvironment{DoxyCompactList}
+{\begin{list}{}{
+ \setlength{\leftmargin}{0.5cm}
+ \setlength{\itemsep}{0pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{0pt}
+ \renewcommand{\makelabel}{\hfill}}}
+{\end{list}}
+\newenvironment{DoxyCompactItemize}
+{
+ \begin{itemize}
+ \setlength{\itemsep}{-3pt}
+ \setlength{\parsep}{0pt}
+ \setlength{\topsep}{0pt}
+ \setlength{\partopsep}{0pt}
+}
+{\end{itemize}}
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
+\newlength{\tmplength}
+\newenvironment{TabularC}[1]
+{
+\setlength{\tmplength}
+ {\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
+ \par\begin{tabular*}{\linewidth}
+ {*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
+}
+{\end{tabular*}\par}
+\newcommand{\entrylabel}[1]{
+ {\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
+\newenvironment{Desc}
+{\begin{list}{}
+ {
+ \settowidth{\labelwidth}{40pt}
+ \setlength{\leftmargin}{\labelwidth}
+ \setlength{\parsep}{0pt}
+ \setlength{\itemsep}{-4pt}
+ \renewcommand{\makelabel}{\entrylabel}
+ }
+}
+{\end{list}}
+\newenvironment{Indent}
+ {\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
+ \item[]\ignorespaces}
+ {\unskip\end{list}}
+\setlength{\parindent}{0cm}
+\setlength{\parskip}{0.2cm}
+\addtocounter{secnumdepth}{1}
+\sloppy
+\usepackage[T1]{fontenc}
+\makeatletter
+\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}%
+ {-3.25ex plus -1ex minus -0.2ex}%
+ {1.5ex plus 0.2ex}%
+ {\normalfont\normalsize\bfseries}}
+\makeatother
+\stepcounter{secnumdepth}
+\stepcounter{tocdepth}
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
diff --git a/doc/latex/hierarchy.tex b/doc/latex/hierarchy.tex
new file mode 100644
index 0000000..27d56a9
--- /dev/null
+++ b/doc/latex/hierarchy.tex
@@ -0,0 +1,34 @@
+\section{Class Hierarchy}
+This inheritance list is sorted roughly, but not completely, alphabetically:\begin{DoxyCompactList}
+\item \contentsline{section}{Cinisis}{\pageref{classCinisis}}{}
+\item \contentsline{section}{CinisisDisplayHelper}{\pageref{classCinisisDisplayHelper}}{}
+\item \contentsline{section}{CinisisHttpHelper}{\pageref{classCinisisHttpHelper}}{}
+\item \contentsline{section}{IsisDb}{\pageref{interfaceIsisDb}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{BiblioIsisDb}{\pageref{classBiblioIsisDb}}{}
+\item \contentsline{section}{MaleteDb}{\pageref{classMaleteDb}}{}
+\item \contentsline{section}{PhpIsisDb}{\pageref{classPhpIsisDb}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{IsisEntryIterator}{\pageref{classIsisEntryIterator}}{}
+\item \contentsline{section}{IsisItemIterator}{\pageref{classIsisItemIterator}}{}
+\item \contentsline{section}{IsisMainItemIterator}{\pageref{classIsisMainItemIterator}}{}
+\item \contentsline{section}{IsisMethodIterator}{\pageref{classIsisMethodIterator}}{}
+\item \contentsline{section}{IsisNormalItemFilterIterator}{\pageref{classIsisNormalItemFilterIterator}}{}
+\item \contentsline{section}{IsisReader}{\pageref{classIsisReader}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{IsisMap}{\pageref{classIsisMap}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{IsisConnector}{\pageref{classIsisConnector}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{IsisFinder}{\pageref{classIsisFinder}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{IsisAudit}{\pageref{classIsisAudit}}{}
+\end{DoxyCompactList}
+\end{DoxyCompactList}
+\end{DoxyCompactList}
+\end{DoxyCompactList}
+\item \contentsline{section}{IsisRowIterator}{\pageref{classIsisRowIterator}}{}
+\item \contentsline{section}{IsisSubfieldIterator}{\pageref{classIsisSubfieldIterator}}{}
+\item \contentsline{section}{IsisValueIterator}{\pageref{classIsisValueIterator}}{}
+\item \contentsline{section}{SchemaDb}{\pageref{classSchemaDb}}{}
+\end{DoxyCompactList}
diff --git a/doc/latex/interfaceIsisDb.eps b/doc/latex/interfaceIsisDb.eps
new file mode 100644
index 0000000..2729738
--- /dev/null
+++ b/doc/latex/interfaceIsisDb.eps
@@ -0,0 +1,207 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 156.863
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 3.1875 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 3 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(IsisDb) cw
+(BiblioIsisDb) cw
+(MaleteDb) cw
+(PhpIsisDb) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (IsisDb) 1 1 box
+ (BiblioIsisDb) 0 0 box
+ (MaleteDb) 1 0 box
+ (PhpIsisDb) 2 0 box
+
+% ----- relations -----
+
+solid
+1 1 0.25 out
+solid
+0 2 1 conn
+solid
+0 0 0.75 in
+solid
+0 1 0.75 in
+solid
+0 2 0.75 in
diff --git a/doc/latex/interfaceIsisDb.pdf b/doc/latex/interfaceIsisDb.pdf
new file mode 100644
index 0000000..178aa90
--- /dev/null
+++ b/doc/latex/interfaceIsisDb.pdf
Binary files differ
diff --git a/doc/latex/interfaceIsisDb.tex b/doc/latex/interfaceIsisDb.tex
new file mode 100644
index 0000000..9d7a637
--- /dev/null
+++ b/doc/latex/interfaceIsisDb.tex
@@ -0,0 +1,123 @@
+\hypertarget{interfaceIsisDb}{
+\section{IsisDb Interface Reference}
+\label{interfaceIsisDb}\index{IsisDb@{IsisDb}}
+}
+Inheritance diagram for IsisDb:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2cm]{interfaceIsisDb}
+\end{center}
+\end{figure}
+\subsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\hyperlink{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{\_\-\_\-construct} (\$schema)
+\item
+\hyperlink{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{read} (\$id)
+\item
+\hyperlink{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{entries} ()
+\item
+\hyperlink{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{example} ()
+\end{DoxyCompactItemize}
+\subsection*{Static Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+static \hyperlink{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{check} (\$schema, \$section=NULL)
+\end{DoxyCompactItemize}
+
+
+\subsection{Detailed Description}
+Generic interface for reading Isis databases.
+
+\subsection{Constructor \& Destructor Documentation}
+\hypertarget{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}{
+\index{IsisDb@{IsisDb}!\_\-\_\-construct@{\_\-\_\-construct}}
+\index{\_\-\_\-construct@{\_\-\_\-construct}!IsisDb@{IsisDb}}
+\subsubsection[{\_\-\_\-construct}]{\setlength{\rightskip}{0pt plus 5cm}IsisDb::\_\-\_\-construct (\$ {\em schema})}}
+\label{interfaceIsisDb_ae1c0a3496d55f710d34c5c19ada7a66b}
+Constructor.
+
+The implementation constructor should accept a database schema definition and setup the appropriate db resource.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$schema}]High level database schema description.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Database resource or FALSE in case of error.
+\end{DoxyReturn}
+\begin{DoxySeeAlso}{See also}
+default\_\-schema()
+\end{DoxySeeAlso}
+
+
+Implemented in \hyperlink{classBiblioIsisDb_ab2c5ec782b324847e104d8ad35a230af}{BiblioIsisDb}, \hyperlink{classMaleteDb_a60f87371bc1ec156b010e5b38b4c22e2}{MaleteDb}, and \hyperlink{classPhpIsisDb_abb6db51373d065baf9135fd278653bc5}{PhpIsisDb}.
+
+
+
+\subsection{Member Function Documentation}
+\hypertarget{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}{
+\index{IsisDb@{IsisDb}!check@{check}}
+\index{check@{check}!IsisDb@{IsisDb}}
+\subsubsection[{check}]{\setlength{\rightskip}{0pt plus 5cm}static IsisDb::check (\$ {\em schema}, \/ \$ {\em section} = {\ttfamily NULL})\hspace{0.3cm}{\ttfamily \mbox{[}static\mbox{]}}}}
+\label{interfaceIsisDb_af681b8f990b579f1835aa7ba4c83f1b8}
+Configuration check.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$schema}]Database schema to check.\item[{\em \$section}]Configuration section.\end{DoxyParams}
+\begin{DoxyReturn}{Returns}
+Database schema or FALSE if error.
+\end{DoxyReturn}
+
+
+Implemented in \hyperlink{classBiblioIsisDb_a929467f1907d3aeaeebe493f0c188c5b}{BiblioIsisDb}, \hyperlink{classMaleteDb_ab2da32d84af17df79d947ae32257b4ec}{MaleteDb}, and \hyperlink{classPhpIsisDb_a23761cc04114090a2863467b2accc80a}{PhpIsisDb}.
+
+\hypertarget{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}{
+\index{IsisDb@{IsisDb}!entries@{entries}}
+\index{entries@{entries}!IsisDb@{IsisDb}}
+\subsubsection[{entries}]{\setlength{\rightskip}{0pt plus 5cm}IsisDb::entries ()}}
+\label{interfaceIsisDb_a86f38eca2b6d0835b60770d8a4e511ff}
+Return number of entries in the database.
+
+\begin{DoxyReturn}{Returns}
+Number of entries in the database.
+\end{DoxyReturn}
+
+
+Implemented in \hyperlink{classBiblioIsisDb_ab6b0a977c066c25c6bdca5c1d3a083e8}{BiblioIsisDb}, \hyperlink{classMaleteDb_a5c6cb09a072e5d2ddce31c77098ccba4}{MaleteDb}, and \hyperlink{classPhpIsisDb_a0491ce84e5a85e775f811f18e63ef0fb}{PhpIsisDb}.
+
+\hypertarget{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}{
+\index{IsisDb@{IsisDb}!example@{example}}
+\index{example@{example}!IsisDb@{IsisDb}}
+\subsubsection[{example}]{\setlength{\rightskip}{0pt plus 5cm}IsisDb::example ()}}
+\label{interfaceIsisDb_a857c10d90da64067efa17afb2f32edb6}
+Return an example database schema.
+
+The example schema should have all information the implementation needs to be able to open and read a database.
+
+\begin{DoxyReturn}{Returns}
+Array with a sample database schema.
+\end{DoxyReturn}
+
+
+Implemented in \hyperlink{classBiblioIsisDb_a8e76b289b9e3a9893b9469094753d2bc}{BiblioIsisDb}, \hyperlink{classMaleteDb_a4f16c48facae498d0db1a042e9727d04}{MaleteDb}, and \hyperlink{classPhpIsisDb_a7f4f3a9fd6dab86bd3cb3149d65f92cd}{PhpIsisDb}.
+
+\hypertarget{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}{
+\index{IsisDb@{IsisDb}!read@{read}}
+\index{read@{read}!IsisDb@{IsisDb}}
+\subsubsection[{read}]{\setlength{\rightskip}{0pt plus 5cm}IsisDb::read (\$ {\em id})}}
+\label{interfaceIsisDb_a68335ec0db01ef03f0725621b38b5686}
+Read an entry from the database.
+
+
+\begin{DoxyParams}{Parameters}
+\item[{\em \$id}]Database entry id. \end{DoxyParams}
+
+
+Implemented in \hyperlink{classMaleteDb_ad2a65876db24adc388afce465e0c153e}{MaleteDb}, and \hyperlink{classPhpIsisDb_af2266931746f6f2335b831be8b8333fb}{PhpIsisDb}.
+
+
+
+The documentation for this interface was generated from the following file:\begin{DoxyCompactItemize}
+\item
+classes/backends/IsisDb.php\end{DoxyCompactItemize}
diff --git a/doc/latex/refman.tex b/doc/latex/refman.tex
new file mode 100644
index 0000000..ba4c7ac
--- /dev/null
+++ b/doc/latex/refman.tex
@@ -0,0 +1,84 @@
+\documentclass[a4paper]{book}
+\usepackage{a4wide}
+\usepackage{makeidx}
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{float}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{textcomp}
+\usepackage{alltt}
+\usepackage{times}
+\usepackage{ifpdf}
+\ifpdf
+\usepackage[pdftex,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\else
+\usepackage[ps2pdf,
+ pagebackref=true,
+ colorlinks=true,
+ linkcolor=blue,
+ unicode
+ ]{hyperref}
+\usepackage{pspicture}
+\fi
+\usepackage[utf8]{inputenc}
+\usepackage{doxygen}
+\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left }
+\makeindex
+\setcounter{tocdepth}{3}
+\renewcommand{\footrulewidth}{0.4pt}
+\begin{document}
+\hypersetup{pageanchor=false}
+\begin{titlepage}
+\vspace*{7cm}
+\begin{center}
+{\Large Cinisis Database Reader }\\
+\vspace*{1cm}
+{\large Generated by Doxygen 1.6.3}\\
+\vspace*{0.5cm}
+{\small Fri Aug 20 15:38:19 2010}\\
+\end{center}
+\end{titlepage}
+\clearemptydoublepage
+\pagenumbering{roman}
+\tableofcontents
+\clearemptydoublepage
+\pagenumbering{arabic}
+\hypersetup{pageanchor=true}
+\chapter{Todo List}
+\label{todo}
+\hypertarget{todo}{}
+\input{todo}
+\chapter{Class Index}
+\input{hierarchy}
+\chapter{Class Index}
+\input{annotated}
+\chapter{Class Documentation}
+\input{classBiblioIsisDb}
+\include{classCinisis}
+\include{classCinisisDisplayHelper}
+\include{classCinisisHttpHelper}
+\include{classIsisAudit}
+\include{classIsisConnector}
+\include{interfaceIsisDb}
+\include{classIsisEntryIterator}
+\include{classIsisFinder}
+\include{classIsisItemIterator}
+\include{classIsisMainItemIterator}
+\include{classIsisMap}
+\include{classIsisMethodIterator}
+\include{classIsisNormalItemFilterIterator}
+\include{classIsisReader}
+\include{classIsisRowIterator}
+\include{classIsisSubfieldIterator}
+\include{classIsisValueIterator}
+\include{classMaleteDb}
+\include{classPhpIsisDb}
+\include{classSchemaDb}
+\printindex
+\end{document}
diff --git a/doc/latex/todo.tex b/doc/latex/todo.tex
new file mode 100644
index 0000000..f5e3b1e
--- /dev/null
+++ b/doc/latex/todo.tex
@@ -0,0 +1,20 @@
+\label{todo__todo000001}
+\hypertarget{todo__todo000001}{}
+
+\begin{DoxyDescription}
+\item[Member \hyperlink{classIsisConnector_a10669b49c4145a86dc3662c77733d74d}{IsisConnector::existingItemKeys}(\$field, \$row=0) ]Test.
+\end{DoxyDescription}
+
+\label{todo__todo000002}
+\hypertarget{todo__todo000002}{}
+
+\begin{DoxyDescription}
+\item[Member \hyperlink{classMaleteDb_ad2a65876db24adc388afce465e0c153e}{MaleteDb::read}(\$id) ]Subfield handling.
+\end{DoxyDescription}
+
+\label{todo__todo000003}
+\hypertarget{todo__todo000003}{}
+
+\begin{DoxyDescription}
+\item[Member \hyperlink{classPhpIsisDb_af2266931746f6f2335b831be8b8333fb}{PhpIsisDb::read}(\$id) ]Subfield handling.
+\end{DoxyDescription} \ No newline at end of file