% file: docgeneration.mp % flow control of how grammar's documents are created input boxes u:=1cc; pair sep,fldsep; sep := (0,1u); fldsep := (3u,0); beginfig(1); boxit.docsmp(btex xxx.mp for mpost etex); % mpost doc boxit.docsw(btex xxx.w for cweave etex); % cweave doc boxit.mpraildocs(btex $\sum$ railroad diagrams of grammar etex); % mpost output boxit.mpost(btex mpost etex); % mpost boxit.cweave(btex cweave etex); % cweave boxit.texdoc(btex xxx.tex etex); % tex doc boxit.pdftex(btex pdftex etex); % pdftex boxit.pdfdoc(btex xxx.pdf etex); % pdf doc boxit.pdfrdr(btex ``a pdf reader'' etex); % pdf reader % place the boxes docsmp.s - sep = mpost.n; mpost.s - sep = mpraildocs.n; docsmp.e + 2fldsep = docsw.w; ypart mpost.n = ypart cweave.n; ypart mpost.s = ypart cweave.s; docsw.s - sep = cweave.n; cweave.s - sep = texdoc.n; texdoc.e + fldsep = pdftex.w; pdftex.s - sep = pdfdoc.n; pdfdoc.s - sep = pdfrdr.n; % form the boxes drawboxed(docsmp); drawboxed(mpost); drawboxed(mpraildocs); drawboxed(docsw); drawboxed(cweave); drawboxed(texdoc); drawboxed(pdftex); drawboxed(pdfdoc); drawboxed(pdfrdr); % draw lined arrows between the boxes drawarrow docsmp.s -- mpost.n; drawarrow mpost.s -- mpraildocs.n; drawarrow docsw.s -- cweave.n; pair xxx; xxx = .5[mpraildocs.e,docsw.w]; draw mpraildocs.e {right} .. {up} xxx dashed withdots; drawarrow xxx {up} .. {right} docsw.w dashed withdots; drawarrow cweave.s -- texdoc.n; drawarrow texdoc.e -- pdftex.w; drawarrow pdftex.s -- pdfdoc.n; drawarrow pdfdoc.s -- pdfrdr.n; endfig; end;