<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% -*- coding: utf-8 -*-
\section{Preudfyldning}
Inden en makro sendes til klienten sker der en preudfyldningsprocess
på serveren.\\
Et givet inputfelt kan blive preudfyldt med
\begin{itemize}
\item en målt værdi via Pentominos.
\item en tidligere lagret værdi i databasen.
\item en defaultværdi.
\end{itemize}
Præcis hvilken af de tre metoder som vil blive brugt til det enkeklte
felt afhænger af tidskoder.

\subsection{Pentominos}
I headeren på en makro forefindes en række queries til pentominos
serveren. Disse udføres samlet inden makroen behandles, og producerer
et namespace hvor navnene er dikteret af deres nesting i svaret fra
pentominos serveren.\\
En query kan f.eks se sådan ud:
\begin{verbatim}
&lt;queries&gt;
  &lt;query class="lensmeter" ttl="10000"/&gt;
&lt;/queries&gt;
\end{verbatim}
Et svar kan f.eks se sådan ud:
\begin{verbatim}
&lt;results&gt;
  &lt;result class="lensmeter" timestamp="1211808877"&gt;
    &lt;group name="right"&gt;
      &lt;value name="sphere" value="-4.75"/&gt;
      &lt;value name="cyl" value="-0.25"/&gt;
      &lt;value name="axis" value="56"/&gt;
    &lt;/group&gt;
    &lt;group name="left"&gt;
      &lt;value name="sphere" value="-4.76"/&gt;
      &lt;value name="cyl" value="-0.23"/&gt;
      &lt;value name="axis" value="32"/&gt;
    &lt;/group&gt;
  &lt;/result&gt;
&lt;/results&gt;
\end{verbatim}
For hvert resultat produceres en \texttt{result} knude med tilhørende
tidkode som beskriver hvornår den givne måling er indrapporteret.\\
Disse knuder oversættes til et namespace med nesting, separeret med
\texttt{.} (punktum), bestående af først klassenavnet på querien,
dernest alle grupper og sidst navnet på værdien, f.eks
\texttt{lensmeter.right.axis}.\\
Hver af disse værdier indeholder en value og en timestamp som sat
iflg. svaret.\\
Svaret bliver nu filtreret igennem en række LUA mapper programmer som
hver især returnerer en værdi og en tidskode.\\
Mapper programmerne kan f.eks se sådan ud:
\begin{verbatim}
&lt;maps&gt;
  &lt;map name="axis"&gt;
    -- LUA program, returning explicit values
    return math.pi, 1234567890
  &lt;/map&gt;
  &lt;map name="sphere"&gt;
    -- LUA program, returning a value and its timestamp
    return lensmeter.right.sphere.value, lensmeter.right.sphere.timestamp
  &lt;/map&gt;
  &lt;map name="cyl"&gt;
    -- LUA program, returning an average, with oldest timestamp
    timestamp = lensmeter.right.cyl.timestamp
    if( timestamp &gt; lensmeter.right.axis.timestamp ) timestamp = lensmeter.right.axis.timestamp
    value = ( lensmeter.right.cyl.value + lensmeter.right.axis.value ) / 2.0
    return value, timestamp
  &lt;/map&gt;
&lt;/maps&gt;
\end{verbatim}
Et inputfelt angiver at det skal (eller kan) udfyldes via sådan et
map, ved hjælp af et \texttt{map} tag. Hvis dette tag ikke findes, eller hvis
det er tomt, eller refererer til et ikke-eksisterende map, ignoreres
det.

\subsection{Pracro}
Alle input felter i makroen har et navn tilknyttet. Disse navne
benyttes til at lave opslag i pracro databasen for at finde ud af om
der er tidligere indtastede værdier.\\
Disse eventuelle værdier har ligesom værdierne fra pentominos
tidskoder.\\
Ved opslaget benyttes en fast defineret (i configurationsfilen)
ttl. Overskrides denne af en værdi, ignoreres den i opslaget.\\
Hvis pentominos svaret ikke har givet anledning til en konkret værdi,
eller hvis værdiens tidskode er ældre end den pracro opslaget giver,
så har pracro værdien precedens over pentominos. Hvis det modsatte er
tilfældet, benyttes værdien fra pentominos.\\
Hvis hverken pentominos eller pracro giver noget bugbart resultat,
benyttes default værdien.

\subsection{Default værdi}
Alle inputfelter har en predefineret værdi, i kraft af et value felt.\\
Et ikke eksisterende value felt resulterer i en default værdi værende
den tomme streng.
</pre></body></html>