diff options
author | Karl Berry <karl@freefriends.org> | 2010-09-10 21:19:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-09-10 21:19:23 +0000 |
commit | 74f67a5d54a613355ce08a8233455ecdee5aeac2 (patch) | |
tree | 598af7fcdf42a847e8082886a76816f8267f1dad /Master/texmf-dist/tex/latex | |
parent | 75030959fe7e9e18a4237090b4173052d10e1740 (diff) |
new package logreq, required by biblatex (report from herbs, 10sep10)
git-svn-id: svn://tug.org/texlive/trunk@19640 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/logreq/logreq.def | 35 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/logreq/logreq.sty | 237 |
2 files changed, 272 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/logreq/logreq.def b/Master/texmf-dist/tex/latex/logreq/logreq.def new file mode 100644 index 00000000000..f114e40159d --- /dev/null +++ b/Master/texmf-dist/tex/latex/logreq/logreq.def @@ -0,0 +1,35 @@ +% $Id: logreq.def,v 1.0 2010/08/04 16:12:57 lehman stable $ + +\renewcommand*{\LogreqDTDVersion}{1.0} +\ProvidesFile{logreq.def} +[\lrq@rcsid $Id: logreq.def,v 1.0 2010/08/04 16:12:57 lehman stable $ + logreq spec v\LogreqDTDVersion] + +\DeclareLogreqContainer{requests}{(internal | external)*} +\DeclareLogreqContainer{internal}{(generic, (provides | requires)*)} +\DeclareLogreqContainer{external}{(generic, cmdline?, input?, output?, (provides | requires)*)} +\DeclareLogreqContainer{cmdline}{(binary, (option | infile | outfile)*)} +\DeclareLogreqContainer{input}{(file)+} +\DeclareLogreqContainer{output}{(file)+} +\DeclareLogreqContainer{provides}{(file)+} +\DeclareLogreqContainer{requires}{(file)+} + +\DeclareLogreqElement{generic}{(#PCDATA)} +\DeclareLogreqElement{binary}{(#PCDATA)} +\DeclareLogreqElement{option}{(#PCDATA)} +\DeclareLogreqElement{infile}{(#PCDATA)} +\DeclareLogreqElement{outfile}{(#PCDATA)} +\DeclareLogreqElement{file}{(#PCDATA)} + +\DeclareLogreqAttribute{requests}{version}{CDATA #REQUIRED} +\DeclareLogreqAttribute{internal}{package}{CDATA #REQUIRED} +\DeclareLogreqAttribute{internal}{priority}{(9) #REQUIRED} +\DeclareLogreqAttribute{internal}[1]{active}{(0 | 1) #REQUIRED} +\DeclareLogreqAttribute{external}{package}{CDATA #REQUIRED} +\DeclareLogreqAttribute{external}{priority}{(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED} +\DeclareLogreqAttribute{external}[1]{active}{(0 | 1) #REQUIRED} +\DeclareLogreqAttribute{provides}{type}{(static | dynamic | editable) #REQUIRED} +\DeclareLogreqAttribute{requires}{type}{(static | dynamic | editable) #REQUIRED} +\DeclareLogreqAttribute{file}{type}{CDATA #IMPLIED} + +\endinput diff --git a/Master/texmf-dist/tex/latex/logreq/logreq.sty b/Master/texmf-dist/tex/latex/logreq/logreq.sty new file mode 100644 index 00000000000..f64a97f5527 --- /dev/null +++ b/Master/texmf-dist/tex/latex/logreq/logreq.sty @@ -0,0 +1,237 @@ +% $Id: logreq.sty,v 1.0 2010/08/04 16:12:57 lehman stable $ + +% Copyright (c) 2010 Philipp Lehman. +% +% Permission is granted to copy, distribute and/or modify this +% software under the terms of the LaTeX Project Public License +% (LPPL), version 1.3. +% +% The LPPL maintenance status of this software is 'maintained'. +% +% This software is provided 'as is', without warranty of any kind, +% either expressed or implied, including, but not limited to, the +% implied warranties of merchantability and fitness for a +% particular purpose. + +\def\lrq@rcsid$#1: #2 #3 #4 #5${#4 v#3} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{logreq} +[\lrq@rcsid $Id: logreq.sty,v 1.0 2010/08/04 16:12:57 lehman stable $ + xml request logger] +\RequirePackage{etoolbox} +\RequirePackage{keyval} + +\let\lrq@tempa\@empty +\def\do#1{% + \edef\lrq@tempa{\lrq@tempa + \catcode\number`#1=\the\catcode`#1\relax}% + \@makeother#1} +\do\<\do\>\do\?\do\!\do\/\do\=\do\" +\let\do\noexpand +\AtEndOfPackage{\lrq@tempa\undef\lrq@tempa} + +\def\lrq@version$#1: #2 ${#2} +\edef\lrq@version{\lrq@version$Revision: 1.0 $} + +\newcount\lrq@indent +\def\lrq@nl{^^J} +\def\lrq@tab{\lrq@tab@i\lrq@indent} +\def\lrq@tab@i#1{% + \ifnumgreater{#1}\z@ + {\space\space + \expandafter\lrq@tab@i + \expandafter{\the\numexpr#1-\@ne}} + {}} +\let\lrq@hook@data\@empty +\def\lrq@hook@init{% + \lrq@indent\@ne + \let\comment\lrq@xml@comment} + +\def\lrq@xml@sig{<!-- logreq request file -->} +\edef\lrq@xml@ver{<!-- logreq version \lrq@version\space / dtd version \noexpand\LogreqDTDVersion\space -->} + +\def\lrq@xml@comment#1{% + \xappto\lrq@hook@data{\lrq@tab<!-- #1 -->\lrq@nl}} + +\def\lrq@xml@container#1#2#3{% + \begingroup + \lrq@parseattributes{#1}{#2}% + \xappto\lrq@hook@data{\lrq@tab<#1\lrq@attribs>\lrq@nl}% + \advance\lrq@indent\@ne#3\advance\lrq@indent\m@ne + \xappto\lrq@hook@data{\lrq@tab</#1>\lrq@nl}% + \endgroup} + +\def\lrq@xml@element#1#2#3{% + \begingroup + \lrq@parseattributes{#1}{#2}% + \xappto\lrq@hook@data{\lrq@tab<#1\lrq@attribs>#3</#1>\lrq@nl}% + \endgroup} + +\def\lrq@xml@setup{% + \begingroup + \lrq@indent\@ne + \let\do\lrq@dtd@doelement + \dolistloop\lrq@lst@elm + \xdef\lrq@hook@data{% + <?xml version="1.0" standalone="yes"?>\lrq@nl + \lrq@xml@sig\lrq@nl + \lrq@xml@ver\lrq@nl + <!-- Do not edit this file! -->\lrq@nl + <!DOCTYPE requests [\lrq@nl\lrq@hook@dtd]>\lrq@nl + <requests version="\LogreqDTDVersion">\lrq@nl\lrq@hook@data</requests>}% + \endgroup +} + +\def\lrq@dtd@doelement#1{% + \ifcsdef{lrq@lst@att@#1}% + {\xappto\lrq@hook@dtd{\lrq@tab<!ATTLIST #1\lrq@nl}% + \begingroup + \lrq@indent\tw@ + \let\do\lrq@dtd@doattribute + \dolistcsloop{lrq@lst@att@#1}% + \endgroup + \xappto\lrq@hook@dtd{\lrq@tab>\lrq@nl}} + {}} + +\def\lrq@dtd@doattribute#1{% + \xappto\lrq@hook@dtd{\lrq@tab#1\lrq@nl}} + +\def\lrq@writeout{% + \PackageInfo{logreq}{% + Writing requests to '\@reqoutput'\@gobble}% + \begingroup + \openin\@mainaux\@reqoutput\relax + \ifeof\@mainaux + \lrq@writeout@ii + \else + \endlinechar\m@ne + \readline\@mainaux to \lrq@tempa + \ifeof\@mainaux + \lrq@writeout@ii + \else + \readline\@mainaux to \lrq@tempa + \edef\lrq@xml@sig{\detokenize\expandafter{\lrq@xml@sig}}% + \ifx\lrq@xml@sig\lrq@tempa + \readline\@mainaux to \lrq@tempa + \edef\lrq@xml@ver{\noexpand\detokenize{\lrq@xml@ver}}% + \edef\lrq@xml@ver{\lrq@xml@ver}% + \ifx\lrq@xml@ver\lrq@tempa + \else + \PackageWarning{logreq}{% + File '\@reqoutput' created\MessageBreak + by different version of logreq.\MessageBreak + Overwriting file}% + \fi + \lrq@writeout@ii + \else + \lrq@writeout@i + \PackageError{logreq} + {File '\@reqoutput' not created by logreq} + {This file was apparently not created by logreq.\MessageBreak + I'm aborting now}% + \fi + \fi + \fi} + +\def\lrq@writeout@i{% + \closein\@mainaux + \endgroup} + +\def\lrq@writeout@ii{% + \lrq@writeout@i + \lrq@xml@setup + \immediate\openout\@mainaux\@reqoutput\relax + \immediate\write\@mainaux{\lrq@hook@data}% + \immediate\closeout\@mainaux} + +\AtEndDocument{\AfterEndDocument{\lrq@writeout}} + +\protected\def\lrq@container{\lrq@parser\lrq@xml@container} +\protected\def\lrq@element{\lrq@parser\lrq@xml@element} + +\def\lrq@parser#1#2{% + \@ifnextchar[%] + {\lrq@parser@i{#1}{#2}} + {\lrq@parser@i{#1}{#2}[]}} + +\def\lrq@parser@i#1#2[#3]#4{% + #1{#2}{#3}{#4}} + +% {<element>}{<dtd spec>} + +\newrobustcmd*{\DeclareLogreqContainer}{\lrq@defparser\lrq@container} +\@onlypreamble\DeclareLogreqContainer + +\newrobustcmd*{\DeclareLogreqElement}{\lrq@defparser\lrq@element} +\@onlypreamble\DeclareLogreqElement + +\def\lrq@defparser#1{% + \begingroup\@makeother\#% + \lrq@defparser@i{#1}} + +\def\lrq@defparser@i#1#2#3{% + \endgroup + \eappto\lrq@hook@init{% + \def\expandafter\noexpand\csname#2\endcsname{% + \noexpand#1{#2}}}% + \listadd\lrq@lst@elm{#2}% + \begingroup + \lrq@indent\@ne + \xappto\lrq@hook@dtd{\lrq@tab<!ELEMENT #2 \detokenize{#3}>\lrq@nl}% + \endgroup} + +% {<element>}[<default>]{<attribute>}{<dtd spec>} + +\newrobustcmd*{\DeclareLogreqAttribute}[1]{% + \@ifnextchar[%] + {\lrq@defattibute{#1}} + {\lrq@defattibute{#1}[]}} +\@onlypreamble\DeclareLogreqAttribute + +\def\lrq@defattibute#1[#2]#3{% + \ifblank{#2} + {\define@key{lrq@att@#1}{#3}} + {\define@key{lrq@att@#1}{#3}[#2]}% + {\eappto\lrq@attribs{ #3="##1"}}% + \begingroup\@makeother\#% + \lrq@defattibute@i{#1}{#3}} + +\def\lrq@defattibute@i#1#2#3{% + \endgroup + \listcseadd{lrq@lst@att@#1}{#2 #3}} + +\def\lrq@parseattributes#1#2{% + \let\lrq@attribs\@empty + \setkeys{lrq@att@#1}{#2}} + +% {<macro>}{<attributes>}{<request>} + +\protected\def\lrq@request#1#2#3{% + \begingroup + \setbox\@tempboxa=\hbox{% + \let\if@safe@actives\iftrue + \let\protect\string + \lrq@hook@init + #1[#2]{#3}}% + \endgroup} + +% package interface + +% {<package>}{<active>}{<request>} + +\newrobustcmd*{\ltxrequest}[3]{% + \lrq@request\internal{package={#1},priority=9,active={#2}}{\generic{latex}#3}} + +% [package=<package>,priority=<priority>,active=<0|1>]{<request>} + +\newrobustcmd*{\logrequest}[2][]{% + \lrq@request\external{#1}{#2}} + +% initialization + +\newcommand*{\@reqoutput}{\jobname.run.xml} +\newcommand*{\LogreqDTDVersion}{} +\input{logreq.def} + +\endinput |