summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/currfile
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-04-09 23:57:07 +0000
committerKarl Berry <karl@freefriends.org>2010-04-09 23:57:07 +0000
commit6f566f4c50f0a9f580b47c6c30b0f58531baaacf (patch)
treec24bc651796b8b6274bb8f1f5f5e6f0b65d19c17 /Master/texmf-dist/source/latex/currfile
parent4ae752d402a724ec733722603ac28caec31b6e91 (diff)
new latex package currfile 0.1 (8apr10)
git-svn-id: svn://tug.org/texlive/trunk@17776 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/currfile')
-rw-r--r--Master/texmf-dist/source/latex/currfile/currfile.dtx265
-rw-r--r--Master/texmf-dist/source/latex/currfile/currfile.ins7
2 files changed, 272 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/currfile/currfile.dtx b/Master/texmf-dist/source/latex/currfile/currfile.dtx
new file mode 100644
index 00000000000..f2520147cfb
--- /dev/null
+++ b/Master/texmf-dist/source/latex/currfile/currfile.dtx
@@ -0,0 +1,265 @@
+% \iffalse meta-comment
+%% Copyright (c) 2010 by Martin Scharrer <martin@scharrer-online.de>
+%% -----------------------------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% 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.3c or later is part of all distributions of LaTeX
+%% version 2008/05/04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the files currfile.dtx, currfile.ins
+%% and the derived file currfile.sty.
+%%
+%% $Id: standalone.dtx 1803 2010-04-03 13:59:44Z martin $
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{currfile.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{currfile}
+%<*package>
+ [2010/04/08 v0.1 Current input file name and path]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{currfile}[2010/04/08]
+\usepackage{ifpdf}
+\usepackage{hyperref}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\providecommand*\pkg{\texttt}
+\begin{document}
+ \DocInput{currfile.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{148}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.1}{2010/04/08}{Initial version}
+%
+% \GetFileInfo{currfile.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \ifpdf
+% \hypersetup{%
+% pdfauthor = {Martin Scharrer <martin@scharrer-online.de>},
+% pdftitle = {The currfile package},
+% pdfsubject = {Documentation of LaTeX package 'currfile'},
+% pdfkeywords = {current filename, filename, file, name, LaTeX, TeX}
+% }%
+% \fi
+% \clearpage
+% \null
+% \vspace*{-2em}
+% \begin{center}
+% {\LARGE\sffamily The \emph{currfile} Package\\[\medskipamount]}
+% {\large Martin Scharrer \\[\medskipamount]\normalsize
+% \url{martin@scharrer-online.de}\\[.8ex]
+% \url{http://www.ctan.org/pkg/standalone/}\\[\bigskipamount]}
+% {\large Version \fileversion\ -- \filedate}\\
+% \end{center}
+% \vspace{1.2em}%
+%
+% \begin{abstract}
+% This small package provides the file name and path information of the current input file as \LaTeX{} macros.
+% \end{abstract}
+%
+% \section{Usage}
+%
+% \DescribeMacro{\currfiledir}
+% \DescribeMacro{\currfilebase}
+% \DescribeMacro{\currfileext}
+% \DescribeMacro{\currfilename}
+% \DescribeMacro{\currfilepath}
+% The directory, base (name without extension), extension (without dot), name (=base+`|.|'+ext) and path (=dir+name) of the current file are provided by these macros.
+% This means that the macros returns the file information of the file they are used in. All macros are fully expanded, i.e.\ only hold
+% text and not further macros.
+% Special care is taken to keep the file information of |\include|d files till the final |\clearpage| command, so that page header and footer of the last page
+% will hold the correct data.
+%
+% Only files loaded with the \LaTeX{} macros |\input| or |\include| and the main file are taken into account. Files loaded using package macros like |\usepackage| or internal
+% macros \cs{@input} and \cs{@@input} are ignored.
+%
+% More detailed information can be found in the implementation section (\ref{sec:impl}) if required.
+%
+% \subsection*{Package Options}
+% The package provides two options |mainext| and |maindir| which can be used to provide the extension and directory of the main file.
+% This is required if the above macros should be used for the main file itself and if this does has a file extension other than `|.tex|' (e.g.\ a |.dtx| file)
+% or is not located in the current directory.
+%
+% \section{Similar Packages}
+% The |fink| package (\emph{fi}le \emph{n}ame \emph{k}eeper) provides a similar functionality. It has inspired this package in several points (e.g.\ package
+% options). However, it does not exclude package and other preamble files and does not take care to change the filename \emph{after} the |\clearpage| of
+% |\include|.
+%
+% \StopEventually{}
+%
+%
+% \section{Implementation}\label{sec:impl}
+%
+% \iffalse
+%<*package>
+% \fi
+% \subsection{Options}
+%
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{family=currfile,prefix=currfile@}
+\DeclareStringOption[tex]{mainext}
+\DeclareStringOption[]{maindir}
+\ProcessKeyvalOptions*\relax
+% \end{macrocode}
+%
+%
+% \subsection{File Hooks}
+% The \pkg{filehook} package is used to execute the macros at the correct places.
+% The internal, not user, interface is used to make sure that the file names are valid for all other hooks.
+%
+% \begin{macrocode}
+\RequirePackage{filehook}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\filehook@prefixwarg\filehook@include@atbegin{%
+ \currfile@push
+ \currfile@set{#1}%
+}
+\filehook@appendwarg\filehook@include@after{%
+ \currfile@pop
+}
+\filehook@prefixwarg\filehook@input@atbegin{%
+ \currfile@push
+ \currfile@set{#1}%
+}
+\filehook@appendwarg\filehook@input@atend{%
+ \currfile@pop
+}
+% \end{macrocode}
+%
+%
+% \subsection{Set Current Values}
+%
+% \begin{macro}{\currfile@set}
+% Sets the file information which are parsed by \LaTeX's |\filename@parse|.
+% \begin{macrocode}
+\def\currfile@set#1{%
+ \begingroup
+ \filename@parse{#1}%
+ \global\let\currfiledir\filename@area
+ \global\let\currfilebase\filename@base
+ \xdef\currfileext{\ifx\filename@ext\relax tex\else\filename@ext\fi}%
+ \xdef\currfilename{\currfilebase\ifx\currfileext\empty\else.\currfileext\fi}%
+ \xdef\currfilepath{\currfiledir\currfilename}%
+ \endgroup
+%<debug> \expandafter\gdef\expandafter\dindent\expandafter{\dindent\space}%
+%<debug> \message{^^JDEBUG: \dindent\empty Entering file '\currfilename' ^^J }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{File Stack}
+% The file information are pushed and popped on a stack to save and restore them when
+% entering and leaving a sub-file, respectively. This is quite similar to the way
+% \LaTeX\ saves file base names and extension as well as the `@' status (letter or other) for
+% package and class files.
+%
+% \begin{macro}{\currfile@push}
+% \begin{macrocode}
+\def\currfile@push{%
+ \xdef\currfile@stack{%
+ {\currfiledir}%
+ {\currfilebase}%
+ {\currfileext}%
+ \currfile@stack
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\currfile@pop}
+% \begin{macrocode}
+\def\currfile@pop{%
+%<debug> \message{^^JDEBUG: \dindent\empty Leaving file '\currfilename' ^^J }%
+ \ifx\currfile@stack\empty
+ \PackageWarning{currfile}{File stack underflow!}{}{}%
+ \global\let\currfile@stack\currfile@stackinit
+ \fi
+ \expandafter\currfile@pop@\currfile@stack\relax
+ \relax\relax\relax
+%<debug> \message{^^JDEBUG: \dindent\empty Restoring file '\currfilename' ^^J }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\currfile@pop@}
+% \begin{macrocode}
+\def\currfile@pop@#1#2#3#4\relax{%
+ \gdef\currfiledir{#1}%
+ \gdef\currfilebase{#2}%
+ \gdef\currfileext{#3}%
+ \xdef\currfilename{\currfilebase\ifx\currfileext\empty\else.\currfileext\fi}%
+ \xdef\currfilepath{\currfiledir\currfilename}%
+ \gdef\currfile@stack{#4}%
+%<debug> \expandafter\expandafter\expandafter\gdef
+%<debug> \expandafter\expandafter\expandafter\dindent
+%<debug> \expandafter\expandafter\expandafter{\expandafter\@gobble\dindent}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\currfile@stack}
+% \begin{macro}{\currfile@stackinit}
+% Place |\jobname| values on stack and use this as init value.
+% \begin{macrocode}
+\def\currfile@stack{}
+\currfile@set{\currfile@maindir\jobname.\currfile@mainext}
+\currfile@push
+\let\currfile@stackinit\currfile@stack
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \iffalse
+%<debug> \def\dindent{}
+% \fi
+%
+% \iffalse
+%</package>
+% \fi
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/currfile/currfile.ins b/Master/texmf-dist/source/latex/currfile/currfile.ins
new file mode 100644
index 00000000000..9f0428e33f9
--- /dev/null
+++ b/Master/texmf-dist/source/latex/currfile/currfile.ins
@@ -0,0 +1,7 @@
+% $Id$
+% See file 'currfile.dtx' for copyright and licence.
+%
+\input docstrip.tex
+\keepsilent
+\generate{\nopreamble\file{currfile.sty}{\from{currfile.dtx}{package}}}
+\endbatchfile