# Copyright (C) 2020 T. Zachary Laine
#
# Distributed under the Boost Software License, Version 1.0. (See
# accomanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt

import path ;
import doxygen ;
import quickbook ;

using auto-index ;
using doxygen ;
using quickbook ;
using boostbook ;

rule run_doxygen ( files * : name : expand ? )
{

    expand ?= <doxygen:param>EXPAND_ONLY_PREDEF=YES ;

# TODO: Change BOOST_TEXT_NAMESPACE_V1 to be namespace detail, and
# BOOST_TEXT_NAMESPACE_V2 to be inline namespace v2 once Doxygen can actually
# process concepts.

doxygen text_reference
  :
    $(files)
  :
        <doxygen:param>EXTRACT_ALL=YES
        # note that there is no detail::unspecified -- this is a hack to get all
        # the SFINAE code out of the API docs.
        <doxygen:param>"PREDEFINED=\"BOOST_TEXT_DOXYGEN=1\" \\
                                   \"lazy_enable_if=detail::unspecified\" \\
                                   \"enable_if=detail::unspecified\" \\
                                   \"BOOST_TEXT_NAMESPACE_V1=namespace inline v1\" \\
                                   \"BOOST_TEXT_NAMESPACE_V2=namespace detail\" \\
                                   \"BOOST_TEXT_CXX14_CONSTEXPR=constexpr\""
        <doxygen:param>HIDE_UNDOC_MEMBERS=NO
        <doxygen:param>EXTRACT_PRIVATE=NO
        <doxygen:param>ENABLE_PREPROCESSING=YES
        <doxygen:param>MACRO_EXPANSION=YES
        $(expand)
        <doxygen:param>SEARCH_INCLUDES=NO
        <doxygen:param>EXAMPLE_PATH=.
        <reftitle>$(name)
  ;

}

run_doxygen [ glob ../include/boost/text/*.hpp ] : "Reference" ;

xml text
    :
        text.qbk
    ;

boostbook standalone
    :
        text
    :
        <dependency>css
        <dependency>images

        <dependency>text_reference

        # HTML options first:
        # Use graphics not text for navigation:
        <xsl:param>navig.graphics=1
        # How far down we chunk nested sections, basically all of them:
        <xsl:param>chunk.section.depth=10
        # Don't put the first section on the same page as the TOC:
        <xsl:param>chunk.first.sections=1
        # How far down sections get TOC's
        <xsl:param>toc.section.depth=10
        # Max depth in each TOC:
        <xsl:param>toc.max.depth=4
        # How far down we go with TOC's
        <xsl:param>generate.section.toc.level=10
        # Set the path to the boost-root so we find our graphics:
        #<xsl:param>boost.root="../../../.."
        # location of the main index file so our links work:
        #<xsl:param>boost.libraries=../../../../../libs/libraries.htm

        # PDF Options:
        # TOC Generation: this is needed for FOP-0.9 and later:
        # <xsl:param>fop1.extensions=1
        <xsl:param>xep.extensions=1
        # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
        <xsl:param>fop.extensions=0
        # No indent on body text:
        <xsl:param>body.start.indent=0pt
        # Margin size:
        <xsl:param>page.margin.inner=0.5in
        # Margin size:
        <xsl:param>page.margin.outer=0.5in
        # Yes, we want graphics for admonishments:
        <xsl:param>admon.graphics=1
        # Set this one for PDF generation *only*:
        # default pnd graphics are awful in PDF form,
        # better use SVG's instead:
        # <xsl:param>admon.graphics.extension=".svg"

        <auto-index>on
        <auto-index-verbose>on
        <auto-index-internal>on
        <auto-index-script>text.idx
        <quickbook-define>enable_index
        <auto-index-prefix>..
        <xsl:param>index.on.type=1
    ;

install css : [ glob $(BOOST_ROOT)/doc/src/*.css ]
    : <location>html ;
install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ]
    : <location>html/images ;
explicit css ;
explicit images ;
