% engine=luatex

\startenvironment luatexref-env

\usemodule[abr-02]

% \tex    : tex command
% \lua    : native lua code
% \luatex : lua lib, function, value defined in luatex

\catcode`\_=12 % we will make a nice attribute for this kind of break stuff

\setuptolerance[stretch,tolerant]

\setuptype[lines=hyphenated] \setuptyping[lines=hyphenated]

\let\lua    \type
\let\luatex \type

\def\|{\string|}
\def\>{\string>}

\def\showfields#1{\ctxlua
    {   do
            local t = string.split('#1',',')
            local r = { }
            for _,a in pairs(node.fields(t[1],t[2])) do
                if not (a == 'id' or a == 'subtype' or a =='next' or a=='prev') then
                    table.insert(r,'\\type{'.. a .. '}')
                end
            end
            tex.sprint(table.concat(r, ', '))
        end
    }%
}

\def\todo#1%
  {\dontleavehmode{\bf\red <TODO: #1>}}

\setuplayout
  [height=middle,
   width=middle,
   backspace=2cm,
   topspace=2cm]

\setuppagenumbering
  [alternative=doublesided]

\setupitemize[each][packed]

\setupwhitespace[medium]

\preloadtypescripts

\definetypeface[mainfacenormal]  [ss][sans] [iwona]       [default]
\definetypeface[mainfacenormal]  [rm][serif][palatino]    [default]
\definetypeface[mainfacenormal]  [tt][mono] [modern]      [default][rscale=1.1]
\definetypeface[mainfacenormal]  [mm][math] [iwona]       [default][encoding=default]

\definetypeface[mainfacemedium]  [ss][sans] [iwona-medium][default]
\definetypeface[mainfacenormal]  [rm][serif][palatino]    [default]
\definetypeface[mainfacemedium]  [tt][mono] [modern]      [default][rscale=1.1]
\definetypeface[mainfacemedium]  [mm][math] [iwona-medium][default][encoding=default]

\definetypeface[mainfacenarrowtt][tt][mono] [modern] [default][rscale=1.1]

\setupbodyfont[mainfacenormal,11pt]

\definehead
  [remark]
  [subsubsubject]

\setuphead [chapter]      [style=\mainfacemedium\bfd,color=blue]
\setuphead [section]      [style=\mainfacemedium\bfc,color=blue]
\setuphead [subsection]   [style=\mainfacemedium\bfb,color=blue]
\setuphead [subsubsection][style=\mainfacemedium\bfa,color=blue]

\setupheadertexts
  []

\setupcolors
  [state=start]

\setuptyping
  [color=blue,
]%   style=\mainfacenarrowtt]

\definetyping[functioncall]

\setuptype
  [color=blue,
]%   style=\mainfacenarrowtt]

\definecolor[blue] [b=.5]
\definecolor[red]  [r=.5]
\definecolor[green][g=.5]
\runMPgraphicstrue
\startuseMPgraphic{lualogo}
    color   luaplanetcolor ; luaplanetcolor := .5blue  ;
    color   luaholecolor   ; luaholecolor   :=   white ;
    numeric luaextraangle  ; luaextraangle  := 0 ;

    vardef lualogo = image (
        % Graphic design by A. Nakonechnyj. Copyright (c) 1998, All rights reserved.

        save luaorbitcolor, d, r, p ; color luaorbitcolor ; numeric d, r, p ;

        luaorbitcolor := .5luaholecolor ; d := sqrt(2)/4 ; r := 1/4 ; p := r/8 ;

        fill fullcircle scaled 1 withcolor luaplanetcolor ;
        draw fullcircle rotated 40.5 scaled (1+r) dashed evenly scaled p withpen pencircle scaled (p/2) withcolor luaorbitcolor ;
        fill fullcircle scaled r shifted (d+1/8,d+1/8) rotated luaextraangle withcolor luaplanetcolor ;
        fill fullcircle scaled r shifted (d-1/8,d-1/8) withcolor luaholecolor   ;
    )  enddef ;

\stopuseMPgraphic

\startuseMPgraphic{luapage}
    \includeMPgraphic{lualogo}

    StartPage ;

        fill Page withcolor (white-luaplanetcolor) ;

        picture p ; p := lualogo xsized (3PaperWidth/5) ;
        draw p shifted center Page shifted (0,-ypart center ulcorner p) ;

    StopPage ;
\stopuseMPgraphic

\startuseMPgraphic{luanumber}
    \includeMPgraphic{lualogo}
%     luaextraangle := \realfolio*360/\lastpage ;
    luaextraangle := 10 * ( (\realfolio-2)*36/(\lastpage-2) ) ;
    picture p ; p := lualogo ;
    setbounds p to boundingbox fullcircle ;
    draw p ysized 1cm ;
\stopuseMPgraphic

\definelayer
  [page]
  [width=\paperwidth,
   height=\paperheight]

\setupbackgrounds
  [leftpage]
  [background=page]

\setupbackgrounds
  [rightpage]
  [background=page]

\startsetups pagenumber:right
  \setlayerframed
    [page]
    [preset=rightbottom,offset=1cm]
    [frame=off,height=1cm,offset=overlay]
    {\useMPgraphic{luanumber}}
  \setlayerframed
    [page]
    [preset=rightbottom,offset=1cm,x=1.5cm]
    [frame=off,height=1cm,width=1cm,offset=overlay]
    {\pagenumber}
  \setlayerframed
    [page]
    [preset=rightbottom,offset=1cm,x=2.5cm]
    [frame=off,height=1cm,offset=overlay]
    {\getmarking[chapter]}% Lua\TeX\ Reference Manual}
\stopsetups

\startsetups pagenumber:left
  \setlayerframed
    [page]
    [preset=leftbottom,offset=1cm,x=2.5cm]
    [frame=off,height=1cm,offset=overlay]
    {\getmarking[chapter]}
  \setlayerframed
    [page]
    [preset=leftbottom,offset=1cm,x=1.5cm]
    [frame=off,height=1cm,width=1cm,offset=overlay]
    {\pagenumber}
  \setlayerframed
    [page]
    [preset=leftbottom,offset=1cm]
    [frame=off,height=1cm,offset=overlay]
    {\useMPgraphic{luanumber}}
\stopsetups

\startsetups [titlepage]

    \startstandardmakeup

        \switchtobodyfont[mainfacemedium]
        \definedfont[Bold at .08\paperheight] \setupinterlinespace

        \setlayer[page]{\useMPgraphic{luapage}}

        \setlayerframed
          [page]
          [preset=middletop,
           voffset=.05\paperheight]
          [align=middle,
           foregroundcolor=blue,
           frame=off]
          {Lua\TeX\\Reference}

        \definedfont[Bold at 24pt] \setupinterlinespace

        \setlayerframed
          [page]
          [preset=middletop,
           voffset=.35\paperheight]
          [align=middle,
           foregroundcolor=blue,
           frame=off]
          {\doifsomething
               {\getvariable{document}{snapshot}}
               {snapshot \getvariable{document}{snapshot}}%
           \doifsomething
               {\getvariable{document}{beta}}
               {beta \getvariable{document}{beta}}%
            }

    \stopstandardmakeup

    \startstandardmakeup

        \raggedleft

        \definedfont[Bold at 48pt] \setupinterlinespace

        \start \blue Lua\TeX \endgraf Reference \endgraf Manual \stop

        \blank

        \definedfont[Bold at 24pt] \setupinterlinespace

        \blank

        \vfill

        \definedfont[Bold at 12pt] \setupinterlinespace

        copyright: Lua\TeX\ development team \endgraf
        more info: www.luatex.org \endgraf
        version: \currentdate \doifsomething{\getvariable{document}{snapshot}}{(snapshot \getvariable{document}{snapshot})} \endgraf

    \stopstandardmakeup

    \setupbackgrounds
      [leftpage]
      [setups=pagenumber:left]

    \setupbackgrounds
      [rightpage]
      [setups=pagenumber:right]

\stopsetups

\def\nonterminal#1>{\mathematics{\langle\hbox{{\rm #1}}\rangle}}

\ifx\directlua\undefined

  \definetyping[syntax]
  \definetype[syntax]

\else

    % taco's brainwave -)

    \newcatcodetable\syntaxcodetable

    \def\makesyntaxcodetable
      {\begingroup
       \catcode`\<=13 \catcode`\|=12
       \catcode`\!= 0 \catcode`\\=12
       \savecatcodetable\syntaxcodetable
       \endgroup}

    \makesyntaxcodetable

    \def\startsyntax {\begingroup\catcodetable\syntaxcodetable  \dostartsyntax}
    \def\syntax      {\begingroup\catcodetable\syntaxcodetable  \dosyntax}

    \def\syntaxenvbody#1%
      {\par
       \tt
       \startnarrower
       {\blue #1}%
       \stopnarrower
       \par}

    \def\syntaxbody#1%
      {{\blue \tt #1}}

    \bgroup \catcodetable\syntaxcodetable

    !gdef!dostartsyntax#1\stopsyntax{!let<!nonterminal!syntaxenvbody{#1}!endgroup}
    !gdef!dosyntax     #1{!let<!nonterminal!syntaxbody{#1}!endgroup}

    !egroup

\fi

\setupinteraction[state=start]
\placebookmarks[chapter,section,subsection]

% Hans doesn't like the bookmarks opening by default
% \setupinteractionscreen[option=bookmark]

\stopenvironment

