#/bin/sh

# Script to prepare the files for building a PCRE2 release. It does some
# processing of the documentation, detrails files, and creates pcre2.h.generic
# and config.h.generic (for use by builders who can't run ./configure).

# You must run this script before runnning "make dist". If its first argument
# is "doc", it stops after preparing the documentation. There are no other
# arguments. The script makes use of the following files:

# 132html     A Perl script that converts a .1 or .3 man page into HTML. It
#             "knows" the relevant troff constructs that are used in the PCRE2
#             man pages.

# CheckMan    A Perl script that checks man pages for typos in the mark up.

# CleanTxt    A Perl script that cleans up the output of "nroff -man" by
#             removing backspaces and other redundant text so as to produce
#             a readable .txt file.

# Detrail     A Perl script that removes trailing spaces from files.

# doc/index.html.src
#             A file that is copied as index.html into the doc/html directory
#             when the HTML documentation is built. It works like this so that
#             doc/html can be deleted and re-created from scratch.

# README & NON-AUTOTOOLS-BUILD
#             These files are copied into the doc/html directory, with .txt
#             extensions so that they can by hyperlinked from the HTML
#             documentation, because some people just go to the HTML without
#             looking for text files.


# First, sort out the documentation. Remove pcre2demo.3 first because it won't
# pass the markup check (it is created below, using markup that none of the
# other pages use).

cd doc
echo Processing documentation

/bin/rm -f pcre2demo.3

# Check the remaining man pages

perl ../CheckMan *.1 *.3
if [ $? != 0 ] ; then exit 1; fi

# Make Text form of the documentation. It needs some mangling to make it
# tidy for online reading. Concatenate all the .3 stuff, but omit the
# individual function pages.

cat <<End >pcre2.txt
-----------------------------------------------------------------------------
This file contains a concatenation of the PCRE2 man pages, converted to plain
text format for ease of searching with a text editor, or for use on systems
that do not have a man page processor. The small individual files that give
synopses of each function in the library have not been included. Neither has
the pcre2demo program. There are separate text files for the pcre2grep and
pcre2test commands.
-----------------------------------------------------------------------------


End

echo "Making pcre2.txt"
for file in pcre2 pcre2api pcre2build pcre2callout pcre2compat pcre2jit \
            pcre2limits pcre2matching pcre2partial pcre2pattern pcre2perform \
            pcre2posix pcre2sample pcre2serialize pcre2syntax \
            pcre2unicode ; do
  echo "  Processing $file.3"
  nroff -c -man $file.3 >$file.rawtxt
  perl ../CleanTxt <$file.rawtxt >>pcre2.txt
  /bin/rm $file.rawtxt
  echo "------------------------------------------------------------------------------" >>pcre2.txt
  if [ "$file" != "pcre2sample" ] ; then
    echo " " >>pcre2.txt
    echo " " >>pcre2.txt
  fi
done

# The three commands
for file in pcre2test pcre2grep pcre2-config ; do
  echo Making $file.txt
  nroff -c -man $file.1 >$file.rawtxt
  perl ../CleanTxt <$file.rawtxt >$file.txt
  /bin/rm $file.rawtxt
done


# Make pcre2demo.3 from the pcre2demo.c source file

echo "Making pcre2demo.3"
perl <<"END" >pcre2demo.3
  open(IN, "../src/pcre2demo.c") || die "Failed to open src/pcre2demo.c\n";
  open(OUT, ">pcre2demo.3") || die "Failed to open pcre2demo.3\n";
  print OUT ".\\\" Start example.\n" .
            ".de EX\n" .
            ".  nr mE \\\\n(.f\n" .
            ".  nf\n" .
            ".  nh\n" .
            ".  ft CW\n" .
            "..\n" .
            ".\n" .
            ".\n" .
            ".\\\" End example.\n" .
            ".de EE\n" .
            ".  ft \\\\n(mE\n" .
            ".  fi\n" .
            ".  hy \\\\n(HY\n" .
            "..\n" .
            ".\n" .
            ".EX\n" ;
  while (<IN>)
    {
    s/\\/\\e/g;
    print OUT;
    }
  print OUT ".EE\n";
  close(IN);
  close(OUT);
