%% main file for the C++ standard.
%%

%%--------------------------------------------------
%% basics
\documentclass[a4paper,10pt,oneside,openany,final]{memoir}

\usepackage[american]
           {babel}        % needed for iso dates
\usepackage[iso,american]
           {isodate}      % use iso format for dates
\usepackage[final]
           {listings}     % code listings
\usepackage{longtable}    % auto-breaking tables
\usepackage{ltcaption}    % fix captions for long tables
\usepackage{caption}      % caption style
\usepackage{relsize}      % provide relative font size changes
\usepackage{textcomp}     % provide \text{l,r}angle
\usepackage{underscore}   % remove special status of '_' in ordinary text
\usepackage{parskip}      % handle non-indented paragraphs "properly"
\usepackage{array}        % new column definitions for tables
\usepackage[normalem]{ulem}
\usepackage{enumitem}
\usepackage{color}        % define colors for strikeouts and underlines
\usepackage{amsmath}      % additional math symbols
\usepackage{mathrsfs}     % mathscr font
\usepackage{bm}
\usepackage[final]{microtype}
\usepackage[splitindex,original]{imakeidx}
\usepackage{multicol}
\usepackage{lmodern}
\usepackage{xcolor}
\usepackage[T1]{fontenc}
\usepackage[pdftex, final]{graphicx}
\usepackage[pdftex]{hyperref}
\hypersetup{pdftitle={C++ Working Draft},
            pdfsubject={ISO/IEC JTC1 SC22 WG21, C++},
            pdfcreator={Thomas K\"{o}ppe},
            bookmarksnumbered=true,
            pdfpagemode=UseOutlines,
            pdfstartview=FitH,
            linktocpage=true,
            colorlinks=true,
            linkcolor=blue,
            citecolor=blue,
            urlcolor=blue,    % ISO/IEC Directives, Part 2, section 6.5
            plainpages=false}
\usepackage{memhfixc}     % fix interactions between hyperref and memoir
\usepackage{environ}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{xstring}

\pdfminorversion=5
\pdfcompresslevel=9
\pdfobjcompresslevel=2

\renewcommand\RSsmallest{5.5pt}  % smallest font size for relsize

% Begin grammar extraction...
\newwrite\gramout
\immediate\openout\gramout=std-gram.ext

\input{layout}
\input{styles}
\input{macros}
\input{tables}

\makeindex[name=generalindex,options=-s generalindex.ist,title=Index]
\makeindex[name=grammarindex,title=Index of grammar productions]
\makeindex[name=headerindex,title=Index of library headers]
\makeindex[name=libraryindex,options=-s libraryindex.ist,title=Index of library names]
\makeindex[name=conceptindex,title=Index of library concepts]
\makeindex[name=impldefindex,title=Index of implementation-defined behavior]
\makeglossary[xrefindex]
\makeglossary[xrefdelta]

%%--------------------------------------------------
%% fix interaction between hyperref and other
%% commands
\pdfstringdefDisableCommands{\def\smaller#1{#1}}
\pdfstringdefDisableCommands{\def\textbf#1{#1}}
\pdfstringdefDisableCommands{\def\raisebox#1{}}
\pdfstringdefDisableCommands{\def\hspace#1{}}
\pdfstringdefDisableCommands{\def\frenchspacing{}}
\pdfstringdefDisableCommands{\def\@{}}

%%--------------------------------------------------
%% add special hyphenation rules
\hyphenation{tem-plate ex-am-ple in-put-it-er-a-tor name-space name-spaces non-zero cus-tom-i-za-tion im-ple-men-ted}

%%--------------------------------------------------
%% turn off all ligatures inside \texttt
\DisableLigatures{encoding = T1, family = tt*}

%%--------------------------------------------------
%% select regular text font for \url
\urlstyle{same}

\begin{document}
\chapterstyle{cppstd}
\pagestyle{cpppage}

%%--------------------------------------------------
%% configuration
\input{config}

%%--------------------------------------------------
%% front matter
\frontmatter
\include{front}

%%--------------------------------------------------
%% main body of the document
\mainmatter
\setglobalstyles

\include{intro}
\include{lex}
\include{basic}
\include{expressions}
\include{statements}
\include{declarations}
\include{modules}
\include{classes}
\include{overloading}
\include{templates}
\include{exceptions}
\include{preprocessor}
\include{lib-intro}
\include{support}
\include{concepts}
\include{diagnostics}
\include{memory}
\include{meta}
\include{utilities}
\include{containers}
\include{iterators}
\include{ranges}
\include{algorithms}
\include{strings}
\include{text}
\include{numerics}
\include{time}
\include{iostreams}
\include{threads}
\include{exec}

%%--------------------------------------------------
%% appendices
\appendix
\chapterstyle{cppannex}

% \include and \addtocontents don't mix; see
% https://tex.stackexchange.com/questions/13914/toc-numbering-problem
\makeatletter
\immediate\write\@auxout{\noexpand\@writefile{toc}{\noexpand\let\noexpand\chapternumberlinebox\noexpand\annexnumberlinebox}}
\makeatother

\numberwithin{table}{chapter}

% ... end grammar extraction.
\immediate\closeout\gramout

\include{grammar}
\include{limits}
\include{compatibility}
\include{future}
\include{uax31}

%%--------------------------------------------------
%% back matter
\backmatter
\include{back}


%%--------------------------------------------------
%% End of document
\end{document}
