<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!-- ##################################################################################### -->
  
  <xsl:variable name="page_height">21.0cm</xsl:variable>
  <xsl:variable name="page_width">14.8cm</xsl:variable>
  
  <xsl:variable name="margin_top">1.0cm</xsl:variable>
  <xsl:variable name="margin_bottom">1.0cm</xsl:variable>
  
  <xsl:variable name="margin_1">1.6cm</xsl:variable>
  <xsl:variable name="margin_2">0.8cm</xsl:variable>
  
  
  <!-- First page -->
  <xsl:variable name="fo:layout-first-page">
    <fo:simple-page-master master-name="first-page" page-height="{$page_height}" page-width="{$page_width}" margin-top="{$margin_top}" margin-bottom="{$margin_bottom}" margin-left="{$margin_1}" margin-right="{$margin_2}">
      <fo:region-body margin-bottom="1.0cm" margin-top="1.0cm"/>
    </fo:simple-page-master>
  </xsl:variable>
  
  
  <!-- Odd pages -->
  <xsl:variable name="fo:layout-odd-page">
    <fo:simple-page-master master-name="odd" page-height="{$page_height}" page-width="{$page_width}" margin-top="{$margin_top}" margin-bottom="{$margin_bottom}" margin-left="{$margin_1}" margin-right="{$margin_2}">
      <fo:region-body margin-bottom="1.0cm" margin-top="1.0cm"/>
      <fo:region-before region-name="header-odd" extent="1.0cm"/>
      <fo:region-after region-name="footer-odd" extent="1.0cm"/>
    </fo:simple-page-master>
  </xsl:variable>
  
  
  <!-- Even pages -->
  <xsl:variable name="fo:layout-even-page">
    <fo:simple-page-master master-name="even" page-height="{$page_height}" page-width="{$page_width}" margin-top="{$margin_top}" margin-bottom="{$margin_bottom}" margin-left="{$margin_2}" margin-right="{$margin_1}">
      <fo:region-body margin-bottom="1.0cm" margin-top="1.0cm"/>
      <fo:region-before region-name="header-even" extent="1.0cm"/>
      <fo:region-after region-name="footer-even" extent="1.0cm"/>
    </fo:simple-page-master>
  </xsl:variable>
  
  
  <!-- Layout master set -->
  <xsl:variable name="fo:layout-master-set">
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-first-page"/>
      <xsl:copy-of select="$fo:layout-odd-page"/>
      <xsl:copy-of select="$fo:layout-even-page"/>
      <!-- Pages sequence -->
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="first-page"/>
        <fo:repeatable-page-master-alternatives>
          <fo:conditional-page-master-reference odd-or-even="even" master-reference="even"/>
          <fo:conditional-page-master-reference odd-or-even="odd" master-reference="odd"/>
        </fo:repeatable-page-master-alternatives>
      </fo:page-sequence-master>
    </fo:layout-master-set>
  </xsl:variable>
  
  
  <!-- Even page header (En-tête de page paire)-->
  <xsl:variable name="header-even">
    <fo:static-content flow-name="header-even">
      <fo:block text-align="center">
        <fo:block text-align="center" font-weight="bold" font-size="10pt">Charles Baudelaire</fo:block>
        <fo:leader leader-pattern="rule" rule-thickness="2pt" color="black"/>
      </fo:block>
    </fo:static-content>
  </xsl:variable>
  
  
  <!-- Even page footer (Pied de page paire)-->
  <xsl:template name="footer-even">
    <xsl:param name="titre"/>
    <fo:static-content flow-name="footer-even">
      <fo:block text-align="center">
        <fo:leader leader-pattern="rule" rule-thickness="2pt" color="black"/>
      </fo:block>
      <fo:list-block>
        <fo:list-item>
          <fo:list-item-label end-indent="5cm">
            <fo:block text-align="start">
              <fo:page-number/>
            </fo:block>
          </fo:list-item-label>
          <fo:list-item-body start-indent="5cm">
            <fo:block text-align="end">
              <xsl:value-of select="$titre"/>
            </fo:block>
          </fo:list-item-body>
        </fo:list-item>
      </fo:list-block>
    </fo:static-content>
  </xsl:template>
  
  
  <!-- Odd page header (En-tête de page impaire)-->
  <xsl:variable name="header-odd">
    <fo:static-content flow-name="header-odd">
      <fo:block text-align="center">
        <fo:block text-align="center" font-weight="bold" font-size="10pt">Charles Baudelaire</fo:block>
        <fo:leader leader-pattern="rule" rule-thickness="2pt" color="black"/>
      </fo:block>
    </fo:static-content>
  </xsl:variable>
  
  
  <!-- Odd page footer (Pied de page impaire)-->
  <xsl:template name="footer-odd">
    <xsl:param name="titre"/>
    <fo:static-content flow-name="footer-odd">
      <fo:block text-align="center">
        <fo:leader leader-pattern="rule" rule-thickness="2pt" color="black"/>
      </fo:block>
      <fo:list-block>
        <fo:list-item>
          <fo:list-item-label end-indent="5cm">
            <fo:block text-align="start">
              <xsl:value-of select="$titre"/>
            </fo:block>
          </fo:list-item-label>
          <fo:list-item-body start-indent="5cm">
            <fo:block text-align="end">
              <fo:page-number/>
            </fo:block>
          </fo:list-item-body>
        </fo:list-item>
      </fo:list-block>
    </fo:static-content>
  </xsl:template>
  
  
  <xsl:template match="/">
    <fo:root>
      <xsl:apply-templates/>
    </fo:root>
  </xsl:template>
  
  
  <!-- ######################### Traitement du livre ######################### -->
  <xsl:template match="baudelaire">
    <xsl:call-template name="Cover_Page"/>
    <xsl:call-template name="Inside_Cover_Page"/>
    <xsl:call-template name="TOC"/>
    <xsl:apply-templates select="poemes/poeme"/>
  </xsl:template>
  
  
  <!-- ***** Page 1: Page titre ***** -->
  <xsl:template name="Cover_Page">
    <!-- Gabarits de pages -->
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-first-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="first-page"/>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages  -->
    <fo:page-sequence master-reference="document">
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block space-after="24pt" text-align="center">
          <fo:external-graphic width="346px" height="355px" src="Images/portrait.jpeg"/>
        </fo:block>
        <fo:block space-after="10pt" text-align="center" font-weight="bold" font-size="30pt">Charles Baudelaire</fo:block>
        <fo:block space-after="10pt" text-align="center" font-weight="bold" font-size="16pt">Les Fleurs du Mal</fo:block>
        <fo:block space-after="10pt" text-align="center" font-weight="bold" font-size="12pt">et autres poésies</fo:block>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>
  
  
  <xsl:template name="Inside_Cover_Page">
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-even-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="even"/>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages  -->
    <fo:page-sequence master-reference="document">
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block>
          <!-- nada -->
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>
  
  
  <xsl:template name="TOC">
    <!-- Gabarits de pages -->
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-odd-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="odd"/>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages  -->
    <fo:page-sequence master-reference="document">
      <!-- Pages impaires-->
      <xsl:copy-of select="$header-odd"/>
      <xsl:call-template name="footer-odd">
        <xsl:with-param name="titre">Table des matières</xsl:with-param>
      </xsl:call-template>
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block font-weight="bold" font-size="12pt" break-before="odd-page">Table des matières</fo:block>
        <fo:block start-indent="0.6cm" font-size="7pt" font-weight="bold" text-align="justify">
          <fo:inline>
            <fo:basic-link>
              <xsl:attribute name="internal-destination">introduction</xsl:attribute>
					Introduction
				</fo:basic-link>
          </fo:inline>
	      <fo:inline>
	        <fo:leader leader-pattern="dots" leader-alignment="reference-area"/>
	      </fo:inline>
	      <fo:inline>
	        <fo:page-number-citation>
	        		<xsl:attribute name="ref-id">introduction</xsl:attribute>
	        	</fo:page-number-citation>
	      </fo:inline>
        </fo:block>
        <fo:block start-indent="0.6cm" font-size="7pt" font-weight="bold">
          <fo:inline>
            <fo:basic-link>
              <xsl:attribute name="internal-destination">biographie</xsl:attribute>
					Biographie
					</fo:basic-link>
          </fo:inline>
	      <fo:inline>
	        <fo:leader leader-pattern="dots" leader-alignment="reference-area"/>
	      </fo:inline>
	      <fo:inline>
	        <fo:page-number-citation>
	        		<xsl:attribute name="ref-id">biographie</xsl:attribute>
	        	</fo:page-number-citation>
	      </fo:inline>
        </fo:block>
        
        <xsl:for-each select="poemes/poeme">
          <xsl:sort order="ascending"/>
          <fo:block start-indent="0.6cm" font-size="7pt" font-weight="bold">
            <fo:inline>
              <fo:basic-link>
                <xsl:attribute name="internal-destination">poeme-<xsl:number format="1"/></xsl:attribute>
                <xsl:value-of select="titre"/>
              </fo:basic-link>
            </fo:inline>
		      <fo:inline>
		        <fo:leader leader-pattern="dots" leader-alignment="reference-area"/>
		      </fo:inline>
		      <fo:inline>
		        <fo:page-number-citation>
		        		<xsl:attribute name="ref-id">poeme-<xsl:number format="1"/></xsl:attribute>
		        	</fo:page-number-citation>
		      </fo:inline>
          </fo:block>
        </xsl:for-each>
        <fo:block break-after="page"/>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>
  
  
  <xsl:template match="introduction">
    <!-- Gabarits de pages -->
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-odd-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="odd"/>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages  -->
    <fo:page-sequence master-reference="document">
      <!-- Pages impaires-->
      <xsl:copy-of select="$header-odd"/>
      <xsl:call-template name="footer-odd">
        <xsl:with-param name="titre">Introduction</xsl:with-param>
      </xsl:call-template>
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block font-weight="bold" font-size="12pt" break-before="odd-page">Introduction</fo:block>
        <fo:block start-indent="0.6cm" font-size="8pt" text-align="justify">
          <xsl:apply-templates/>
        </fo:block>
        <fo:block break-after="page"/>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>


  <xsl:template match="biographie">
    <!-- Gabarits de pages -->
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-odd-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:single-page-master-reference master-reference="odd"/>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages  -->
    <fo:page-sequence master-reference="document">
      <!-- Pages impaires-->
      <xsl:copy-of select="$header-odd"/>
      <xsl:call-template name="footer-odd">
        <xsl:with-param name="titre">Biographie</xsl:with-param>
      </xsl:call-template>
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block font-weight="bold" font-size="12pt" break-before="odd-page">Biographie</fo:block>
        <fo:block start-indent="0.6cm" font-size="12pt" font-weight="bold">
          <xsl:apply-templates select="titre"/>
        </fo:block>
        <fo:block start-indent="0.6cm" font-size="7pt">
          <xsl:apply-templates select="section"/>
        </fo:block>
        <fo:block break-after="page"/>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>


  <xsl:template match="section">
    <fo:block start-indent="1.2cm" font-size="8pt" font-weight="bold" space-before="10pt">
      <xsl:apply-templates select="titre"/>
    </fo:block>
    <fo:block start-indent="1.2cm" font-size="8pt" text-align="justify">
      <xsl:apply-templates select="texte"/>
    </fo:block>
  </xsl:template>
  

  <xsl:template match="poeme">
    <!-- Gabarits de pages -->
    <fo:layout-master-set>
      <xsl:copy-of select="$fo:layout-odd-page"/>
      <xsl:copy-of select="$fo:layout-even-page"/>
      <fo:page-sequence-master master-name="document">
        <fo:repeatable-page-master-alternatives>
          <fo:conditional-page-master-reference odd-or-even="even" master-reference="even"/>
          <fo:conditional-page-master-reference odd-or-even="odd" master-reference="odd"/>
        </fo:repeatable-page-master-alternatives>
      </fo:page-sequence-master>
    </fo:layout-master-set>
    <!-- Séquence de pages -->
    <fo:page-sequence master-reference="document">
      <!-- Pages impaires-->
      <xsl:copy-of select="$header-odd"/>
      <xsl:call-template name="footer-odd">
        <xsl:with-param name="titre">
          <xsl:apply-templates select="titre"/>
        </xsl:with-param>
      </xsl:call-template>
      <!-- Pages paires-->
      <xsl:copy-of select="$header-even"/>
      <xsl:call-template name="footer-even">
        <xsl:with-param name="titre">
          <xsl:apply-templates select="titre"/>
        </xsl:with-param>
      </xsl:call-template>
      <!-- Flot -->
      <fo:flow flow-name="xsl-region-body">
        <fo:block space-after="10pt" text-align="center">
          <xsl:attribute name="id">poeme-<xsl:number format="1"/></xsl:attribute>
          <fo:block font-size="12pt" font-weight="bold" space-after="5pt">
            <xsl:apply-templates select="titre"/>
          </fo:block>
          <xsl:for-each select="verset">
            <fo:block font-size="7pt">
              <xsl:value-of select="."/>
            </fo:block>
          </xsl:for-each>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>
 
  
</xsl:stylesheet>
