#!/usr/bin/env bash

set -e
set -o pipefail

GAP=@abs_top_builddir@/gap
GAPARGS="-b -m 1g -x 80 -q --quitonbreak"
if [ "$1" == "nopdf" ]; then
  NOPDF=", \"nopdf\""
else
  NOPDF=""
fi
echo "--------------------"
echo "Building GAP manuals"
echo "--------------------"

"$GAP" $GAPARGS -A <<EOF
base:="@abs_top_srcdir@";;
books:=["ref", "tut", "hpc", "dev"];;
latexOpts := rec(Maintitlesize := "\\\\fontsize{36}{38}\\\\selectfont");;
UpdateXMLForUserPreferences();
for run in [1,2] do
  # collect output messages separately in both runs
  outputstring:= "";;
  outputstream:= OutputTextString(outputstring, true);;
  SetPrintFormattingStatus(outputstream, false);
  SetInfoOutput(InfoGAPDoc, outputstream);
  SetInfoOutput(InfoWarning, outputstream);

  for book in books do
    path := Concatenation(base, "/doc/", book);
    dir := Directory(path);

    # skip over missing manuals
    if not IsDirectoryPath(path) then
        continue;
    fi;

    AppendTo(outputstream, "----------------------------\n");
    AppendTo(outputstream, "Building GAP manual '",book,"' at ",path,"\n");
    AppendTo(outputstream, "Run ",run," of 2\n");
    AppendTo(outputstream, "----------------------------\n");

    # for the reference manual, extra list of source files to scan
    if book = "ref" then
        f := Filename(dir, "makedocreldata.g");
        Read(f);
        files := GAPInfo.ManualDataRef.files;
    else
        files := [];
    fi;

    if run = 2 then
        # create black&white version of manual (but only on second run)
        SetGapDocLaTeXOptions("nocolor", latexOpts);
        MakeGAPDocDoc( path, "main.xml", files, book, "../..", "MathJax" $NOPDF );;

        # Rename the generated black&white PDF
        f1 := Filename(dir, "manual.pdf");
        f2 := Filename(dir, "manual-bw.pdf");
        Exec(Concatenation("mv -f ", f1, " ", f2));

        # convert manual.six to manual.lab, to allow old-style package manuals
        # to reference the manual
        GAPDocManualLabFromSixFile( book, Filename(dir, "manual.six") );;

        #
        CopyHTMLStyleFiles(dir);
    fi;

    # create manuals with color
    SetGapDocLaTeXOptions("color", latexOpts);
    MakeGAPDocDoc( path, "main.xml", files, book, "../..", "MathJax" $NOPDF);;
  od;

  CloseStream(outputstream);
  UnbindInfoOutput(InfoGAPDoc);
  UnbindInfoOutput(InfoWarning);
  Print(outputstring);
od;

# evaluate the outputs for the second run
outputstring:= ReplacedString(outputstring, "\c", "");;
errors:= Filtered(SplitString(outputstring, "\n"),
           x -> StartsWith(x, "#W ") and x <> "#W There are overfull boxes:");;
if Length(errors) = 0 then
  QuitGap(true);
else
  Print(errors, "\n");
  QuitGap(false);
fi;
EOF
