Add elyxer generated documentation
[newfangle.git] / newfangle.module
blob61d9f12ab1703c285540c1f41af22550154c287f
1 #\DeclareLyXModule{Newfangle Literate Listings}
2 #DescriptionBegin
3 #  Newfangle literate listings allow one to write
4 #   literate programs after the fashion of noweb, but without having
5 #   to use noweave to generate the documentation. Instead the listings
6 #   package is extended in conjunction with the noweb package to implement
7 #   to code formating directly as latex.
8 #  The newfangle awk script
9 #DescriptionEnd
10 #newfangle - fully featured notangle replacement in awk
12 # Copyright (C) 2009 Sam Liddicott <sam@liddicott.com>
14 # This program is free software: you can redistribute it and/or modify
15 # it under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or
17 # (at your option) any later version.
19 # This program is distributed in the hope that it will be useful,
20 # but WITHOUT ANY WARRANTY; without even the implied warranty of
21 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22 # GNU General Public License for more details.
24 # You should have received a copy of the GNU General Public License
25 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
29 Format 11
31 AddToPreamble
32 \usepackage{listings}%
33 \usepackage{noweb}%
34 \usepackage{xargs}%
35 \renewcommand{\code}[1]{\texttt{#1}}%
36 \lstnewenvironment{Chunk}{\relax}{\relax}%
37 \lstset{numbers=left, stepnumber=5, numbersep=5pt,
38         breaklines=false,basicstyle=\ttfamily,
39         numberstyle=\tiny, language=C}%
40 \lstset{escapeinside={=<}{>}}%
41 %\makeatletter
42 %somehow re-defining maketitle gives us a left-aligned title
43 %which is extactly what our specially formatted title needs!
44 \global\let\newfangle@lst@maketitle\lst@maketitle%
45 \global\def\lst@maketitle{}%
46 \def\Chunk#1{%
47   \lstset{title={\newfanglecaption},name=#1}%
48   \global\edef\lst@chunkname{\lst@intname}%
50 \def\lst@chunkname{\empty}%
51 \lst@Key{params}\relax{\def\newfangle@chunk@params{#1}}%
52 \lst@Key{append}\relax{\def\newfangle@chunk@append{#1}}%
53 \def\newfanglecaption{\protect\newfangle@caption}%
54 \newcounter{newfangle@chunkcounter}%
55 \def\newfangle@caption{%
56   \edef\chunkcount{lst-chunk-\lst@intname}%
57   \@ifundefined{\chunkcount}{%
58     \expandafter\gdef\csname \chunkcount\endcsname{0}%
59     \setcounter{newfangle@chunkcounter}{\csname \chunkcount\endcsname}%
60     \let\prevchunkname\relax%
61   }{%
62     \setcounter{newfangle@chunkcounter}{\csname \chunkcount\endcsname}%
63     \edef\prevchunkname{\lst@intname-\arabic{newfangle@chunkcounter}}%
64   }%
65   \addtocounter{newfangle@chunkcounter}{1}%
66   \global\expandafter\edef\csname \chunkcount\endcsname{\arabic{newfangle@chunkcounter}}%
67   \edef\chunkname{\lst@intname-\arabic{newfangle@chunkcounter}}%
68   \edef\firstchunkname{\lst@intname-1}%
69   \addtocounter{newfangle@chunkcounter}{1}%
70   \edef\nextchunkname{\lst@intname-\arabic{newfangle@chunkcounter}}%
71   \@ifundefined{r@label-\nextchunkname}{\let\nextchunkname\relax}{}%
72   \sublabel{\chunkname}%
73 % define this label for every chunk instance, so we
74 % can tell when we are the last chunk of this name
75   \label{label-\chunkname}%
76   \addcontentsline{lol}{lstlisting}{\lst@name~[\protect\subpageref{\chunkname}]}%
77   \nwmargintag{%
78     {%
79       \nwtagstyle{}%
80       \subpageref{\chunkname}%
81     }%
82   }%
84   \moddef{%
85     {\lst@name}%
86     {%
87       \nwtagstyle{}\/%
88       \@ifundefined{newfangle@chunk@params}{}{%
89         (\newfangle@chunk@params)%
90       }%
91       [\csname \chunkcount\endcsname]~%
92       \subpageref{\firstchunkname}%
93     }%
94     \@ifundefined{newfangle@chunk@append}{}{%
95     \ifx{}\newfangle@chunk@append{x}\else%
96         ,~add~to~\newfangle@chunk@append%
97     \fi%
98     }%
99 \global\def\newfangle@chunk@append{}%
100 \lstset{append=x}%
101   }%
103   \ifx\relax\prevchunkname\endmoddef\else\plusendmoddef\fi%
104 %  \nwstartdeflinemarkup%
105   \nwprevnextdefs{\prevchunkname}{\nextchunkname}%
106 %  \nwenddeflinemarkup%
108 %\lst@BeginAspect{newfangle}
109 %\lst@Key{newfangle}{true}[t]{\lstKV@SetIf{#1}{true}}
110 \lst@AddToHookExe{PreSet}{\global\let\lst@intname\lst@chunkname}
111 \lst@AddToHook{Init}{}%\newfangle@caption}
112 %\lst@EndAspect
113 \def\chunkref@args#1,{%
114   \def\arg{#1}%
115   \lst@ReplaceIn\arg\lst@filenamerpl%
116   \arg%
117   \@ifnextchar){\relax}{, \chunkref@args}%
119 \newcommand\chunkref[2][0]{%
120   \@ifnextchar({\chunkref@i{#1}{#2}}{\chunkref@i{#1}{#2}()}%
122 \def\chunkref@i#1#2(#3){%
123   \def\zero{0}%
124   \def\chunk{#2}%
125   \def\chunkno{#1}%
126   \def\chunkargs{#3}%
127   \ifx\chunkno\zero%
128     \def\chunkname{#2-1}%
129   \else%
130     \def\chunkname{#2-\chunkno}%
131   \fi%
132   \let\lst@arg\chunk%
133   \lst@ReplaceIn\chunk\lst@filenamerpl%
134   \LA{%\moddef{%
135     {\chunk}%
136     {%
137       \nwtagstyle{}\/%
138       \ifx\chunkno\zero%
139       \else%
140       [\chunkno]%
141       \fi%
142       \ifx\chunkargs\empty%
143       \else%
144         (\chunkref@args #3,)%
145       \fi%
146       ~\subpageref{\chunkname}%
147     }%
148   }%
149   \RA%\endmoddef%
152 %\makeatother
153 EndPreamble
155 Style Chunk
156   LatexType             Command
157   LatexName             Chunk
158   Margin                First_Dynamic
159   LeftMargin            Chunk:xxx
160   LabelSep              xx
161   LabelType             Static
162   LabelString           "Chunk:"
163   Align                 Left
164   PassThru              1
166   LabelFont
167     Family              Sans
168     Size                Large
169     Series              Bold
170     Shape               Italic
171     Color               red
172   EndFont
175 InsetLayout Chunkref
176   LyxType               charstyle
177   LatexType             Command
178   LatexName             chunkref
179   PassThru              1
180   LabelFont             
181     Shape               Italic
182     Color               red
183   EndFont