texlive[41890] Master: leadsheets (19aug16)

commits+karl at tug.org commits+karl at tug.org
Fri Aug 19 23:44:57 CEST 2016


Revision: 41890
          http://tug.org/svn/texlive?view=revision&revision=41890
Author:   karl
Date:     2016-08-19 23:44:56 +0200 (Fri, 19 Aug 2016)
Log Message:
-----------
leadsheets (19aug16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/leadsheets/README
    trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.pdf
    trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chordnames.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chords.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musejazz.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musicsymbols.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.properties.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.shorthands.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.songs.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.templates.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.translations.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.transposing.code.tex
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.sty
    trunk/Master/tlpkg/bin/tlpkg-ctan-check

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheet.cls
    trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.external.code.tex

Modified: trunk/Master/texmf-dist/doc/latex/leadsheets/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/leadsheets/README	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/doc/latex/leadsheets/README	2016-08-19 21:44:56 UTC (rev 41890)
@@ -1,5 +1,5 @@
 --------------------------------------------------------------------------
-the LEADSHEETS package v0.3a 2016/02/02
+the LEADSHEETS package v0.5 2016/08/18
  
   typesetting leadsheets and songbooks
 
@@ -28,9 +28,11 @@
    leadsheets.library.<name>.code.tex:
     * chordnames
     * chords
+    * external
     * musejazz
     * musicsymbols
     * properties
+    * shorthands
     * songs
     * templates
     * translations

Modified: trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/doc/latex/leadsheets/leadsheets_en.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -1,20 +1,22 @@
-% !arara: pdflatex: { shell: on }
-% arara: biber
-% arara: pdflatex
-% arara: pdflatex
+% arara: pdflatex: { shell: on , action: nonstopmode }
+% !arara: biber
+% !arara: pdflatex
+% !arara: pdflatex
 \documentclass[load-preamble+]{cnltx-doc}
-\usepackage{leadsheets}
+\usepackage{leadsheets,bookmark}
 \setcnltx{
   package = leadsheets ,
   info    = Typesetting leadsheets and songbooks ,
   authors = Clemens Niederberger ,
   email   = contact at mychemistry.eu ,
-  url     = http://www.mychemistry.eu/forums/forum/leadsheets/ ,
+  url     = https://github.com/cgnieder/leadsheets/ ,
   add-cmds = {
-    chord , chordname ,
+    choir , chord , chordname ,
     definesongtitletemplate ,
     defineversetypetemplate , 
     expandcode ,
+    ifallsongproperties ,
+    ifanysongproperty ,
     ifobeylines ,
     ifsongmeasuring ,
     ifsongpropertiesequal ,
@@ -22,6 +24,14 @@
     ifversenamed ,
     ifversenumbered ,
     ifversestarred ,
+    includeleadsheet ,
+    instruction ,
+    leadsheetstranslate ,
+    lsenparen ,
+    mkchoir ,
+    mkinstruction ,
+    mklsenparen ,
+    mklsenparens ,
     newversetype ,
     printsongpropertylist ,
     setchords ,
@@ -42,6 +52,7 @@
     endmdframed ,
     mdframed ,
     newfontfamily ,
+    newrobustcmd ,
     musejazz
   } ,
   add-envs = {
@@ -52,7 +63,8 @@
     info ,
     interlude ,
     intro , intro* ,
-    outro , outro *
+    outro , outro * ,
+    prechorus , prechorus* ,
     solo , solo* ,
     song ,
     verse
@@ -227,11 +239,14 @@
     library to use MuseScore's \enquote{MuseJazz} font, see
     section~\ref{sec:musejazz-libr}.  It loads the \library{chords}
     library.
-  \item[\library{songs}]  \packageoption{songs}This is the \emph{main
+  \item[\library{songs}] \packageoption{songs}This is the \emph{main
     library}.  It defines everything necessary for the typesetting of the
     leadsheets.  It currently loads \emph{all other libraries}, \ie, user
     libraries \emph{and} internal libraries, except for the \library{musejazz}
-    library.  This library is described in part~\ref{part:leadsheets-library}.
+    library.  This library is described in part~\ref{part:leadsheets-songs-library}.
+  \item[\library{external}] \packageoption{external}enables to include
+    external leadsheet documents using the \cls{leadsheets} class into a main
+    document, see part~\ref{part:external-leadsheet} for details.
 \end{description}
 Those libraries can also be loaded as a package option.  If you say
 \begin{sourcecode}
@@ -254,6 +269,9 @@
     loaded directly by users.  It defines the necessary macros for song
     properties.  See section~\ref{sec:song-properties} for more details on the
     concept.
+  \item[\library{shorthands}] This is an auxiliary library not meant to be
+    loaded directly by users.  It provides means for defining shorthand
+    characters.
   \item[\library{transposing}]  This is an auxiliary library not meant to be
     loaded directly by users.  It defines a transposing mechanism for chord
     symbols.  See section~\ref{sec:transposing} for further details.
@@ -315,6 +333,8 @@
       \showsymbol{wholerest}   & \showsymbol{halfrest} \\
       \showsymbol{quarterrest} & \showsymbol{eighthrest} \\
       \showsymbol{sixteenthrest} \\
+    \midrule
+      \showsymbol{Break} \\
     \bottomrule
   \end{tabular}
   \label{tab:musicsymbols}
@@ -352,8 +372,15 @@
     The distance between two bar rules as in \cs{doublebar} or \cs{stopbar}.
 \end{commands}
 
+Finally \musicsymbols{} provides a macro for adding an abitrary meter:
+\begin{commands}
+  \command{meter}[\marg{numerator}\marg{denominator}]
+    \sinceversion{0.5}For example \verbcode+\meter{6}{8}+: \meter{6}{8}
+\end{commands}
+
 \clearpage
-\part{The \library*{chords} Library (and the \library*{musejazz} Library)}\label{part:chords-library}
+\part{The \library*{chords} Library (and the \library*{musejazz}
+  Library)}\label{part:chords-library}
 \dictum[Wes Montgomery]{%
   I never practice my guitar -- from time to time I just open the case and
   throw in a piece of raw meat.%
@@ -491,7 +518,9 @@
   \keyval{major}{code}\Default
     The token list \code{ma}.
   \keyval{minor}{code}\Default{m}
-    The token list \code{mi}.
+    The token list \code{mi}.  This option knows a special value.  If you set
+    \keyis{minor}{lowercase} then minor chords are converted to lowercase
+    letters.  This means an input \code{Dmi} becomes \code{d}.
   \keyval{major-seven}{code}\Default{\cs*{textsuperscript}\Marg{maj7}}
     The token list \code{maj7}.
   \keyval{major-nine}{code}\Default{\cs*{textsuperscript}\Marg{maj9}}
@@ -558,7 +587,7 @@
 
 Here is a small example of it's usage and the outcome:
 
-\begin{example}[compile,program=lualatex,max-pages=1,add-frame=false]
+\begin{example}[compile,program=xelatex,max-pages=1,add-frame=false]
   % compile with LuaLaTeX or XeLaTeX
   \documentclass[margin=4mm]{standalone}
   \usepackage{leadsheets}
@@ -569,7 +598,7 @@
 \end{example}
 
 \clearpage
-\part{The \library*{songs} Library}\label{part:leadsheets-library}
+\part{The \library*{songs} Library}\label{part:leadsheets-songs-library}
 \dictum[Jeff Beck]{%
   I don't care about the rules. If I don't break the rules at least ten
   times every song then I'm not doing my job.%
@@ -581,7 +610,7 @@
 can be used to create complete songbooks. The basic idea is that songs are
 typeset in the \env{song} environment.  Each song gets a number of properties
 (see section~\ref{sec:song-properties}) that determine how the title of the
-song is typeset.  For the typesetting of the titles a template mechansim is
+song is typeset.  For the typesetting of the titles a template mechanism is
 used (see section~\ref{sec:title-templates}).  Songs can also be tagged.  The
 tags then allow to typeset only songs matching a list of tags that is
 specified via an option.
@@ -722,6 +751,10 @@
     Makes the characters \shortcut{:} and \shortcut{\barsymbol} active inside
     the \env{song} environment.  See sections~\ref{sec:special-characters}
     and~\ref{sec:typesetting-bars} for more details.
+  \keybool{disable-measuring}\Default{false}
+    \sinceversion{0.4}This option turns of the song height measuring.  This
+    makes song title template definitions easier (see section~\ref{sec:title-templates} for
+    details).  \emph{The song property \property{height} will be set to 0pt then!}
 \end{options}
 
 \subsection{Song Properties}\label{sec:song-properties}
@@ -796,15 +829,17 @@
 There are three more properties, \property{counter}, \property{ID} and
 \property{height} that cannot be set but are set automatically for each song.
 The \property{counter} simply holds the number of the current song starting
-from \code{1} for the first song.  The \property{ID} currently always ia
+from \code{1} for the first song.  The \property{ID} currently always is
 \code{song\meta{counter}} where \meta{counter} is the current
 \property{counter} value.  The property \property{height} holds the height of
 the typeset song in pt.  The height is determined by placing the body of the
 respective \env{song} environment in a vertical box and measuring the height
-and depth of the box.  This is done in a measuring phase that can be tested in
-a songtitle template definition, see section~\ref{sec:title-templates} for
-details. \emph{ This is important since the property \property{height} is not
-available in the measuring phase but only afterwards!}
+and depth of the box.  This is done in a measuring phase that can and should
+be tested in a songtitle template definition, see
+section~\ref{sec:title-templates} for details.  \emph{This is important since
+  the property \property{height} is not available in the measuring phase but
+  only afterwards!}  If the option \option{disable-measuring} has been set the
+property \property{height} will have the value~0pt!
 
 In principle all properties can get list of entries where items are separated
 with \code{\visualizespaces{ and }}.  Of course this doesn't make sense for
@@ -1107,7 +1142,7 @@
 and \code{-}, though, as well as the mandatory space (\visiblespace)!
 
 Each \env{verse} like environment (see section~\ref{sec:other-envverse-like}
-for more information) is treated uniquely by this mechansim:
+for more information) is treated uniquely by this mechanism:
 
 \begin{example}
   \definesongtitletemplate{empty}{}
@@ -1424,7 +1459,7 @@
 according to the chosen title template.  It is chosen through the option
 \option{title-template} which can be set with \cs{setleadsheets} or as option
 to a specific \env{song} environment.  \leadsheets{} provides few predefined
-templates and an easy mechansim to define own templates.
+templates and an easy mechanism to define own templates.
 
 \subsubsection{Existing Templates}
 
@@ -1488,6 +1523,12 @@
     mandatory argument.
   \expandable\command{ifsongproperty}[\marg{property}\marg{true}\marg{false}]
     Checks if property \meta{property} has been set.
+  \command{ifanysongproperty}[\Marg{csv list of properties}\marg{true}\marg{false}]
+    \sinceversion{0.4}Checks if any of the properties in \meta{csv list of
+      properties} has been set.
+  \command{ifallsongproperties}[\Marg{csv list of properties}\marg{true}\marg{false}]
+    \sinceversion{0.4}Checks if all of the properties in \meta{csv list of
+      properties} have been set.
   \command{ifsongpropertiesequal}[\marg{property 1}\marg{property
     2}\marg{true}\marg{false}]
     Checks if properties \meta{property 1} and \meta{property 2} have been set
@@ -1494,10 +1535,10 @@
     to the same value.
   \expandable\command{ifsongmeasuring}[\marg{true}\marg{false}]
     \leadsheets{} measures the height of a song body before it typesets it and
-    it can be necessary in a template to know if the measuring phase is active
-    or not.  For example the song property \property{height} should only be
-    used if \emph{not} in the measuring phase: it's value get's determined
-    there and is not yet available.
+    it can often be necessary in a template to know if the measuring phase is
+    active or not.  For example the song property \property{height} should
+    only be used if \emph{not} in the measuring phase: it's value get's
+    determined there and is not yet available.
   \command{expandcode}[\marg{code}]
     Exhaustively expands \meta{code}.  Experienced users won't need this.  It
     is essentially
@@ -1934,10 +1975,255 @@
 \end{table}
 
 \clearpage
-\part{Appendix}
+\part{The \library*{external} Library and the \cls*{leadsheet}
+  Class}\label{part:external-leadsheet}
 \dictum[Thelonious Monk]{%
   Talking about music is like dancing about architecture.%
 }
+
+\section{The Idea}
+
+For\sinceversion{0.5} some users -- like myself -- it may be desirable to
+create leadsheets that can be reused in another document as a compilation of
+songs.  The usual way would be to
+\begin{itemize}
+  \item either solve this manually by copying the \env{song} environment from
+    one document to the other.  This is not ideal, of course.
+  \item place the \env{song} in a file of its own and \cs*{input} it in the
+    different documents.  This is easy and safe but requires a total of three
+    files for two documents.  That's not really a problem, though, so it is a
+    valid way.
+\end{itemize}
+
+\leadsheets{} now provides a third way.  You write the single leadsheet using
+the \cls{leadsheet} class that comes with this package.  Let's call this file
+\code{single.tex} for the following discussion:
+\begin{sourcecode}
+  \documentclass{leadsheet}
+  \usepackage[T1]{fontenc}
+  \usepackage[utf8]{inputenc}
+  
+  \begin{document}
+
+  \begin{song}{ ... }
+    ...
+  \end{song}
+
+  \end{document}
+\end{sourcecode}
+
+You can now include this document as is in another file -- let's call it
+\code{multiple.tex}:
+\begin{sourcecode}
+  \documentclass{scrartcl}
+  \usepackage{leadsheets}
+  \useleadsheetslibraries{external}
+
+  \begin{document}
+
+  \includeleadsheet{single.tex}
+  
+  \end{document}
+\end{sourcecode}
+
+Depending on the settings this removes the complete preamble from
+\code{single.tex} and only includes the document body of the file.
+
+\section{The \cls*{leadsheet} Class}\label{sec:leadsheet-class}
+
+The \cls{leadsheet} class is a class file built upon the \cls{scrartcl}
+class.  It defines a song title template \titletemplate{leadsheet}, makes a
+few setup choices
+\begin{sourcecode}
+  \setleadsheets{
+    title-template = leadsheet ,
+    bar-shortcuts ,
+    verse/numbered ,
+    verses-format = ,
+    verses-label-format = \bfseries ,
+    info/format = \itshape ,
+    chorus/format = \itshape
+  }
+\end{sourcecode}
+and sets the header and the footer of the leadsheet pages.
+
+\begin{example}[
+  compile,
+  graphics={trim={2cm 18cm 2cm 2cm},clip},
+  add-sourcecode-options={literate=}]
+  \documentclass{leadsheet}
+  \usepackage[T1]{fontenc}
+  \usepackage[utf8]{inputenc}
+  \usepackage[ngerman]{babel}
+
+  \begin{document}
+
+  \begin{song}{title={Mary Had A Little Lamb}, music={Stevie Ray Vaughan},
+    interpret={Stevie Ray Vaughan}, lyrics={traditional}, tags={srv,blues}}
+  \begin{verse}
+    Mary had a little lamb \\
+    Its fleece was white as snow, yea \\
+    Everywhere the child went \\
+    The little lamb was sure to go, yea
+  \end{verse}
+  \begin{verse}
+    He followed her to school one day \\
+    And broke the teacher's rule \\
+    What a time did they have \\
+    That day at school
+  \end{verse}
+  \end{song}
+
+  \end{document}
+\end{example}
+
+The header contains \enquote{\meta{song title} (\meta{interpret})} if the
+leadsheet has more than one page in total.  Otherwise it is empty.
+
+The footer contains \enquote{\meta{page} of \meta{pages}} if the leadsheet has
+more than one page in total.  Otherwise it is empty.
+
+The class provides the verse type \env{prechorus}:
+\begin{environments}
+  \environment{prechorus}[\oarg{options}]
+    Environment for marking the pre-chorus of a song.
+\end{environments}
+
+\begin{commands}
+  \command{instruction}[\marg{text}]
+    Short macro to add instructional text.
+  \command{mkinstruction}[\marg{text}]
+    The formatting macro used by \cs{instruction}.  You can redefine it in
+    order to change the appearance.  The default definition is: \\
+    \verbcode+\newcommand*\mkinstruction[1]{\emph{#1}}+
+  \command{choir}[\marg{text}]
+    Short macro to add (background) choir text.
+  \command{mkchoir}[\marg{text}]
+    The formatting macro used by \cs{choir}.  You can redefine it in
+    order to change the appearance.  The default definition is: \\
+    \verbcode+\newcommand*\mkchoir[1]{\instruction{\leadsheetstranslate{choir}: #1}}+
+  \command{lsenparen}[\marg{text}]
+    Short macro to add parentheses around text.  Used internally by
+    \cs{instruction}.
+  \command{mklsenparens}
+    The parentheses setting macro used by \cs{lsenparen}.  You can redefine it
+    in order to change the parentheses.  The default definition is: \\
+    \verbcode+\newcommand*\mklsenparens{[]}+ \\
+    \emph{The definition needs to be expandable and to expand to exactly two
+      tokens or braced groups, one for the opening parenthesis and the second
+      for the closing parenthesis!}
+  \command{mklsenparen}[\marg{openen parenthesis}\marg{closing
+    parenthesis}\marg{text}]
+    The formatting macro used by \cs{lsenparen}.  You can redefine it in
+    order to change the appearance.  The default definition is: \\
+    \verbcode+\newcommand*\mklsenparen[3]{\textup{#1}#3\textup{#2}}+
+\end{commands}
+
+Here is an example that demonstrates \cs{choir} and \cs{instruction}.  (The
+code of the example code has been saved in a file called
+\code{single-leadsheet.tex}.  It is used later on again.)\label{single-leadsheet}
+\begin{example}[compile,graphics={trim={2cm 18cm 2cm 2cm},clip},
+  add-sourcecode-options={literate=}]
+  \documentclass{leadsheet}
+  \usepackage[T1]{fontenc}
+  \usepackage[utf8]{inputenc}
+
+  \begin{document}
+
+  \begin{song}{title=foobar}
+  \begin{verse}
+    \instruction{keyboard only} \\
+    Lorem ipsum dolor sit amet, consetetur sadipscing \\
+    \choir{sed diam nonumy eirmod tempor invidunt ut labore et dolore}
+  \end{verse}
+  \begin{prechorus}
+    \instruction{+ band} \\
+    Lorem ipsum dolor sit amet, consetetur sadipscing
+  \end{prechorus}
+  \end{song}
+
+  \end{document}
+\end{example}
+  
+\section{The \library*{external} Library}
+
+Loading the \library{external} library allows to include complete leadsheet
+documents (\ie, with preamble) into a main document.  This requires the
+included leadsheet to use the \cls{leadsheet} class (see
+section~\ref{sec:leadsheet-class}).  When the file is included the whole
+preamble of said file will be discarded.  This can be changed with an option
+but then \cs*{usepackage} and \cs*{RequirePackage} will still be disabled and
+simply do nothing in the included file.
+
+\begin{commands}
+  \command{includeleadsheet}[\sarg\oarg{options}\marg{file name}]
+    Include the leadsheet \meta{file name}.  \meta{options} apply locally for
+    the included file.  The file \meta{file name} may include a complete
+    document preamble.
+\end{commands}
+
+\begin{filecontents*}{single-leadsheet.tex}
+\documentclass{leadsheet}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+
+\begin{document}
+
+\begin{song}{title=foobar}
+\begin{verse}
+  \instruction{keyboard only} \\
+  Lorem ipsum dolor sit amet, consetetur sadipscing \\
+  \choir{sed diam nonumy eirmod tempor invidunt ut labore et dolore}
+\end{verse}
+\begin{prechorus}
+  \instruction{+ band} \\
+  Lorem ipsum dolor sit amet, consetetur sadipscing
+\end{prechorus}
+\end{song}
+
+\end{document}
+\end{filecontents*}
+The next example shows the basic usage by inputting the example file mentioned
+on page~\pageref{single-leadsheet}.  \emph{Notice that the formatting setup by
+  the \cls{leadsheets} is not used}.  Also the title template
+\titletemplate{leadsheet} is not defined in this process.
+\begin{example}[compile,graphics={trim={2cm 18cm 2cm 2cm},clip},
+  add-sourcecode-options={literate=}]
+  \documentclass{scrartcl}
+  \usepackage{leadsheets}
+  \useleadsheetslibraries{external}
+
+  \begin{document}
+
+  \includeleadsheet{single-leadsheet}
+  
+  \end{document}  
+\end{example}
+Also notice that the \env{prechorus} environment and the \cs{instruction} and
+\cs{choir} macros \emph{are} available!  \emph{All new macros defined in the
+  \cls{leadsheet} class and described in section~\ref{sec:leadsheet-class} are
+  defined}.  If you do not want this then you can use the starred version of
+\cs{includeleadsheet}.  In this process the preamble of the included file is
+gobbled.  It may be desirable not to have the preamble gobbled, though --
+because of custom macro definitions for example.
+\begin{options}
+  \keybool{gobble-preamble}\Default{true}
+    If set to \code{false} \cs{includeleadsheet} will not gobble the preamble
+    of the file it inputs.  Using this is dangerous: for it to work
+    \cs*{usepackage} and \cs*{RequirePackage} have to be disabled while the
+    file is included.  So including the preamble may lead to more problems
+    than it solves.
+\end{options}
+
+The included leadsheets do not have to be a complete document -- a standard
+tex file only consisting of the \env{song} environments will work just as
+nicely.  Files that are complete documents but are using another class than
+\cls{leadsheet} will lead to errors, though.
+
+\clearpage
+\part{Appendix}
+\dictum[Thelonious Monk]{Wrong is right.}
 \appendix
 
 \end{document}
+

Added: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheet.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheet.cls	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheet.cls	2016-08-19 21:44:56 UTC (rev 41890)
@@ -0,0 +1,187 @@
+% --------------------------------------------------------------------------
+% the LEADSHEETS package
+% 
+%   typesetting leadsheets and songbooks
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% E-Mail: contact at mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2014-2016 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+\ProvidesClass{leadsheet}[2016/07/21 v0.5 leadsheets class (part of the leadsheets package)]
+\LoadClassWithOptions{scrartcl}
+
+\RequirePackage{leadsheets}
+
+\RequirePackage{etoolbox}
+\RequirePackage{translations}
+
+\defleadsheetstranslation{Fallback}{page}{page}
+\defleadsheetstranslation{Fallback}{of}{of}
+\defleadsheetstranslation{Fallback}{music}{music}
+\defleadsheetstranslation{Fallback}{text}{text}
+\defleadsheetstranslation{Fallback}{as-played-by}{as played by}
+\defleadsheetstranslation{Fallback}{choir}{choir}
+
+\defleadsheetstranslation{German}{page}{Seite}
+\defleadsheetstranslation{German}{of}{von}
+\defleadsheetstranslation{German}{music}{Musik}
+\defleadsheetstranslation{German}{text}{Text}
+\defleadsheetstranslation{German}{as-played-by}{wie gespielt von}
+\defleadsheetstranslation{German}{choir}{Chor}
+
+\providecommand*\ls at songtitle{}
+\providecommand*\ls at songinterpret{}
+
+\definesongproperty{language}
+
+\newbool{ls at comma}
+\newrobustcmd*\ls at addcomma{%
+  \ifbool{ls at comma}{, }{}%
+  \boolfalse{ls at comma}%
+}
+
+\newrobustcmd*\ls at printproperty[2]{%
+  \ifsongproperty{#1}{%
+    \ls at addcomma
+    #2%
+    \booltrue{ls at comma}%
+  }{}%
+}
+
+\definesongtitletemplate{leadsheet}{%
+  \section*{%
+    \songproperty{title}%
+    \ifsongproperty{subtitle}{ (\songproperty{subtitle})}{}%
+  }
+  \xdef\ls at songtitle{\songproperty{title}}%
+  \ifsongproperty{composer}
+    {%
+      \ifsongproperty{lyrics}
+        {%
+          \leadsheetstranslate{lyrics}:
+          \printsongpropertylist{lyrics}{ \& }{, }{ \& },
+          \booltrue{ls at comma}%
+        }
+        {}%
+      \leadsheetstranslate{music}:
+      \printsongpropertylist{composer}{ \& }{, }{ \& }%
+      \booltrue{ls at comma}%
+    }
+    {%
+      \ifsongproperty{lyrics}
+        {%
+          \leadsheetstranslate{lyrics}:
+          \printsongpropertylist{lyrics}{ \& }{, }{ \& }%
+          \ifsongproperty{music}{, }{}%
+          \booltrue{ls at comma}%
+        }
+        {}%
+      \ifsongproperty{music}
+        {%
+          \ifsongproperty{lyrics}
+            {}
+            {\leadsheetstranslate{lyrics} \& }%
+          \leadsheetstranslate{music}:
+          \printsongpropertylist{music}{ \& }{, }{ \& }%
+          \booltrue{ls at comma}%
+        }
+        {}%
+    }%
+  \ifsongproperty{band}
+    {%
+      \ls at addcomma
+      \leadsheetstranslate{as-played-by}:
+      \songproperty{band}%
+      \xdef\ls at songinterpret{\songproperty{band}}%
+      \booltrue{ls at comma}%
+    }{%
+      \ifsongproperty{interpret}
+        {%
+          \ls at addcomma
+          \leadsheetstranslate{as-played-by}:
+          \songproperty{interpret}%
+          \xdef\ls at songinterpret{\songproperty{interpret}}%
+          \booltrue{ls at comma}%
+        }
+        {}%
+    }%
+  \ifsongproperty{key}
+    {%
+      \ls at addcomma
+      \leadsheetstranslate{key}:
+      \expandcode{\writechord{\songproperty{key}}}
+    }
+    {}%
+  \ifsongproperty{language}
+    {%
+      \ifboolexpr{
+        test {\leadsheetsifpackageloaded{babel}} or
+        test {\leadsheetsifpackageloaded{poyglossia}}
+      }{\expandcode{\noexpand\selectlanguage{\songproperty{language}}}}
+      {}%
+    }
+    {}%
+}
+
+\setleadsheets{
+  title-template = leadsheet ,
+  bar-shortcuts ,
+  verse/numbered ,
+  verses-format = ,
+  verses-label-format = \bfseries ,
+  info/format = \itshape ,
+  chorus/format = \itshape
+}
+
+\RequirePackage{scrlayer-scrpage,zref-totpages}
+\pagestyle{scrheadings}
+\rohead{}
+\cohead{%
+  \ifnum\ztotpages>1
+    \ifnum\value{page}=1
+    \else
+      \ls at songtitle
+      \ifdefvoid\ls at songinterpret{}{ (\ls at songinterpret)}%
+    \fi
+  \fi
+}
+\cofoot{%
+  \ifnum\ztotpages>1
+    \leadsheetstranslate{page}~\thepage~%
+    \leadsheetstranslate{of}~\ztotpages
+  \fi
+}
+
+\LeadsheetSurvive
+\provideversetype{prechorus}[name=Prechorus]
+\provideversetype*{prechorus*}[name=Prechorus]
+
+\providerobustcmd*\lsenparen[1]{%
+  \expandcode{\noexpand\mklsenparen\mklsenparens{\unexpanded{#1}}}%
+}
+\providecommand*\mklsenparens{[]}
+\providecommand*\mklsenparen[3]{\textup{#1}#3\textup{#2}}
+
+\providerobustcmd*\instruction[1]{\lsenparen{\mkinstruction{#1}}}
+\providecommand*\mkinstruction[1]{\emph{#1}}
+
+\providerobustcmd*\choir[1]{\null\qquad\mkchoir{#1}}
+\providecommand*\mkchoir[1]{\instruction{\leadsheetstranslate{choir}: #1}}
+\LeadsheetEndSurvive
+
+\endinput
+2016/08/17 - first version added to `leadsheets'


Property changes on: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheet.cls
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chordnames.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chordnames.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chordnames.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,20 +21,21 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsExplLibrary{chordnames}{2015/07/02 typesetting chord names with easy syntax}
+\LeadsheetsExplLibrary{chordnames}{2016/07/05 typesetting chord names with easy syntax}
 
 \leadsheets_load_library:n {musicsymbols}
 
-% \bool_new:N \l__leadsheets_output_notation_german_bool
-% \bool_new:N \l__leadsheets_input_notation_german_bool
-
 \tl_new:N \l__leadsheets_chord_tl
 \tl_new:N \l__leadsheets_tension_tl
 \tl_new:N \l__leadsheets_format_tl
 
 \cs_new_protected:Npn \leadsheets_tension_sym:Nn #1#2
-  { \tl_replace_all:Nnn #1 {#2} { \textsuperscript{#2} } }
+  { \tl_replace_all:Nnn #1 {#2} { \textsuperscript {#2} } }
 
+\cs_new_protected:Npn \leadsheets_tension_sym:Nnn #1#2#3
+  { \tl_replace_all:Nnn #1 {#2} { \textsuperscript {#3} } }
+\cs_generate_variant:Nn \leadsheets_tension_sym:Nnn {NnV}
+
 \cs_new_protected:Npn \leadsheets_chord_sym:Nnn #1#2#3
   { \tl_replace_all:Nnn #1 {#2} {#3} }
 \cs_generate_variant:Nn \leadsheets_chord_sym:Nnn {NnV}
@@ -93,12 +93,9 @@
 \cs_gset_protected:Npn \leadsheets_chord_aux:n !1
  {
     \tl_set:Nn \l__leadsheets_chord_tl {!1}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {maj7}
-      {\l__leadsheets_major_seven_tl}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {maj9}
-      {\l__leadsheets_major_nine_tl}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {sus}
-      {\l__leadsheets_sus_tl}
+    \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {maj7} \l__leadsheets_major_seven_tl
+    \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {maj9} \l__leadsheets_major_nine_tl
+    \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {sus} \l__leadsheets_sus_tl
     \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {^} {\textsuperscript}
     \bool_if:NT \l__leadsheets_output_notation_german_bool
       {
@@ -107,10 +104,8 @@
       }
     \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {#b} {}
     \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {b#} {}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {##}
-      {\l__leadsheets_doublesharp_tl}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {bb}
-      {\l__leadsheets_doubleflat_tl}
+    \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {##} \l__leadsheets_doublesharp_tl
+    \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {bb} \l__leadsheets_doubleflat_tl
     \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {#} \l__leadsheets_sharp_tl
     \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {b} \l__leadsheets_flat_tl
     \leadsheets_chord_sym:NnV  \l__leadsheets_chord_tl {dim} \l__leadsheets_dim_tl
@@ -125,12 +120,9 @@
     \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {7}
     \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {8}
     \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {9}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {/o}
-      {\textsuperscript{\l__leadsheets_half_dim_tl}}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {o}
-      {\textsuperscript{\l__leadsheets_full_dim_tl}}
-    \leadsheets_chord_sym:Nnn  \l__leadsheets_chord_tl {+}
-      {\textsuperscript{\l__leadsheets_aug_tl}}
+    \leadsheets_tension_sym:NnV  \l__leadsheets_chord_tl {/o} \l__leadsheets_half_dim_tl
+    \leadsheets_tension_sym:NnV  \l__leadsheets_chord_tl {o} \l__leadsheets_full_dim_tl
+    \leadsheets_tension_sym:NnV  \l__leadsheets_chord_tl {+} \l__leadsheets_aug_tl
     \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl  {(}
       { \leadsheets_tension:w( }
     \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl  {mi}
@@ -140,6 +132,12 @@
     \tl_replace_all:Nnn \l__leadsheets_chord_tl
       {\textsuperscript\textsuperscript}
       {\textsuperscript}
+    \bool_if:NT \l__leadsheets_lowercase_minor_bool
+      {
+        \tl_put_left:Nn \l__leadsheets_chord_tl { \__leadsheets_start_minor:w }
+        \tl_put_right:Nn \l__leadsheets_chord_tl { \q_stop }
+      }
+%    \show \l__leadsheets_chord_tl
     \tl_use:N \l__leadsheets_chord_tl
     \group_end:
   }
@@ -146,6 +144,19 @@
 
 \group_end:
 
+% lowercase letters for minor chords:
+\bool_new:N \l__leadsheets_lowercase_minor_bool
+
+\cs_new_protected:Npn \__leadsheets_start_minor:w #1 \q_stop
+  {
+    \tl_if_in:nnTF {#1} {\l__leadsheets_minor_tl}
+      { \__leadsheets_revert_minor:w #1 \q_stop }
+      {#1}
+  }
+
+\cs_new_protected:Npn \__leadsheets_revert_minor:w #1 \l__leadsheets_minor_tl #2 \q_stop
+  { \tl_lower_case:n {#1} #2 }
+
 \cs_new_protected:Npn \leadsheets_tension:w (#1)
   {
     \group_begin:
@@ -168,7 +179,16 @@
     full-dim     .tl_set:N = \l__leadsheets_full_dim_tl ,
     aug          .tl_set:N = \l__leadsheets_aug_tl ,
     major        .tl_set:N = \l__leadsheets_major_tl ,
-    minor        .tl_set:N = \l__leadsheets_minor_tl ,
+    minor        .code:n   =
+      \str_if_eq:nnTF {#1} {lowercase}
+        {
+          \bool_set_true:N \l__leadsheets_lowercase_minor_bool
+          \tl_clear:N \l__leadsheets_minor_tl
+        }
+        {
+          \bool_set_false:N \l__leadsheets_lowercase_minor_bool
+          \tl_set:Nn \l__leadsheets_minor_tl {#1}
+        } ,
     sus          .tl_set:N = \l__leadsheets_sus_tl ,
     add          .tl_set:N = \l__leadsheets_add_tl ,
     dim          .tl_set:N = \l__leadsheets_dim_tl ,
@@ -175,7 +195,7 @@
     major-seven  .tl_set:N = \l__leadsheets_major_seven_tl ,
     major-nine   .tl_set:N = \l__leadsheets_major_nine_tl ,
     german-B     .tl_set:N = \l__leadsheets_german_B_tl ,
-    german-H     .tl_set:N = \l__leadsheets_german_H_tl
+    german-H     .tl_set:N = \l__leadsheets_german_H_tl ,
     % since version 0.2 those are defined in the `chords` library:
     % output-notation .choice: ,
     % input-notation .choice: ,
@@ -195,4 +215,8 @@
            - input/output notation is now handled by the `chords' library
            - German output of B and H can be customized
 2015/05/22 - improvements to the chord macros
-2015/07/02 - this is not a use library any more
+2015/07/02 - this is not a user library any more
+2016/07/05 - with option `minor=lowercase' minor chords are now printed with
+             lowercase letters; requires user input `Dmi' in order to get `d';
+             lowercase letters can of course be input directly but then are
+             immune to transposing

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chords.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chords.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.chords.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,12 +21,13 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsExplLibrary{chords}{2015/07/02 printing chords}
+\LeadsheetsExplLibrary{chords}{2016/07/02 printing chords}
 
 \msg_new:nnn {leadsheets} {no-chords}
   { No~ more~ chords~ left~ for~ verse~ type~ `#1'~ \msg_line_context: }
 
 \leadsheets_load_library:n {chordnames}
+
 \bool_new:N \l__leadsheets_output_notation_german_bool
 \bool_new:N \l__leadsheets_input_notation_german_bool
   
@@ -114,29 +114,32 @@
         \tl_replace_all:Nnn \l__leadsheets_current_chord_tl {H} {B}
       }
       { \tl_replace_all:Nnn \l__leadsheets_current_chord_tl {H} {B} }
-    \bool_if:nT
+    \leadsheets_if_library:nT {songs}
       {
-        \leadsheets_if_property_p:Vn \l_leadsheets_current_song_id_tl {key}
-        &&
-        ( \l__leadsheets_transpose_bool || \l__leadsheets_transpose_capo_bool )
+        \bool_if:nT
+          {
+            \leadsheets_if_property_p:Vn \l_leadsheets_current_song_id_tl {key}
+            &&
+            ( \l__leadsheets_transpose_bool || \l__leadsheets_transpose_capo_bool )
+          }
+          {
+            \leadsheets_transpose:xVN
+              { \leadsheets_get_property:Vn \l_leadsheets_current_song_id_tl {key} }
+              \l__leadsheets_transpose_steps_int
+              \l__leadsheets_current_chord_tl
+          }
+        \bool_if:nTF
+          {
+            ! \leadsheets_if_property_p:Vn \l_leadsheets_current_song_id_tl {key}
+            &&
+            ( \l__leadsheets_transpose_bool || \l__leadsheets_transpose_capo_bool )
+          }
+          {
+            \msg_warning:nnV {leadsheets}
+              {transpose-key}
+              \l_leadsheets_current_song_id_tl
+          }
       }
-      {
-        \leadsheets_transpose:xVN
-          { \leadsheets_get_property:Vn \l_leadsheets_current_song_id_tl {key} }
-          \l__leadsheets_transpose_steps_int
-          \l__leadsheets_current_chord_tl
-      }
-    \bool_if:nTF
-      {
-        ! \leadsheets_if_property_p:Vn \l_leadsheets_current_song_id_tl {key}
-        &&
-        ( \l__leadsheets_transpose_bool || \l__leadsheets_transpose_capo_bool )
-      }
-      {
-        \msg_warning:nnV {leadsheets}
-          {transpose-key}
-          \l_leadsheets_current_song_id_tl
-      }
     % => convert to specified output
     \bool_if:NT \l__leadsheets_output_notation_german_bool
       {
@@ -158,7 +161,8 @@
     \bool_if:NTF \l__leadsheets_chord_print_bool
       {
         \group_begin:
-          \leadsheets_ignore_lines:
+          \leadsheets_if_library:nT {songs}
+            { \leadsheets_ignore_lines: }
           \bool_if:NT \g__leadsheets_smash_next_chord_bool
             {
               \bool_set_true:N \l__leadsheets_smash_chords_bool
@@ -235,13 +239,6 @@
       { \prg_return_false: }
   }
 
-\cs_new:Npn \leadsheets_remember_or_recall_chords:w
-  {
-    \leadsheets_if_recall_chords:TF
-      { \recallchord }
-      { \chord }
-  }
-
 \cs_new_protected:Npn \leadsheets_recall_chord:nn #1#2
   {
     \seq_pop_left:NNF \g__leadsheets_chords_sequences_seq
@@ -256,6 +253,13 @@
 \NewDocumentCommand \recallchord {st-}
   { \leadsheets_recall_chord:nn {#1} {#2} }
 
+\NewDocumentCommand \getorprintchord {}
+  {
+    \leadsheets_if_recall_chords:TF
+      { \recallchord }
+      { \chord }
+  }
+  
 \endinput
 
 HISTORY:
@@ -267,4 +271,4 @@
            - options `input-notation' and `output-notation' now directly
              belong to the `chords' library.
            - this is now a user library
-
+2016/07/02 - \getorprintchord

Added: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.external.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.external.code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.external.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -0,0 +1,181 @@
+% --------------------------------------------------------------------------
+% the LEADSHEETS package
+% 
+%   typesetting leadsheets and songbooks
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% E-Mail: contact at mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2014-2016 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+\LeadsheetsExplLibrary{external}
+  {2016/08/18 include external leadsheets into a main file}
+
+\msg_new:nnn {leadsheets} {class-not-registered}
+  {
+    You've~ tried~ to~ include~ the~ leadsheet~ `#1'~ which~ uses~ the~
+    document~ class~ `#2'.~ However,~ this~ class~ is~ not~ yet~ registered.~
+    You~ can~ register~ it~ using~ the~ option~ `register-class'.
+  }
+
+\msg_new:nnn {leadsheets} {file-not-found}
+  {
+    You've~ tried~ to~ include~ the~ leadsheet~ `#1'.~ However,~ I~ can't~
+    find~ the~ file~ `#1'.~ Please~ make~ sure~ the~ file~ exists~ in~ a~
+    path~ where~ TeX~ can~ find~ it.
+  }
+
+\cs_generate_variant:Nn \msg_error:nnnn {nnV}
+  
+\cs_new_protected:Npn \__leadsheets_disable_document_env:
+  {
+    \cs_set_protected:Npn \document
+      {
+        \cs_set_protected:Npn \enddocument
+          { \tex_endinput:D }
+      }
+  }
+
+% --------------------------------------------------------------------------
+% don't allow any class per default
+\seq_new:N \l__leadsheets_external_classes_seq
+
+\cs_new_protected:Npn \leadsheets_add_external_class:n #1
+  {
+    \seq_put_right:Nn \l__leadsheets_external_classes_seq {#1}
+    \seq_remove_duplicates:N \l__leadsheets_external_classes_seq
+  }
+\cs_generate_variant:Nn \leadsheets_add_external_class:n {V}
+
+\leadsheets_add_external_class:n {leadsheet}
+  
+\prg_new_conditional:Npnn \leadsheets_if_is_external_class:n #1 {p,T,F,TF}
+  {
+    \seq_if_in:NnTF \l__leadsheets_external_classes_seq {#1}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+
+\bool_new:N \l__leadsheets_gobble_preamble_bool
+
+\keys_define:nn {leadsheets}
+  {
+    gobble-preamble .bool_set:N = \l__leadsheets_gobble_preamble_bool ,
+    gobble-preamble .initial:n  = true ,
+    register-class  .code:n     =
+      \clist_map_inline:nn {#1}
+        {
+          \tl_set:Nx \l__leadsheets_tmpa_tl { \tl_trim_spaces:n {##1} }
+          \leadsheets_add_external_class:V \l__leadsheets_tmpa_tl
+        }
+  }
+
+\cs_new_protected:Npn \leadsheets_documentclass:wnw
+  {
+    \peek_meaning:NTF [ % ]
+      { \__leadsheets_documentclass:wnw }
+      { \__leadsheets_documentclass:nw }
+  }
+
+\cs_new_protected:Npn \__leadsheets_documentclass:wnw [#1]
+  { \__leadsheets_documentclass:nw }
+
+\cs_new_protected:Npn \__leadsheets_documentclass:nw #1
+  {
+    \peek_meaning:NTF [ % ]
+      { \__leadsheets_documentclass_aux:nw {#1} }
+      { \__leadsheets_documentclass:n {#1} }
+  }
+
+\cs_new_protected:Npn \__leadsheets_documentclass_aux:nw #1[#2]
+  { \__leadsheets_documentclass:n {#1} }
+
+\cs_new_protected:Npn \__leadsheets_documentclass:n #1
+  {
+    \leadsheets_if_is_external_class:nF {#1}
+      {
+        \msg_error:nnVn {leadsheets} {class-not-registered}
+          \l__leadsheets_current_leadsheet_tl
+          {#1}
+      }
+    \RenewDocumentCommand \usepackage {omo} {}
+    \RenewDocumentCommand \RequirePackage {omo} {}
+    \__leadsheets_disable_document_env:
+    \bool_if:NT \l__leadsheets_gobble_preamble_bool
+      { \__leadsheets_gobble_preamble:wn }
+  }
+
+% include a file into a leadsheet only reading code between \LeadsheetSurvive
+% and \LeadsheetEndSurvive
+\cs_new_protected:Npn \leadsheets_include_external_file:nn #1#2
+  {
+    \tl_set_from_file:Nnn \l__leadsheets_tmpa_tl
+      {}
+      { #1 \tl_if_blank:nF {#2} {.} #2 }
+    \cs_set:Npn \LeadsheetSurvive ##1 \LeadsheetEndSurvive ##2 \q_stop
+      { ##1 \__leadsheets_extract_survival:ww ##2 \q_stop }
+    \__leadsheets_include_external_file_aux:V \l__leadsheets_tmpa_tl
+  }
+
+\cs_new_protected:Npn \__leadsheets_include_external_file_aux:n #1
+  { \__leadsheets_extract_survival:ww #1 \LeadsheetSurvive\LeadsheetSurvive \q_stop }
+\cs_generate_variant:Nn \__leadsheets_include_external_file_aux:n {V}
+
+\cs_new_protected:Npn \__leadsheets_extract_survival:ww
+  #1 \LeadsheetSurvive #2 \LeadsheetSurvive #3 \q_stop
+  {
+    \tl_if_blank:nF {#3}
+      { \LeadsheetSurvive #2 \LeadsheetSurvive #3 \q_stop }
+  }
+
+\NewDocumentCommand \AddExternalFile {mm}
+  { \leadsheets_include_external_file:nn {#1} {#2} }
+\NewDocumentCommand \AddExternalClass {m}
+  { \leadsheets_include_external_file:nn {#1} {cls} }
+\NewDocumentCommand \AddExternalPackage {m}
+  { \leadsheets_include_external_file:nn {#1} {sty} }
+
+\cs_new_protected:Npn \__leadsheets_gobble_preamble:wn #1 \begin #2
+  {
+    \str_if_eq:nnTF {#2} {document}
+      { \begin {#2} }
+      { \__leadsheets_gobble_preamble:wn }
+  }
+
+\cs_new_protected:Npn \leadsheets_include_leadsheet:nn #1#2
+  {
+    \file_if_exist:nTF {#2}
+      {
+        \group_begin:
+          \keys_set:nn {leadsheets} {#1}
+          \tl_set:Nn \l__leadsheets_current_leadsheet_tl {#2}
+          \cs_set_eq:NN \documentclass \leadsheets_documentclass:wnw
+          \file_input:n {#2}
+        \group_end:
+      }
+      { \msg_error:nnn {leadsheets} {file-not-found} {#2} }
+  }
+
+\NewDocumentCommand \includeleadsheet {sO{}m}
+  {
+    \IfBooleanF {#1}
+      { \leadsheets_include_external_file:nn {leadsheet} {cls} }
+    \leadsheets_include_leadsheet:nn {#2} {#3}
+  }
+  
+\endinput
+
+2016/08/18 - first version


Property changes on: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.external.code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musejazz.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musejazz.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musejazz.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musicsymbols.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musicsymbols.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.musicsymbols.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,7 +21,7 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsLibrary{musicsymbols}{2015/07/13 musical symbols}
+\LeadsheetsLibrary{musicsymbols}{2016/02/15 musical symbols}
 \RequirePackage{etoolbox}
 
 % define a LaTeX font that uses the `musix' font from MusiXTeX:
@@ -54,7 +53,7 @@
 }
 
 % define the symbols
-\renewrobustcmd*\sharp       {\musicsymbol[.2ex]{4}\kern-.06em}
+\renewrobustcmd*\sharp       {\kern.05em\musicsymbol[.2ex]{4}\kern-.05em}
 \renewrobustcmd*\flat        {\kern-.05em\musicsymbol{2}\kern-.06em}
 \renewrobustcmd*\natural     {\musicsymbol{6}\kern-.06em}
 \newrobustcmd*\doublesharp   {\kern.05em\musicsymbol{5}\kern-.05em}
@@ -70,6 +69,17 @@
 \newrobustcmd*\eighthrest    {\musicsymbol[-1.5ex]{?}\kern.5em}
 \newrobustcmd*\sixteenthrest {\kern.05em\musicsymbol[-1.5ex]{@}\kern.5em}
 
+\RequirePackage{amsmath}
+\newrobustcmd*\meter[2]{%
+  \ensuremath{%
+    \genfrac{}{}{0pt}{}%
+      {\text{\textbf{#1}}}%
+      {\text{\textbf{#2}}}%
+  }%
+}
+
+\newrobustcmd*\Break{\ensuremath{\perp}}
+
 \newcommand*\leadsheets at size{\f at size pt}
 \newlength\leadsheets at barheight
 
@@ -89,25 +99,26 @@
 \newrobustcmd*\leadsheets at repeatcolon{%
   \leavevmode
   \setlength\leadsheets at barheight\leadsheets at size
-  \raise.1\leadsheets at barheight\hbox{:}%
+  \raise.1\leadsheets at barheight\hbox{\textup{:}}%
 }
 
 \newrobustcmd*\leadsheets at interbar{\kern\interbarwidth\relax}
 
-\newrobustcmd*\normalbar{%
+\newrobustcmd*\leadsheets at normalbar{%
   \genericbar{\normalbarwidth}%
 }
+\newrobustcmd*\normalbar{\leadsheets at normalbar}
 
 \newrobustcmd*\leftrepeat{%
   \leadsheets at thickbar
   \leadsheets at interbar
-  \normalbar
+  \leadsheets at normalbar
   \leadsheets at repeatcolon
 }
 
 \newrobustcmd*\rightrepeat{%
   \leadsheets at repeatcolon
-  \normalbar
+  \leadsheets at normalbar
   \leadsheets at interbar
   \leadsheets at thickbar
 }
@@ -121,13 +132,13 @@
 }
 
 \newrobustcmd*\doublebar{%
-  \normalbar
+  \leadsheets at normalbar
   \leadsheets at interbar
-  \normalbar
+  \leadsheets at normalbar
 }
 
 \newrobustcmd*\stopbar{%
-  \normalbar
+  \leadsheets at normalbar
   \leadsheets at interbar
   \leadsheets at thickbar
 }
@@ -136,3 +147,4 @@
 
 2014/08/10 - initial release
 2015/07/13 - scale musix font by 1.5 => else the symbols are rather small!
+2016/01/15 - \Break; improvements of bars

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.properties.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.properties.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.properties.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,7 +21,7 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsExplLibrary{properties}{2014/08/10 song properties}
+\LeadsheetsExplLibrary{properties}{2016/05/18 song properties}
 
 \cs_generate_variant:Nn \tl_if_eq:nnTF {x}
 
@@ -60,6 +59,35 @@
 \cs_generate_variant:Nn \leadsheets_if_property:nnT  { V }
 \cs_generate_variant:Nn \leadsheets_if_property_p:nn { V }
 
+\prg_new_protected_conditional:Npnn \leadsheets_if_any_property:nn #1#2 {T,F,TF}
+  {
+    \bool_set_false:N \l__leadsheets_tmpa_bool
+    \clist_map_inline:nn {#1}
+      {
+        \prop_if_in:cnT {l__leadsheets_songs_#2_prop} {#1}
+          { \bool_set_true:N \l__leadsheets_tmpa_bool }
+      }
+    \bool_if:NTF \l__leadsheets_tmpa_bool
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+\cs_generate_variant:Nn \leadsheets_if_any_property:nnTF {V}
+
+\prg_new_protected_conditional:Npnn \leadsheets_if_all_properties:nn #1#2 {T,F,TF}
+  {
+    \bool_set_false:N \l__leadsheets_tmpa_bool
+    \clist_map_inline:nn {#1}
+      {
+        \prop_if_in:cnTF {l__leadsheets_songs_#2_prop} {#1}
+          { \bool_set_true:N \l__leadsheets_tmpa_bool }
+          { \bool_set_false:N \l__leadsheets_tmpa_bool }
+      }
+    \bool_if:NTF \l__leadsheets_tmpa_bool
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+\cs_generate_variant:Nn \leadsheets_if_all_properties:nnTF {V}
+
 \prg_new_protected_conditional:Npnn \leadsheets_if_properties_eq:nnn #1#2#3 {T,F,TF}
   {
     \tl_if_eq:xxTF
@@ -171,6 +199,12 @@
 \DeclareExpandableDocumentCommand \ifsongproperty {m}
   { \leadsheets_if_property:VnTF \l_leadsheets_current_song_id_tl {#1} }
 
+\NewDocumentCommand \ifanysongproperty {m}
+  { \leadsheets_if_any_property:VnTF \l_leadsheets_current_song_id_tl {#1} }
+
+\NewDocumentCommand \ifallsongproperties {m}
+  { \leadsheets_if_all_properties:VnTF \l_leadsheets_current_song_id_tl {#1} }
+  
 \DeclareExpandableDocumentCommand \ifsongmeasuring {}
   { \leadsheets_if_measuring:TF }
 
@@ -177,9 +211,13 @@
 \NewDocumentCommand \ifsongpropertiesequal {mm}
   { \leadsheets_if_properties_eq:VnnTF \l_leadsheets_current_song_id_tl {#1} {#2} }
 
+% #1: property 1
+% #2: property 2
 \NewDocumentCommand \ifsongpropertyequal {mm}
   { \leadsheets_if_property_eq:VnnTF \l_leadsheets_current_song_id_tl {#1} {#2} }
 
+% #1: property
+% #2: tokenlist
 \NewDocumentCommand \definesongproperty {m}
   { \leadsheets_define_property:n {#1} }
 \@onlypreamble\definesongproperty
@@ -190,3 +228,4 @@
 
 \endinput
 2015/07/05: enable usage of # in the key property
+2016/05/18: new commands \ifanysongproperty and \ifallsongproperties

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.shorthands.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.shorthands.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.shorthands.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -23,45 +22,46 @@
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
 \LeadsheetsExplLibrary{shorthands}
-  {2014/08/10 definition and activation of shorthands}
+  {2016/06/29 definition and activation of shorthands}
 
-\seq_new:N   \l__leadsheets_shorthands_seq
+\seq_new:N \l__leadsheets_shorthands_seq
 
-\group_begin:
-\char_set_catcode_active:N \~
-
-\cs_new_protected:Npn \leadsheets_define_shorthand:Npn #1
+\cs_new_protected:Npn \leadsheets_define_shorthand:NN #1#2
   {
     \seq_if_in:NnF \l__leadsheets_shorthands_seq {#1}
       { \seq_put_right:Nn \l__leadsheets_shorthands_seq {#1} }
-    \group_begin:
-    \__leadsheets_define_shorthand_aux_i:np {#1}
+    \char_set_active_eq:NN #1#2
   }
 
-\cs_new_protected:Npn \__leadsheets_define_shorthand_aux_i:np #1#2#
+\cs_new_protected:Npn \leadsheets_remove_shorthand:N #1
   {
-    \char_set_lccode:nn {`~} {`#1}
-    \__leadsheets_define_shorthand_aux_ii:nn {#2}
+    \leadsheets_define_shorthand:NN #1 \c_empty_tl
+    \seq_remove_all:Nn \l__leadsheets_shorthands_seq {#1}
+    \prop_remove:Nn \l__leadsheets_shorthands_prop {#1}
   }
 
-\cs_new_protected:Npn \__leadsheets_define_shorthand_aux_ii:nn #1#2
-  { \tl_to_lowercase:n { \group_end: \cs_set:Npn ~ } #1 {#2} }
+\prg_new_conditional:Npnn \leadsheets_if_shorthand:N #1 {p,T,F,TF}
+  {
+    \seq_if_in:NnTF \l__leadsheets_shorthands_seq {#1}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
 
-\group_end:
+\cs_new_protected:Npn \leadsheets_for_all_shorthands_do:n #1
+  { \seq_map_inline:Nn \l__leadsheets_shorthands_seq {#1} }
 
+\cs_new_protected:Npn \leadsheets_activate_shorthand:N #1
+  { \leadsheets_if_shorthand:NT #1 { \char_set_catcode_active:N #1 } }
+
 \cs_new_protected:Npn \leadsheets_activate_shorthands:n #1
-  {
-    \tl_map_inline:nn {#1}
-      {
-        \seq_if_in:NnT \l__leadsheets_shorthands_seq {##1}
-          { \char_set_catcode_active:N ##1 }
-      }
-  }
+  { \tl_map_inline:nn {#1} { \leadsheets_activate_shorthand:N ##1 } }
 
 \cs_new_protected:Npn \leadsheets_activate_all_shorthands:
   {
-    \seq_map_inline:Nn \l__leadsheets_shorthands_seq
-     { \char_set_catcode_active:N ##1 }
+    \leadsheets_for_all_shorthands_do:n
+      { \leadsheets_activate_shorthand:N ##1 }
   }
 
 \endinput
+2016/06/29 - breaking change: \leadsheets_define_shorthand:Npn is now
+             \leadsheets_define_shorthand:NN

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.songs.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.songs.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.songs.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,7 +21,7 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsExplLibrary{songs}{2016/02/02 typesetting songs}
+\LeadsheetsExplLibrary{songs}{2016/07/02 typesetting songs}
 
 % --------------------------------------------------------------------------
 % messages:
@@ -45,6 +44,12 @@
     transposing~ mechanism~ \msg_line_context:
   }
 
+\msg_new:nnn {leadsheets} {verse-exists}
+  {
+    The~ verse~ type~ `#1'~ you~ are~ about~ to~ define~ \msg_line_context:
+    \c_space_tl already~ exists.
+  }
+
 % --------------------------------------------------------------------------
 % variables:
 \tl_const:Nn \c_leadsheets_sharp_tl {sharp}
@@ -74,6 +79,7 @@
 \bool_new:N  \l__leadsheets_obey_lines_bool
 \bool_new:N  \l__leadsheets_bar_shorthands_bool
 \bool_new:N  \l__leadsheets_measuring_bool
+\bool_new:N  \l__leadsheets_disable_measuring_bool
 \bool_new:N  \l__leadsheets_recall_verse_type_bool
 
 \clist_new:N \l__leadsheets_print_tags_clist
@@ -105,9 +111,7 @@
 
 % --------------------------------------------------------------------------
 % define shorthands
-\leadsheets_define_shorthand:Npn ^ {\leadsheets_remember_or_recall_chords:w}
-\leadsheets_define_shorthand:Npn _ {\writechord}
-\leadsheets_define_shorthand:Npn | #1
+\cs_new_protected:Npn \leadsheets_bar:w #1
   {
     \str_case:nnF {#1}
       {
@@ -123,7 +127,7 @@
       {\doublebar}
   }
 
-\leadsheets_define_shorthand:Npn :
+\cs_new_protected:Npn \leadsheets_bar_repeat:
   {
     \peek_charcode_remove:NTF |
       {\__leadsheets_checkrepeat:}
@@ -136,6 +140,11 @@
       {\rightrepeat}
   }
 
+\leadsheets_define_shorthand:NN ^ \getorprintchord
+\leadsheets_define_shorthand:NN _ \writechord
+\leadsheets_define_shorthand:NN | \leadsheets_bar:w
+\leadsheets_define_shorthand:NN : \leadsheets_bar_repeat:
+  
 % --------------------------------------------------------------------------
 % the `song' environment:
 \NewDocumentEnvironment {song} { O{} }
@@ -213,30 +222,30 @@
 
 % --------------------------------------------------------------------------
 % define song properties:
-\definesongproperty {title}
-\definesongproperty {subtitle}
-\definesongproperty {short-title}
-\definesongproperty {sort-title}
-\definesongproperty {sort-short-title}
-\definesongproperty {composer}
-\definesongproperty {sort-composer}
-\definesongproperty {music}
-\definesongproperty {sort-music}
-\definesongproperty {lyrics}
-\definesongproperty {sort-lyrics}
-\definesongproperty {arr}
-\definesongproperty {sort-arr}
-\definesongproperty {band}
-\definesongproperty {sort-band}
-\definesongproperty {genre}
-\definesongproperty {interpret}
-\definesongproperty {sort-interpret}
-\definesongproperty {key}
-\definesongproperty {capo}
-\definesongproperty {tempo}
-\definesongproperty {tags}
-\definesongproperty {counter}
-\definesongproperty {ID}
+\leadsheets_define_property:n {title}
+\leadsheets_define_property:n {subtitle}
+\leadsheets_define_property:n {short-title}
+\leadsheets_define_property:n {sort-title}
+\leadsheets_define_property:n {sort-short-title}
+\leadsheets_define_property:n {composer}
+\leadsheets_define_property:n {sort-composer}
+\leadsheets_define_property:n {music}
+\leadsheets_define_property:n {sort-music}
+\leadsheets_define_property:n {lyrics}
+\leadsheets_define_property:n {sort-lyrics}
+\leadsheets_define_property:n {arr}
+\leadsheets_define_property:n {sort-arr}
+\leadsheets_define_property:n {band}
+\leadsheets_define_property:n {sort-band}
+\leadsheets_define_property:n {genre}
+\leadsheets_define_property:n {interpret}
+\leadsheets_define_property:n {sort-interpret}
+\leadsheets_define_property:n {key}
+\leadsheets_define_property:n {capo}
+\leadsheets_define_property:n {tempo}
+\leadsheets_define_property:n {tags}
+\leadsheets_define_property:n {counter}
+\leadsheets_define_property:n {ID}
 
 % properties that should take the value of another property if they're not set
 % explicitly:
@@ -282,8 +291,8 @@
         \tl_set:Nn \l_leadsheets_current_song_id_tl {#1}
         \tl_put_right:Nn \l__leadsheets_song_body_tl
           {
-            \leadsheets_songtitle:
-            \leadsheets_check_capo:
+            \__leadsheets_check_capo:
+            \__leadsheets_songtitle:
             \tl_use:N \l__leadsheets_songtext_format_tl
           }
         \tl_put_right:NV \l__leadsheets_song_body_tl
@@ -315,10 +324,9 @@
       }
   }
 
-\cs_new:Npn \leadsheets_end_song:n #1
+\cs_new_protected:Npn \leadsheets_end_song:n #1
   {
-    \bool_set_true:N \l__leadsheets_measuring_bool
-    \leadsheets_reset_counters:
+    \__leadsheets_start_measuring:nw {#1}
     \tl_put_left:NV \l__leadsheets_song_body_tl
       \l__leadsheets_song_pre_hook_tl
     \tl_put_right:NV \l__leadsheets_song_body_tl
@@ -334,15 +342,43 @@
           }
         pt
       }
-    \bool_set_false:N \l__leadsheets_measuring_bool
-    \leadsheets_reset_counters:
+    \__leadsheets_stop_measuring:
     \tl_use:N \l__leadsheets_song_body_tl
   }
 
+\cs_new_protected:Npn \__leadsheets_save_macro:N #1
+  { \cs_set_eq:cN { __leadsheets_ \cs_to_str:N #1 } #1 }
+
+\cs_new_protected:Npn \__leadsheets_restore_macro:N #1
+  {
+    \cs_set_eq:Nc #1 { __leadsheets_ \cs_to_str:N #1 }
+    \cs_undefine:c { __leadsheets_ \cs_to_str:N #1 }
+  }
+  
+\cs_new_protected:Npn \__leadsheets_start_measuring:nw #1#2 \__leadsheets_stop_measuring:
+  {
+    \bool_if:NF \l__leadsheets_disable_measuring_bool
+      { \bool_set_true:N \l__leadsheets_measuring_bool }
+    \bool_if:NTF \l__leadsheets_measuring_bool
+      {
+        \__leadsheets_save_macro:N \if at filesw
+        \__leadsheets_reset_counters: \@fileswfalse #2
+        \__leadsheets_restore_macro:N \if at filesw
+      }
+      { \leadsheets_set_property:nnn {#1} {height} {0pt} }
+    \__leadsheets_stop_measuring:
+  }
+
+\cs_new_protected:Npn \__leadsheets_stop_measuring:
+  {
+    \bool_set_false:N \l__leadsheets_measuring_bool
+    \__leadsheets_reset_counters:
+  }
+
 \cs_new_protected:Npn \leadsheets_add_to_reset:n #1
   { \seq_put_right:Nn \l__leadsheets_reset_counters_seq {#1} }
 
-\cs_new_protected:Npn \leadsheets_reset_counters:
+\cs_new_protected:Npn \__leadsheets_reset_counters:
   {
     \seq_map_inline:Nn \l__leadsheets_reset_counters_seq
       { \setcounter {##1} {0} }
@@ -394,13 +430,6 @@
       { \prg_return_true: }
   }
 
-\keys_define:nn { leadsheets }
-  {
-    print-tags .code:n =
-      \bool_set_true:N \l__leadsheets_print_selected_bool
-      \clist_set:Nn \l__leadsheets_print_tags_clist {#1}
-  }
-
 % --------------------------------------------------------------------------
 % predefined title templates
 \definesongtitletemplate {minimal}
@@ -458,7 +487,7 @@
 
 % --------------------------------------------------------------------------
 % capo settings:
-\cs_new_protected:Npn \leadsheets_check_capo:
+\cs_new_protected:Npn \__leadsheets_check_capo:
   {
     \leadsheets_if_property:VnTF \l_leadsheets_current_song_id_tl {capo}
       {
@@ -475,7 +504,7 @@
       }
   }
 
-\cs_new:Npn \leadsheets_capo_number_print:n #1 {#1.}
+\cs_new_protected:Npn \leadsheets_capo_number_print:n #1 {#1.}
 
 \cs_new_protected:Npn \leadsheets_capo:
   {
@@ -539,21 +568,37 @@
     \ignorespacesafterend
   }
 
-\cs_new_protected:Npn \leadsheets_new_verse_type:Nnn #1#2#3
+\seq_new:N \l__leadsheets_verse_types_seq
+
+\prg_new_conditional:Npnn \leadsheets_if_verse_type_exist:n #1 {p,T,F,TF}
   {
-    \bool_new:c {l__leadsheets_#2_empty_bool}
-    \bool_new:c {l__leadsheets_#2_numbered_bool}
-    \bool_new:c {l__leadsheets_#2_named_bool}
+    \seq_if_in:NnTF \l__leadsheets_verse_types_seq {#1}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+
+% #1: boolean
+% #2: name
+% #3: options
+\cs_new_protected:Npn \__leadsheets_new_verse_type:nnn #1#2#3
+  {
+    \seq_put_right:Nn \l__leadsheets_verse_types_seq {#2}
+    \clist_map_inline:nn {empty,numbered,named}
+      {
+        \bool_if_exist:cF {l__leadsheets_#2_##1_bool}
+          { \bool_new:c {l__leadsheets_#2_##1_bool} }
+      }
     \bool_set_true:c {l__leadsheets_#2_named_bool}
-    \bool_if:NTF #1
+    \bool_if:nTF {#1}
       { \bool_set_true:c {l__leadsheets_#2_empty_bool} }
       { \bool_set_false:c {l__leadsheets_#2_empty_bool} }
-    \tl_new:c {l__leadsheets_#2_class_tl}
-    \tl_new:c {l__leadsheets_#2_format_tl}
-    \tl_new:c {l__leadsheets_#2_template_tl}
-    \tl_new:c {l__leadsheets_#2_label_format_tl}
-    \tl_new:c {l__leadsheets_#2_after_label_tl}
-    \newcounter {#2}
+    \clist_map_inline:nn {class,format,template,label_format,after_label}
+      {
+        \tl_if_exist:cF {l__leadsheets_#2_##1_tl}
+          { \tl_new:c {l__leadsheets_#2_##1_tl} }
+      }
+    \cs_if_exist:cF {the#2}
+      { \newcounter {#2} }
     \leadsheets_add_to_reset:n {#2}
     \tl_set:cn {the#2} { \arabic {#2} . }
     \keys_define:nn {leadsheets/#2}
@@ -578,8 +623,8 @@
           \tl_set:Nn \l__leadsheets_recall_verse_type_tl {##1}
           \bool_set_true:N \l__leadsheets_recall_verse_type_bool ,
         name          .code:n     =
-         \@trnslt at declare@translation {leadsheets/#2} {fallback} {##1}
-         \@trnslt at declare@translation {leadsheets/#2} {English} {##1}
+         \leadsheets_declare_translation:nnn {fallback} {#2} {##1}
+         \leadsheets_declare_translation:nnn {English}  {#2} {##1}
       }
     \NewDocumentEnvironment {#2} {O{}}
       {
@@ -603,9 +648,6 @@
           { \seq_gclear:N \g__leadsheets_chords_sequences_seq }
         \leadsheets_if_recall_chords:T
           {
-            % \prop_show:N \g__leadsheets_chords_sequences_prop
-            % \tl_show:N \l__leadsheets_recall_verse_type_tl
-            % \seq_show:N \g__leadsheets_chords_sequences_seq
             \prop_get:NVN
               \g__leadsheets_chords_sequences_prop
               \l__leadsheets_recall_verse_type_tl
@@ -627,21 +669,43 @@
         \leadsheets_verse_end:n {#2}
         \par
       }
-    \@trnslt at declare@translation {leadsheets/#2} {fallback} {}
-    \@trnslt at declare@translation {leadsheets/#2} {English} {}
+    \leadsheets_declare_translation:nnn {fallback} {#2} {}
+    \leadsheets_declare_translation:nnn {English}  {#2} {}
     \keys_set:nn {leadsheets/#2} {#3}
   }
 
+% #1: boolean
+% #2: name
+% #3: options
+\cs_new_protected:Npn \leadsheets_new_verse_type:nnn #1#2#3
+  {
+    \leadsheets_if_verse_type_exist:nTF {#2}
+      { \msg_error:nnn {leadsheets} {verse-exists} {#2} }
+      { \__leadsheets_new_verse_type:nnn {#1} {#2} {#3} }
+  }
+
+% #1: boolean
+% #2: name
+% #3: options
+\cs_new_protected:Npn \leadsheets_provide_verse_type:nnn #1#2#3
+  {
+    \leadsheets_if_verse_type_exist:nF {#2}
+      { \__leadsheets_new_verse_type:nnn {#1} {#2} {#3} }
+  }
+  
 \NewDocumentCommand \newversetype {smO{}}
-  { \leadsheets_new_verse_type:Nnn #1 {#2} {#3} }
+  { \leadsheets_new_verse_type:nnn {#1} {#2} {#3} }
 
+\NewDocumentCommand \provideversetype {smO{}}
+  { \leadsheets_provide_verse_type:nnn {#1} {#2} {#3} }
+
 \cs_undefine:N \verse
 \cs_undefine:N \endverse
 
 \newversetype {verse}     [ name=Verse, named=false, after-label= ]
-\newversetype*{verse*}
+\newversetype*{verse*}    [ name=Verse ]
 \newversetype {chorus}    [ name=Chorus ]
-\newversetype*{chorus*}
+\newversetype*{chorus*}   [ name=Chorus ]
 \newversetype {intro}     [ name=Intro ]
 \newversetype*{intro*}    [ name=Intro ]
 \newversetype {outro}     [ name=Outro ]
@@ -648,7 +712,7 @@
 \newversetype {interlude} [ name=Interlude ]
 \newversetype {bridge}    [ name=Bridge ]
 \newversetype*{info}
-\newversetype*{solo*}
+\newversetype*{solo*}     [ name=Solo ]
 \newversetype {solo}      [ name=Solo ]
 
 % --------------------------------------------------------------------------
@@ -669,41 +733,47 @@
 
 % --------------------------------------------------------------------------
 
-\keys_define:nn { leadsheets }
+\keys_define:nn {leadsheets}
   {
-    title-template  .tl_set:N   = \l__leadsheets_songtitle_template_tl ,
-    title-template  .initial:n  = minimal ,
-    text-format     .tl_set:N   = \l__leadsheets_songtext_format_tl ,
-    song-format     .tl_set:N   = \l__leadsheets_song_format_tl ,
-    verse/type      .choice: ,
-    verse/type/verse   .code:n  =
+    title-template       .tl_set:N   = \l__leadsheets_songtitle_template_tl ,
+    title-template       .initial:n  = minimal ,
+    text-format          .tl_set:N   = \l__leadsheets_songtext_format_tl ,
+    song-format          .tl_set:N   = \l__leadsheets_song_format_tl ,
+    verse/type           .choice: ,
+    verse/type/verse     .code:n     =
       \tl_set:Nn \l_leadsheets_verse_type_tl {verse} ,
-    verse/type/unknown .code:n  =
+    verse/type/unknown   .code:n     =
       \msg_warning:nnn {leadsheets} {unknown-verse-type} {#1}
       \tl_set:Nn \l_leadsheets_verse_type_tl {verse} ,
-    verse/format    .tl_set:N   = \l__leadsheets_verse_format_tl ,
-    verse/format    .initial:n  = \l__leadsheets_verses_format_tl ,
-    verse/label-format  .tl_set:N   = \l__leadsheets_verse_label_format_tl ,
-    verse/label-format  .initial:n  = \l__leadsheets_verses_label_format_tl ,
-    verses-format   .tl_set:N   = \l__leadsheets_verses_format_tl ,
-    verses-label-format .tl_set:N   = \l__leadsheets_verses_label_format_tl ,
-    verses-after-label  .tl_set:N   = \l__leadsheets_verses_after_label_tl ,
-    verses-default-class .tl_set:N  = \l__leadsheets_verses_default_class_tl ,
-    obey-lines      .bool_set:N = \l__leadsheets_obey_lines_bool ,
-    obey-lines-parskip .skip_set:N = \l__leadsheets_obey_parskip_skip ,
-    bar-shortcuts   .bool_set:N = \l__leadsheets_bar_shorthands_bool ,
-    capo-nr-format  .choices:nn =
+    verse/format         .tl_set:N   = \l__leadsheets_verse_format_tl ,
+    verse/format         .initial:n  = \l__leadsheets_verses_format_tl ,
+    verse/label-format   .tl_set:N   = \l__leadsheets_verse_label_format_tl ,
+    verse/label-format   .initial:n  = \l__leadsheets_verses_label_format_tl ,
+    verses-format        .tl_set:N   = \l__leadsheets_verses_format_tl ,
+    verses-label-format  .tl_set:N   = \l__leadsheets_verses_label_format_tl ,
+    verses-after-label   .tl_set:N   = \l__leadsheets_verses_after_label_tl ,
+    verses-default-class .tl_set:N   = \l__leadsheets_verses_default_class_tl ,
+    obey-lines           .bool_set:N = \l__leadsheets_obey_lines_bool ,
+    obey-lines-parskip   .skip_set:N = \l__leadsheets_obey_parskip_skip ,
+    bar-shortcuts        .bool_set:N = \l__leadsheets_bar_shorthands_bool ,
+    bar-shortcuts        .initial:n  = true ,
+    capo-nr-format       .choices:nn =
       { arabic , roman , Roman }
       { \tl_set:NV \l__leadsheets_capo_number_format_tl \l_keys_choice_tl } ,
-    capo-nr-format  .initial:n  = {Roman} ,
-    capo-nr         .code:n     =
+    capo-nr-format       .initial:n  = {Roman} ,
+    capo-nr              .code:n     =
       \cs_set_protected:Npn \leadsheets_capo_number_print:n ##1 {#1} ,
-    capo-nr         .initial:n  = #1. ,
-    before-song     .tl_set:N   = \l__leadsheets_song_pre_hook_tl ,
-    after-song      .tl_set:N   = \l__leadsheets_song_post_hook_tl ,
-    after-title     .tl_set:N   = \l__leadsheets_song_mid_hook_tl ,
-    add-to-reset    .code:n     =
-      \clist_map_inline:nn {#1} { \leadsheets_add_to_reset:n {##1} }
+    capo-nr              .initial:n  = #1. ,
+    before-song          .tl_set:N   = \l__leadsheets_song_pre_hook_tl ,
+    after-song           .tl_set:N   = \l__leadsheets_song_post_hook_tl ,
+    after-title          .tl_set:N   = \l__leadsheets_song_mid_hook_tl ,
+    add-to-reset         .code:n     =
+      \clist_map_inline:nn {#1} { \leadsheets_add_to_reset:n {##1} } ,
+    print-tags           .code:n     =
+      \bool_set_true:N \l__leadsheets_print_selected_bool
+      \clist_set:Nn \l__leadsheets_print_tags_clist {#1} ,
+    disable-measuring    .bool_set:N = \l__leadsheets_disable_measuring_bool ,
+    disable-measuring    .initial:n  = false
   }
 
 \endinput
@@ -713,3 +783,9 @@
 2015/07/27: new options `before-song', `after-song', `after-title' and
             `add-to-reset'
 2015/02/02: enable to recall chords even if verse is used the first time
+2016/05/18: new option `disable-measuring'
+            set \@fileswfalse during the measuring phase
+            if measuring is disabled the `height' property is set to 0pt
+2016/06/29: - adapt to changed shorthand library
+            - activate bar-shortcuts per default
+2016/07/02: fix issue when \capo is used in a title template

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.templates.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.templates.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.templates.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -31,11 +30,11 @@
 \tl_new:N    \l__leadsheets_songtitle_template_tl
 \prop_new:N  \l__leadsheets_songtitle_template_prop
 
-\NewDocumentCommand \songtitle {} { \leadsheets_songtitle: }
+% \NewDocumentCommand \songtitle {} { \leadsheets_songtitle: }
 
 % the following is shamelessly adapted from the `needspace' package by
 % Peter Wilson and Herries Press:
-\cs_new:Npn \leadsheets_needspace:n #1
+\cs_new_protected:Npn \__leadsheets_needspace:n #1
   {
     \group_begin:
       \dim_set:Nn \l__leadsheets_tmpa_dim { #1 }
@@ -49,13 +48,13 @@
     \group_end:
   }
 
-\cs_new_protected:Npn \leadsheets_songtitle:
+\cs_new_protected:Npn \__leadsheets_songtitle:
   {
-    \leadsheets_use_songtitle_template:V \l__leadsheets_songtitle_template_tl
-    \leadsheets_needspace:n { 3\baselineskip }
+    \__leadsheets_use_songtitle_template:V \l__leadsheets_songtitle_template_tl
+    \__leadsheets_needspace:n { 3\baselineskip }
   }
 
-\cs_new_protected:Npn \leadsheets_use_songtitle_template:n #1
+\cs_new_protected:Npn \__leadsheets_use_songtitle_template:n #1
   {
     \prop_get:NnNTF \l__leadsheets_songtitle_template_prop
       {#1}
@@ -63,7 +62,7 @@
       { \l__leadsheets_tmpa_tl }
       { \msg_error:nnnn {leadsheets} {unknown-template} {songtitle} {#1} }
   }
-\cs_generate_variant:Nn \leadsheets_use_songtitle_template:n { V }
+\cs_generate_variant:Nn \__leadsheets_use_songtitle_template:n { V }
 
 \cs_new_protected:Npn \leadsheets_define_songtitle_template:nn #1#2
   { \prop_put:Nnn \l__leadsheets_songtitle_template_prop {#1} {#2} }

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.translations.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.translations.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.translations.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -22,48 +21,62 @@
 %
 % The Current Maintainer of this work is Clemens Niederberger.
 % --------------------------------------------------------------------------
-\LeadsheetsExplLibrary{translations}{2014/08/10 dictionary for leadsheets}
+\LeadsheetsExplLibrary{translations}{2016/06/28 dictionary for leadsheets}
 
 \cs_new:Npn \leadsheets_translation:n #1
-  { \GetTranslation{leadsheets/#1} }
+  { \GetTranslation {leadsheets/#1} }
 \cs_generate_variant:Nn \leadsheets_translation:n { V }
 
-\DeclareTranslation {German}  {leadsheets/chorus} {Refrain}
-\DeclareTranslation {German}  {leadsheets/verse}  {Strophe}
+\cs_new_protected:Npn \leadsheets_declare_translation:nnn #1#2#3
+  { \declaretranslation {#1} {leadsheets/#2} {#3} }
+\cs_generate_variant:Nn \leadsheets_translation:n { V }
 
-\DeclareTranslationFallback   {leadsheets/composer} {Composer}
-\DeclareTranslation {English} {leadsheets/composer} {Composer}
-\DeclareTranslation {German}  {leadsheets/composer} {Komponist}
+\NewDocumentCommand \defleadsheetstranslation {mmm}
+  { \leadsheets_declare_translation:nnn {#1} {#2} {#3} }
 
-\DeclareTranslationFallback   {leadsheets/lyrics} {Lyrics}
-\DeclareTranslation {English} {leadsheets/lyrics} {Lyrics}
-\DeclareTranslation {German}  {leadsheets/lyrics} {Text}
+\DeclareExpandableDocumentCommand \leadsheetstranslate {m}
+  { \leadsheets_translation:n {#1} }
 
-\DeclareTranslationFallback   {leadsheets/key} {Key}
-\DeclareTranslation {English} {leadsheets/key} {Key}
-\DeclareTranslation {German}  {leadsheets/key} {Tonart}
+\leadsheets_declare_translation:nnn {German}   {chorus} {Refrain}
+\leadsheets_declare_translation:nnn {German}   {verse}  {Strophe}
 
-\DeclareTranslationFallback   {leadsheets/interpret}
+\leadsheets_declare_translation:nnn {Fallback} {composer} {composer}
+\leadsheets_declare_translation:nnn {English}  {composer} {composer}
+\leadsheets_declare_translation:nnn {German}   {composer} {Komponist}
+
+\leadsheets_declare_translation:nnn {Fallback} {lyrics} {lyrics}
+\leadsheets_declare_translation:nnn {English}  {lyrics} {lyrics}
+\leadsheets_declare_translation:nnn {German}   {lyrics} {Text}
+
+\leadsheets_declare_translation:nnn {Fallback} {key} {key}
+\leadsheets_declare_translation:nnn {English}  {key} {key}
+\leadsheets_declare_translation:nnn {German}   {key} {Tonart}
+ 
+\leadsheets_declare_translation:nnn {Fallback} {interpret}
   {as~ interpreted~ by~ \printsongpropertylist{interpret}{~\&~}{,~}{~\&~}}
-\DeclareTranslation {English} {leadsheets/interpret}
+\leadsheets_declare_translation:nnn {English}  {interpret}
   {as~ interpreted~ by~ \printsongpropertylist{interpret}{~\&~}{,~}{~\&~}}
-\DeclareTranslation {German}  {leadsheets/interpret}
+\leadsheets_declare_translation:nnn {German}   {interpret}
   {wie~ von~ \printsongpropertylist{interpret}{~\&~}{,~}{~\&~}~ interpretiert}
 
-\DeclareTranslationFallback   {leadsheets/major} {major}
-\DeclareTranslation {English} {leadsheets/major} {major}
-\DeclareTranslation {German}  {leadsheets/major} {Dur}
+\leadsheets_declare_translation:nnn {Fallback} {major} {major}
+\leadsheets_declare_translation:nnn {English}  {major} {major}
+\leadsheets_declare_translation:nnn {German}   {major} {Dur}
 
-\DeclareTranslationFallback   {leadsheets/minor} {minor}
-\DeclareTranslation {English} {leadsheets/minor} {minor}
-\DeclareTranslation {German}  {leadsheets/minor} {Moll}
+\leadsheets_declare_translation:nnn {Fallback} {minor} {minor}
+\leadsheets_declare_translation:nnn {English}  {minor} {minor}
+\leadsheets_declare_translation:nnn {German}   {minor} {Moll}
 
-\DeclareTranslationFallback   {leadsheets/capo} {Capo}
-\DeclareTranslation {English} {leadsheets/capo} {Capo}
-\DeclareTranslation {German}  {leadsheets/capo} {Kapo}
+\leadsheets_declare_translation:nnn {Fallback} {capo} {capo}
+\leadsheets_declare_translation:nnn {English}  {capo} {capo}
+\leadsheets_declare_translation:nnn {German}   {capo} {Kapo}
 
-\DeclareTranslationFallback   {leadsheets/fret} {fret}
-\DeclareTranslation {English} {leadsheets/fret} {fret}
-\DeclareTranslation {German}  {leadsheets/fret} {Bund}
+\leadsheets_declare_translation:nnn {Fallback} {fret} {fret}
+\leadsheets_declare_translation:nnn {English}  {fret} {fret}
+\leadsheets_declare_translation:nnn {German}   {fret} {Bund}
 
-\endinput
+\tex_endinput:D
+
+2014/08/10: first version
+2016/05/18: new command: \leadsheets_declare_translation:nnn
+2016/06/28: new commands \leadsheetstranslate, \defleadsheetstranslation

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.transposing.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.transposing.code.tex	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.library.transposing.code.tex	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger

Modified: trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.sty	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/texmf-dist/tex/latex/leadsheets/leadsheets.sty	2016-08-19 21:44:56 UTC (rev 41890)
@@ -5,7 +5,6 @@
 %
 % --------------------------------------------------------------------------
 % Clemens Niederberger
-% Web:    http://www.mychemistry.eu/forums/forum/leadsheets/
 % E-Mail: contact at mychemistry.eu
 % --------------------------------------------------------------------------
 % Copyright 2014-2016 Clemens Niederberger
@@ -28,15 +27,15 @@
 % --------------------------------------------------------------------------
 % package information:
 \ExplSyntaxOn
-\tl_const:Nn \c_leadsheets_date_tl    {2016/02/02}
-\tl_const:Nn \c_leadsheets_version_tl {0.3a}
-\tl_const:Nn \c_leadsheets_info_tl    {Typesetting leadsheets and songbooks}
+\tl_const:Nn \leadsheetsdate    {2016/08/18}
+\tl_const:Nn \leadsheetsversion {0.5}
+\tl_const:Nn \leadsheetsinfo    {Typesetting leadsheets and songbooks}
 
 \ProvidesExplPackage
   {leadsheets}
-  {\c_leadsheets_date_tl}
-  {\c_leadsheets_version_tl}
-  {\c_leadsheets_info_tl \c_space_tl (CN)}
+  {\leadsheetsdate}
+  {\leadsheetsversion}
+  {\leadsheetsinfo \c_space_tl (CN)}
 
 % --------------------------------------------------------------------------
 % messages:
@@ -72,16 +71,55 @@
 \tl_new:N   \l__leadsheets_tmpb_tl
 \tl_new:N   \l__leadsheets_tmpc_tl
 \tl_new:N   \l__leadsheets_tmpd_tl
+\tl_new:N   \g__leadsheets_tmpa_tl
+
 \bool_new:N \l__leadsheets_tmpa_bool
+
 \dim_new:N  \l__leadsheets_tmpa_dim
+
 \seq_new:N  \l__leadsheets_tmpa_seq
 \seq_new:N  \l__leadsheets_tmpb_seq
+
 \int_new:N  \l__leadsheets_tmpa_int
 \int_new:N  \l__leadsheets_tmpb_int
 \int_new:N  \l__leadsheets_tmpc_int
+
 \box_new:N  \l__leadsheets_tmpa_box
 
 % --------------------------------------------------------------------------
+\prg_new_conditional:Npnn \leadsheets_if_package_loaded:n #1 {p,T,F,TF}
+  {
+    \cs_if_exist:cTF {ver@#1.sty}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+
+\DeclareExpandableDocumentCommand \leadsheetsifpackageloaded {m}
+  { \leadsheets_if_package_loaded:nTF {#1} }
+
+% % --------------------------------------------------------------------------
+% \seq_new:N \l__leadsheets_safed_commands_seq
+
+% \cs_new_protected:Npn \leadsheets_safe_define_protected:Npn #1
+%   {
+%     \seq_if_in:NnTF \l__leadsheets_safed_commands_seq {#1}
+%       {} % error
+%       {
+%         \seq_gput_right:Nn \l__leadsheets_safed_commands_seq {#1}
+%         \cs_gset_eq:cN {__leadsheets_ \cs_to_str:N #1:} #1
+%         \cs_set_protected:Npn #1
+%       }
+%   }
+
+% \cs_new_protected:Npn \leadsheets_restore:N #1
+%   {
+%     \seq_if_in:NnTF \l__leadsheets_safed_commands_seq {#1}
+%       { \cs_set_eq:Nc #1 {__leadsheets_ \cs_to_str:N #1:} }
+%       {} % error
+%     \seq_gremove_all:Nn \l__leadsheets_safed_commands_seq {#1}
+%   }
+  
+% --------------------------------------------------------------------------
 % library mechanism:
 \tl_const:Nn \c__leadsheets_library_extension_tl {code.tex}
 \tl_const:Nn \c__leadsheets_library_prefix_tl    {leadsheets.library}
@@ -95,9 +133,19 @@
     \__leadsheets_load_library:V \l__leadsheets_tmpa_tl
   }
 
+\prg_new_conditional:Npnn \leadsheets_if_library:n #1 {p,T,F,TF}
+  {
+    \cs_if_exist:cTF {leadsheets-library-#1-loaded}
+      { \prg_return_true: }
+      { \prg_return_false: }
+  }
+
+\DeclareExpandableDocumentCommand \leadsheetsiflibrary {m}
+  { \leadsheets_if_library:nTF {#1} }
+  
 \cs_new_protected:Npn \__leadsheets_load_library:n #1
   {
-    \cs_if_exist:cF {leadsheets-library-#1-loaded}
+    \leadsheets_if_library:nF {#1}
       {
         \file_if_exist:nTF
           {\c__leadsheets_library_prefix_tl.#1.\c__leadsheets_library_extension_tl}
@@ -118,14 +166,17 @@
     \ProvidesFile
       {\c__leadsheets_library_prefix_tl.#1.\c__leadsheets_library_extension_tl}
       [
-        \c_leadsheets_date_tl
+        \leadsheetsdate
         \c_space_tl
-        v \c_leadsheets_version_tl
+        v \leadsheetsversion
         \c_space_tl
         leadsheets~ library~ `#1'~ #2
       ]
   }
 
+% 
+\cs_new:Npn \LeadsheetSurvive #1 \LeadsheetEndSurvive {#1}
+
 % --------------------------------------------------------------------------
 % one of those defines a leadsheets library, either using expl syntax or 2e
 % package syntax:
@@ -166,6 +217,9 @@
     songs        .code:n =
       \bool_set_true:N \l__leadsheets_with_options_bool
       \leadsheets_load_library:n {songs} ,
+    external     .code:n =
+      \bool_set_true:N \l__leadsheets_with_options_bool
+      \leadsheets_load_library:n {external} ,
     minimal      .code:n =
       \bool_set_true:N \l__leadsheets_with_options_bool ,
     full         .code:n =
@@ -180,7 +234,8 @@
           properties ,
           transposing ,
           templates ,
-          translations
+          translations ,
+          external
         }
   }
 \ProcessKeysOptions{leadsheets}
@@ -188,7 +243,12 @@
 \bool_if:NF \l__leadsheets_with_options_bool
   { \leadsheets_load_library:n {songs} }
   
-
 % --------------------------------------------------------------------------
 \tex_endinput:D
 
+2016/08/18 - new commands: \leadsheetsifpackageloaded, \leadsheetsiflibrary
+           - new class `leadsheet'
+           - new library `external'
+           - minor chords can now be typeset with lowercase letters
+             (chordnames)
+

Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2016-08-19 14:08:40 UTC (rev 41889)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2016-08-19 21:44:56 UTC (rev 41890)
@@ -75,7 +75,8 @@
     bbcard bbding bbm bbm-macros bbold bbold-type1 bchart bclogo
     beamer beamer2thesis beamer-FUBerlin beamer-tut-pt beamer-verona
     beameraudience beamercolorthemeowl beamerdarkthemes beamerposter
-    beamersubframe beamertheme-detlevcm beamertheme-epyt beamertheme-metropolis
+    beamersubframe beamerswitch
+    beamertheme-detlevcm beamertheme-epyt beamertheme-metropolis
     beamertheme-phnompenh beamertheme-upenn-bc
     beamerthemejltree
     beamerthemenirma



More information about the tex-live-commits mailing list