Properly implement configurable headers/footers
authorReinhold Kainhofer <reinhold@kainhofer.com>
Thu, 8 Sep 2011 22:43:58 +0000 (9 00:43 +0200)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Thu, 8 Sep 2011 22:45:20 +0000 (9 00:45 +0200)
editionkainhofer.sty
orchestrallily.ily

index 7e24110..e371985 100644 (file)
 \newcommand{\scorenumber}[1]{\gdef\@scorenumber{#1}}
 \let\@ismn\@empty
 \newcommand{\ismn}[1]{\gdef\@ismn{#1}}
-\let\@year\@empty
-\renewcommand{\year}[1]{\gdef\@year{#1}}
+\let\@yearpublished\@empty
+\newcommand{\yearpublished}[1]{\gdef\@yearpublished{#1}}
 \let\@todos\@empty
 \newcommand{\todos}[1]{\gdef\@todos{#1}}
 
 
 
 \let\oldmaketitle\maketitle
+% \def\@printdate{\footnotesize \@date \par\vspace{1em}}
+% \def\@printdate{\footnotesize[] \today[] \par[]\vspace{1em}}
+\def\@printdate{\footnotesize \the\year \par\vspace{1em}}
 
-\renewcommand\maketitle{\thispagestyle{empty}{\begin{titlepage}%
+\renewcommand\maketitle{\thispagestyle{empty}%
+  \begin{titlepage}%
   \fontfamily{pbk}\selectfont
 
 
   \let\footnotesize\small
   \let\footnoterule\relax
-  \let \footnote \thanks
+%   \let\footnote\thanks
 
   \fontsize{16pt}{18pt}\selectfont
 
   \begin{center}
 
   \null\vfill
+  {\footnotesize \@date \par}
+  \vspace{0.5em}
+
   \ifx\@composer\@empty%
   \else
     {\fontsize{22pt}{25pt}\selectfont\textbf{\@composer}\ifx\@composerdate\empty\else{} \relax \@composerdate\fi}%
 
 
   \vfill
-  \@publisher\ifx\@year\@empty%
-  \else, \@year%
+  \@publisher\ifx\@yearpublished\@empty%
+  \else, \@yearpublished%
   \fi\\
   \@scorenumber%
   % \vfill\null
   \end{center}
 
   \end{titlepage}%
-  }
+  
   \setcounter{footnote}{0}%
   \global\let\maketitle\relax
   \setcounter{page}{2}
index e2b046a..0f9e264 100644 (file)
@@ -1406,80 +1406,77 @@ titleScoreMarkup = \markup \piece-title \fromproperty #'header:piece
       (interpret-markup layout props arg)
       empty-stencil)))
 
-#(define no-header-table '())
-thisPageNoHeader = #(define-music-function (parser location) ()
-  (let* ((label (gensym "header")))
-    (set! no-header-table (cons label no-header-table))
-    (make-music 'Music
-      'page-marker #t
-      'page-label label)))
+#(define no-header-table '(1))
+addNoHeaderPage = #(define-music-function (parser location nr) (number?)
+  (set! no-header-table (cons nr no-header-table))
+  (make-music 'Music 'void #t))
+setNoHeaderPages = #(define-music-function (parser location pages) (list?)
+  (set! no-header-table pages)
+  (make-music 'Music 'void #t))
 
-
-% TODO: Use the no-header-table!
 #(define (is-header-page layout props arg)
-  (let* ((page-number (chain-assoc-get 'page:page-number props -1))
-        )
-    ;(if (and (> page-number 2) (!= page-number 7))
-    (if (> page-number 1)
+  (let* ((page-number (chain-assoc-get 'page:page-number props -1)))
+    (if (not (member page-number no-header-table))
       (interpret-markup layout props arg)
       empty-stencil)))
 
-#(define no-footer-table '())
-thisPageNoFooter = #(define-music-function (parser location) ()
-  (let* ((label (gensym "footer")))
-    (set! no-footer-table (cons label no-footer-table))
-    (make-music 'Music
-      'page-marker #t
-      'page-label label)))
+#(define no-footer-table '(1))
+addNoFooterPage = #(define-music-function (parser location nr) (number?)
+  (set! no-footer-table (cons nr no-footer-table))
+  (make-music 'Music 'void #t))
+setNoFooterPages = #(define-music-function (parser location pages) (list?)
+  (set! no-footer-table pages)
+  (make-music 'Music 'void #t))
 
-% TODO: Use the no-footer-table!
 #(define (is-footer-page layout props arg)
-  (let* ((page-number (chain-assoc-get 'page:page-number props -1))
-        ;(label 'first-score-page)
-        ;(table (ly:output-def-lookup layout 'label-page-table))
-        ;(label-page (and (list? table) (assoc label table)))
-         ;(page-number (and label-page (cdr label-page)))
-        )
-    (if (and (> page-number 1))
+  (let* ((page-number (chain-assoc-get 'page:page-number props -1)))
+    (if (not (member page-number no-footer-table))
       (interpret-markup layout props arg)
       empty-stencil)))
 
-
-#(define copyright-footer-table '())
-thisPageCopyrightFooter = #(define-music-function (parser location) ()
-  (let* ((label (gensym "copyrightfooter")))
-    (set! copyright-footer-table (cons label copyright-footer-table))
-    (make-music 'Music
-      'page-marker #t
-      'page-label label)))
-
-#(define copyright-pg 1)
-#(define (set-copyright-page page)
-  (set! copyright-pg page)
-)
-
-% TODO: Use the copyright-footer-table!
-#(define (copyright-page layout props arg)
-    (if (= (chain-assoc-get 'page:page-number props -1) copyright-pg)
+#(define copyright-pages-table '(1))
+addCopyrightPage = #(define-music-function (parser location nr) (number?)
+  (set! copyright-pages-table (cons nr copyright-pages-table))
+  (make-music 'Music 'void #t))
+setCopyrightPages = #(define-music-function (parser location pages) (list?)
+  (set! copyright-pages-table pages)
+  (make-music 'Music 'void #t))
+
+#(define (is-copyright-page layout props arg)
+  (let* ((page-number (chain-assoc-get 'page:page-number props -1)))
+    (if (member page-number copyright-pages-table)
       (interpret-markup layout props arg)
-      empty-stencil))
+      empty-stencil)))
+
 
 
 \paper {
-  oddHeaderMarkup = \markup \fill-line {
+  olyStdOddHeaderMarkup = \markup \fill-line {
     %% force the header to take some space, otherwise the
     %% page layout becomes a complete mess.
     " "
     \on-the-fly #is-header-page \fromproperty #'header:title
     \on-the-fly #is-header-page \fromproperty #'page:page-number-string
   }
-  evenHeaderMarkup = \markup \fill-line {
+  olyStdEvenHeaderMarkup = \markup \fill-line {
     \on-the-fly #is-header-page \fromproperty #'page:page-number-string
     \on-the-fly #is-header-page \fromproperty #'header:composer
     " "
   }
+  olyInstrumentOddHeaderMarkup = \markup \fill-line {
+    " "
+    \on-the-fly #is-header-page \concat { \fromproperty #'header:instrument }
+    \on-the-fly #is-header-page \fromproperty #'page:page-number-string
+  }
+  olyInstrumentEvenHeaderMarkup = \markup \fill-line {
+    \on-the-fly #is-header-page \fromproperty #'page:page-number-string
+    \on-the-fly #is-header-page \concat { \fromproperty #'header:composer ": " \fromproperty #'header:title }
+    " "
+  }
+  oddHeaderMarkup = \olyStdOddHeaderMarkup
+  evenHeaderMarkup = \olyStdEvenHeaderMarkup
 
-  oddFooterMarkup = \markup {
+  olyStdOddFooterMarkup = \markup {
     \column {
       \fill-line {
         %% publisher header field only on title page.
@@ -1487,8 +1484,8 @@ thisPageCopyrightFooter = #(define-music-function (parser location) ()
       }
       \fill-line {
         %% copyright on the first real score page
-        \on-the-fly #copyright-page \fromproperty #'header:copyright
-        \on-the-fly #copyright-page \null
+        \on-the-fly #is-copyright-page \fromproperty #'header:copyright
+        \on-the-fly #is-copyright-page \null
       }
       \fill-line {
         %% All other pages get the number of the edition centered
@@ -1496,7 +1493,20 @@ thisPageCopyrightFooter = #(define-music-function (parser location) ()
       }
     }
   }
-
+  olyInstrumentOddFooterMarkup = \markup {
+    \column {
+      \fill-line {
+        %% copyright on the first real score page
+        \on-the-fly #is-copyright-page \fromproperty #'header:copyright
+        \on-the-fly #is-copyright-page \null
+      }
+      \fill-line {
+        %% All other pages get the number of the edition centered
+        \on-the-fly #is-footer-page \fromproperty #'header:scorenumber
+      }
+    }
+  }
+  oddFooterMarkup = \olyStdOddFooterMarkup
 }