END
if [ $? != 0 ] ; then exit 1; fi


# Make HTML form of the documentation.

echo "Making HTML documentation"
/bin/rm html/*
cp index.html.src html/index.html
cp ../README html/README.txt
cp ../NON-AUTOTOOLS-BUILD html/NON-AUTOTOOLS-BUILD.txt

for file in *.1 ; do
  base=`basename $file .1`
  echo "  Making $base.html"
  perl ../132html -toc $base <$file >html/$base.html
done

# Exclude table of contents for function summaries. It seems that expr
# forces an anchored regex. Also exclude them for small pages that have
# only one section.

for file in *.3 ; do
  base=`basename $file .3`
  toc=-toc
  if [ `expr $base : '.*_'` -ne 0 ] ; then toc="" ; fi
  if [ "$base" = "pcre2sample" ]  || \
     [ "$base" = "pcre2compat" ]  || \
     [ "$base" = "pcre2limits" ]  || \
     [ "$base" = "pcre2unicode" ] ; then
    toc=""
  fi
  echo "  Making $base.html"
  perl ../132html $toc $base <$file >html/$base.html
  if [ $? != 0 ] ; then exit 1; fi
done

# End of documentation processing; stop if only documentation required.

cd ..
echo Documentation done
if [ "$1" = "doc" ] ; then exit; fi

# These files are detrailed; do not detrail the test data because there may be
# significant trailing spaces. Do not detrail RunTest.bat, because it has CRLF
# line endings and the detrail script removes all trailing white space. The
# configure files are also omitted from the detrailing.

files="\
  Makefile.am \
  configure.ac \
  README \
  LICENCE \
  COPYING \
  AUTHORS \
  NEWS \
  NON-AUTOTOOLS-BUILD \
  INSTALL \
  132html \
  CleanTxt \
  Detrail \
  ChangeLog \
  CMakeLists.txt \
  RunGrepTest \
  RunTest \
  pcre2-config.in \
  perltest.sh \
  libpcre2-8.pc.in \
  libpcre2-16.pc.in \
  libpcre2-32.pc.in \
  libpcre2-posix.pc.in \
  src/pcre2_dftables.c \
  src/pcre2.h.in \
  src/pcre2_auto_possess.c \
  src/pcre2_compile.c \
  src/pcre2_config.c \
  src/pcre2_context.c \
  src/pcre2_convert.c \
  src/pcre2_dfa_match.c \
  src/pcre2_error.c \
  src/pcre2_extuni.c \
  src/pcre2_find_bracket.c \
  src/pcre2_internal.h \
  src/pcre2_intmodedep.h \
  src/pcre2_jit_compile.c \
  src/pcre2_jit_match.c \
  src/pcre2_jit_misc.c \
  src/pcre2_jit_test.c \
  src/pcre2_maketables.c \
  src/pcre2_match.c \
  src/pcre2_match_data.c \
  src/pcre2_newline.c \
  src/pcre2_ord2utf.c \
  src/pcre2_pattern_info.c \
  src/pcre2_printint.c \
  src/pcre2_string_utils.c \
  src/pcre2_study.c \
  src/pcre2_substring.c \
  src/pcre2_tables.c \
  src/pcre2_ucd.c \
  src/pcre2_ucp.h \
  src/pcre2_valid_utf.c \
  src/pcre2_xclass.c \
  src/pcre2demo.c \
  src/pcre2grep.c \
  src/pcre2posix.c \
  src/pcre2posix.h \
  src/pcre2test.c"

echo Detrailing
perl ./Detrail $files doc/p* doc/html/*

echo Done

#End
