Merge tag 'v7.5' into my-changes-rebased

This commit is contained in:
Suzanne Soy 2021-07-06 02:42:46 +01:00
commit dd6cbe8650
6 changed files with 404 additions and 144 deletions

View File

@ -830,7 +830,7 @@ The @racket[_get] procedure passed to @racket[traverse] takes a symbol
and any value to act as a default; it returns information registered and any value to act as a default; it returns information registered
for the symbol or the given default if no value has been for the symbol or the given default if no value has been
registered. The @racket[_set] procedure passed to @racket[traverse] registered. The @racket[_set] procedure passed to @racket[traverse]
takes a symbol and a value to registered for the symbol. takes a symbol and a value to be registered for the symbol.
@margin-note*{See also @racket[cond-block] in @racketmodname[scriblib/render-cond].} @margin-note*{See also @racket[cond-block] in @racketmodname[scriblib/render-cond].}
@; @;

View File

@ -180,6 +180,27 @@ See @racket[defform] for information on @racket[options],
@history[#:added "1.6"]} @history[#:added "1.6"]}
@defform[(class*-doc id super (intf-id ...) pre-flow)]{
Like @racket[proc-doc], but for class declarations that use @racket[class*].
The @racket[id], @racket[super], and @racket[intf-id] expressions have the same
meaning as in @racket[defclass].
@history[#:added "1.30"]}
@defform[(class-doc id super pre-flow)]{
Like @racket[class*-doc], but for class declarations that use @racket[class]
omitting @racket[interface-expr]s.
The @racket[id], and @racket[super] expressions have the same meaning as in
@racket[defclass].
@history[#:added "1.30"]}
@defform[(begin-for-doc form ...)]{ @defform[(begin-for-doc form ...)]{
Like to @racket[begin-for-syntax], but for documentation time instead Like to @racket[begin-for-syntax], but for documentation time instead

View File

@ -23,4 +23,4 @@
(define pkg-authors '(mflatt eli)) (define pkg-authors '(mflatt eli))
(define version "1.29") (define version "1.30")

View File

@ -37,7 +37,7 @@
%% Right brace \} Tilde \~} %% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e} \NeedsTeXFormat{LaTeX2e}
\ProvidesClass{acmart} \ProvidesClass{acmart}
[2018/08/12 v1.55 Typesetting articles for the Association for [2019/04/22 v1.60 Typesetting articles for the Association for
Computing Machinery] Computing Machinery]
\def\@classname{acmart} \def\@classname{acmart}
\InputIfFileExists{acmart-preload-hook.tex}{% \InputIfFileExists{acmart-preload-hook.tex}{%
@ -71,6 +71,14 @@ Computing Machinery]
\fi}{\PackageError{\@classname}{The option screen can be either true or \fi}{\PackageError{\@classname}{The option screen can be either true or
false}} false}}
\ExecuteOptionsX{screen=false} \ExecuteOptionsX{screen=false}
\define@boolkey+{acmart.cls}[@ACM@]{urlbreakonhyphens}[true]{%
\if@ACM@urlbreakonhyphens
\PackageInfo{\@classname}{Using breaking urls on hyphens}%
\else
\PackageInfo{\@classname}{Not breaking urls on hyphens}%
\fi}{\PackageError{\@classname}{The option urlbreakonhyphens can be either true or
false}}
\ExecuteOptionsX{urlbreakonhyphens=true}
\define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{% \define@boolkey+{acmart.cls}[@ACM@]{acmthm}[true]{%
\if@ACM@acmthm \if@ACM@acmthm
\PackageInfo{\@classname}{Requiring acmthm}% \PackageInfo{\@classname}{Requiring acmthm}%
@ -108,6 +116,10 @@ Computing Machinery]
\fi}{\PackageError{\@classname}{The option nonacm can be either true or \fi}{\PackageError{\@classname}{The option nonacm can be either true or
false}} false}}
\ExecuteOptionsX{nonacm=false} \ExecuteOptionsX{nonacm=false}
\define@boolkey+{acmart.cls}[@ACM@]{balance}[true]{}{%
\PackageError{\@classname}{The option balance can be either true or
false}}
\ExecuteOptionsX{balance}
\define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{% \define@boolkey+{acmart.cls}[@ACM@]{natbib}[true]{%
\if@ACM@natbib \if@ACM@natbib
\PackageInfo{\@classname}{Explicitly selecting natbib mode}% \PackageInfo{\@classname}{Explicitly selecting natbib mode}%
@ -153,6 +165,7 @@ Computing Machinery]
\ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr} \ClassInfo{\@classname}{Using format \ACM@format, number \ACM@format@nr}
\newif\if@ACM@manuscript \newif\if@ACM@manuscript
\newif\if@ACM@journal \newif\if@ACM@journal
\newif\if@ACM@journal@bibstrip
\newif\if@ACM@sigchiamode \newif\if@ACM@sigchiamode
\ifnum\ACM@format@nr=5\relax % siggraph \ifnum\ACM@format@nr=5\relax % siggraph
\ClassWarning{\@classname}{The format siggraph is now obsolete. \ClassWarning{\@classname}{The format siggraph is now obsolete.
@ -186,6 +199,11 @@ Computing Machinery]
\@ACM@journalfalse \@ACM@journalfalse
\@ACM@sigchiamodetrue \@ACM@sigchiamodetrue
\fi \fi
\if@ACM@journal
\@ACM@journal@bibstriptrue
\else
\@ACM@journal@bibstripfalse
\fi
\ifx\ACM@fontsize\@empty \ifx\ACM@fontsize\@empty
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
@ -212,6 +230,7 @@ Computing Machinery]
\LoadClass[\ACM@fontsize, reqno]{amsart} \LoadClass[\ACM@fontsize, reqno]{amsart}
\RequirePackage{microtype} \RequirePackage{microtype}
\RequirePackage{etoolbox} \RequirePackage{etoolbox}
\RequirePackage{booktabs}
\RequirePackage{refcount} \RequirePackage{refcount}
\RequirePackage{totpages} \RequirePackage{totpages}
\RequirePackage{environ} \RequirePackage{environ}
@ -452,6 +471,7 @@ Computing Machinery]
\let\@footnotetext@nolink\@footnotetext \let\@footnotetext@nolink\@footnotetext
\RequirePackage[bookmarksnumbered,unicode]{hyperref} \RequirePackage[bookmarksnumbered,unicode]{hyperref}
\pdfstringdefDisableCommands{% \pdfstringdefDisableCommands{%
\def\addtocounter#1#2{}%
\def\unskip{}% \def\unskip{}%
\def\textbullet{- }% \def\textbullet{- }%
\def\textrightarrow{ -> }% \def\textrightarrow{ -> }%
@ -472,16 +492,19 @@ Computing Machinery]
\urlstyle{sf} \urlstyle{sf}
\fi \fi
\AtEndPreamble{% \AtEndPreamble{%
\if@ACM@urlbreakonhyphens
\def\do@url@hyp{\do\-}%
\fi
\if@ACM@screen \if@ACM@screen
\hypersetup{colorlinks, \hypersetup{colorlinks,
linkcolor=ACMRed, linkcolor=ACMPurple,
citecolor=ACMPurple, citecolor=ACMPurple,
urlcolor=ACMDarkBlue, urlcolor=ACMDarkBlue,
filecolor=ACMDarkBlue} filecolor=ACMDarkBlue}
\else \else
\hypersetup{hidelinks} \hypersetup{hidelinks}
\fi \fi
\hypersetup{pdflang={English}, \hypersetup{pdflang={en},
pdfdisplaydoctitle}} pdfdisplaydoctitle}}
\if@ACM@natbib \if@ACM@natbib
\let\citeN\cite \let\citeN\cite
@ -628,6 +651,22 @@ Computing Machinery]
\expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}} \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
\def\@textbottom{\vskip \z@ \@plus 1pt} \def\@textbottom{\vskip \z@ \@plus 1pt}
\let\@texttop\relax \let\@texttop\relax
\ifcase\ACM@format@nr
\relax % manuscript
\or % acmsmall
\or % acmlarge
\or % acmtog
\flushbottom
\or % sigconf
\flushbottom
\or % siggraph
\flushbottom
\or % sigplan
\flushbottom
\or % sigchi
\flushbottom
\or % sigchi-a
\fi
\RequirePackage{iftex} \RequirePackage{iftex}
\ifPDFTeX \ifPDFTeX
\input{glyphtounicode} \input{glyphtounicode}
@ -656,6 +695,7 @@ Computing Machinery]
\RequirePackage[T1]{fontenc} \RequirePackage[T1]{fontenc}
\ifxetex \ifxetex
\RequirePackage[tt=false]{libertine} \RequirePackage[tt=false]{libertine}
\setmonofont{inconsolata}
\else \else
\RequirePackage[tt=false, type1=true]{libertine} \RequirePackage[tt=false, type1=true]{libertine}
\fi \fi
@ -668,6 +708,29 @@ Computing Machinery]
\if@ACM@sigchiamode \if@ACM@sigchiamode
\renewcommand{\familydefault}{\sfdefault} \renewcommand{\familydefault}{\sfdefault}
\fi \fi
\newif\if@Description@present
\@Description@presenttrue
\newif\if@undescribed@images
\@undescribed@imagesfalse
\newcommand\Description[2][]{\global\@Description@presenttrue\ignorespaces}
\AtEndDocument{\if@undescribed@images
\ClassWarningNoLine{\@classname}{Some images may lack descriptions}\fi}
\AtBeginEnvironment{figure}{\@Description@presentfalse
\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{figure*}{\@Description@presentfalse
\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtEndEnvironment{figure}{\if@Description@present\else
\global\@undescribed@imagestrue
\ClassWarning{\@classname}{A possible image without description}\fi}
\AtEndEnvironment{figure*}{\if@Description@present\else
\global\@undescribed@imagestrue
\ClassWarning{\@classname}{A possible image without description}\fi}
\AtBeginEnvironment{table}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\AtBeginEnvironment{table*}{\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig}
\RequirePackage{caption, float} \RequirePackage{caption, float}
\captionsetup[table]{position=top} \captionsetup[table]{position=top}
\if@ACM@journal \if@ACM@journal
@ -691,26 +754,41 @@ Computing Machinery]
\or % sigchi \or % sigchi
\captionsetup[figure]{labelfont={bf, small}, \captionsetup[figure]{labelfont={bf, small},
textfont={bf, small}} textfont={bf, small}}
\captionsetup[table]{labelfont={bf, small},
textfont={bf, small}}
\or % sigchi-a \or % sigchi-a
\captionsetup[figure]{labelfont={bf, small}, \captionsetup[figure]{labelfont={bf, small},
textfont={bf, small}} textfont={bf, small}}
\captionsetup[table]{labelfont={bf, small},
textfont={bf, small}}
\fi \fi
\fi \fi
\newfloat{sidebar}{}{sbar} \newfloat{sidebar}{}{sbar}
\floatname{sidebar}{Sidebar} \floatname{sidebar}{Sidebar}
\renewenvironment{sidebar}{\Collect@Body\@sidebar}{} \renewenvironment{sidebar}{\Collect@Body\@sidebar}{}
\long\def\@sidebar#1{\bgroup\captionsetup{type=sidebar}% \long\def\@sidebar#1{\bgroup\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig\captionsetup{type=sidebar}%
\marginpar{\small#1}\egroup} \marginpar{\small#1}\egroup}
\newenvironment{marginfigure}{\Collect@Body\@marginfigure}{} \newenvironment{marginfigure}{\Collect@Body\@marginfigure}{}
\long\def\@marginfigure#1{\bgroup\captionsetup{type=figure}% \long\def\@marginfigure#1{\bgroup
\marginpar{\centering\small#1}\egroup} \let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig
\captionsetup{type=figure}%
\marginpar{\@Description@presentfalse\centering
\small#1\if@Description@present\else
\global\@undescribed@imagestrue
\ClassWarning{\@classname}{A possible image without description}
\fi}%
\egroup}
\newenvironment{margintable}{\Collect@Body\@margintable}{} \newenvironment{margintable}{\Collect@Body\@margintable}{}
\long\def\@margintable#1{\bgroup\captionsetup{type=table}% \long\def\@margintable#1{\bgroup\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig\captionsetup{type=table}%
\marginpar{\centering\small#1}\egroup} \marginpar{\centering\small#1}\egroup}
\newdimen\fulltextwidth \newdimen\fulltextwidth
\fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep) \fulltextwidth=\dimexpr(\textwidth+\marginparwidth+\marginparsep)
\if@ACM@sigchiamode \if@ACM@sigchiamode
\def\@dblfloat{\bgroup\columnwidth=\fulltextwidth \def\@dblfloat{\bgroup\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig\columnwidth=\fulltextwidth
\let\@endfloatbox\@endwidefloatbox \let\@endfloatbox\@endwidefloatbox
\def\@fpsadddefault{\def\@fps{tp}}% \def\@fpsadddefault{\def\@fps{tp}}%
\@float} \@float}
@ -796,6 +874,7 @@ Computing Machinery]
CIE,% CIE,%
CSUR,% CSUR,%
DTRAP,% DTRAP,%
HEALTH,%
IMWUT,% IMWUT,%
JACM,% JACM,%
JDIQ,% JDIQ,%
@ -814,7 +893,7 @@ Computing Machinery]
TALLIP,% TALLIP,%
TAP,% TAP,%
TCPS,% TCPS,%
TDSCI,% TDS,%
TEAC,% TEAC,%
TECS,% TECS,%
THRI,% THRI,%
@ -863,6 +942,10 @@ Computing Machinery]
\def\@journalName{Digital Threats: Research and Practice}% \def\@journalName{Digital Threats: Research and Practice}%
\def\@journalNameShort{Digit. Threat. Res. Pract.}% \def\@journalNameShort{Digit. Threat. Res. Pract.}%
\def\@permissionCodeOne{2576-5337}% \def\@permissionCodeOne{2576-5337}%
\or % HEALTH
\def\@journalName{ACM Transactions on Computing for Healthcare}%
\def\@journalNameShort{ACM Trans. Comput. Healthcare}%
\def\@permissionCodeOne{2637-8051}%
\or % IMWUT \or % IMWUT
\def\@journalName{Proceedings of the ACM on Interactive, Mobile, \def\@journalName{Proceedings of the ACM on Interactive, Mobile,
Wearable and Ubiquitous Technologies}% Wearable and Ubiquitous Technologies}%
@ -940,7 +1023,7 @@ Computing Machinery]
\def\@journalName{ACM Transactions on Applied Perception}% \def\@journalName{ACM Transactions on Applied Perception}%
\or % TCPS \or % TCPS
\def\@journalName{ACM Transactions on Cyber-Physical Systems}% \def\@journalName{ACM Transactions on Cyber-Physical Systems}%
\or % TDSCI \or % TDS
\def\@journalName{ACM Transactions on Data Science}% \def\@journalName{ACM Transactions on Data Science}%
\def\@journalNameShort{ACM Trans. Data Sci.}% \def\@journalNameShort{ACM Trans. Data Sci.}%
\def\@permissionCodeOne{2577-3224}% \def\@permissionCodeOne{2577-3224}%
@ -1082,7 +1165,8 @@ Computing Machinery]
}{% }{%
\ClassError{\@classname}{Incorrect journal #1}% \ClassError{\@classname}{Incorrect journal #1}%
}% }%
\def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}} \def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}%
\global\@ACM@journal@bibstriptrue}
\def\@journalCode@nr{0} \def\@journalCode@nr{0}
\def\@journalName{}% \def\@journalName{}%
\def\@journalNameShort{\@journalName}% \def\@journalNameShort{\@journalName}%
@ -1095,9 +1179,13 @@ Computing Machinery]
\gdef\acmConference@venue{#4}% \gdef\acmConference@venue{#4}%
\ifx\acmConference@shortname\@empty \ifx\acmConference@shortname\@empty
\gdef\acmConference@shortname{#2}% \gdef\acmConference@shortname{#2}%
\fi} \fi
\global\@ACM@journal@bibstripfalse
}
\if@ACM@journal\else
\acmConference[Conference'17]{ACM Conference}{July 2017}{Washington, \acmConference[Conference'17]{ACM Conference}{July 2017}{Washington,
DC, USA} DC, USA}%
\fi
\def\acmBooktitle#1{\gdef\@acmBooktitle{#1}} \def\acmBooktitle#1{\gdef\@acmBooktitle{#1}}
\acmBooktitle{Proceedings of \acmConference@name \acmBooktitle{Proceedings of \acmConference@name
\ifx\acmConference@name\acmConference@shortname\else \ifx\acmConference@name\acmConference@shortname\else
@ -1119,6 +1207,8 @@ Computing Machinery]
\newif\if@insideauthorgroup \newif\if@insideauthorgroup
\@insideauthorgroupfalse \@insideauthorgroupfalse
\renewcommand\author[2][]{% \renewcommand\author[2][]{%
\IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several
authors in the same \string\author\space macro!}}{}%
\global\advance\num@authors by 1\relax \global\advance\num@authors by 1\relax
\if@insideauthorgroup\else \if@insideauthorgroup\else
\global\advance\num@authorgroups by 1\relax \global\advance\num@authorgroups by 1\relax
@ -1182,6 +1272,8 @@ Computing Machinery]
\let\country\position \let\country\position
Also with #1\unskip.\egroup} Also with #1\unskip.\egroup}
\renewcommand{\email}[2][]{% \renewcommand{\email}[2][]{%
\IfSubStr{#2}{,}{\ClassWarning{\@classname}{Do not put several
addresses in the same \string\email\space macro!}}{}%
\if@ACM@anonymous\else \if@ACM@anonymous\else
\g@addto@macro\addresses{\email{#1}{#2}}% \g@addto@macro\addresses{\email{#1}{#2}}%
\fi} \fi}
@ -1327,10 +1419,12 @@ Computing Machinery]
\RequirePackage{comment} \RequirePackage{comment}
\excludecomment{CCSXML} \excludecomment{CCSXML}
\let\@concepts\@empty \let\@concepts\@empty
\newcounter{@concepts}
\newcommand\ccsdesc[2][100]{% \newcommand\ccsdesc[2][100]{%
\ccsdesc@parse#1~#2~~\ccsdesc@parse@end} \ccsdesc@parse#1~#2~~\ccsdesc@parse@end}
\RequirePackage{textcomp} \RequirePackage{textcomp}
\def\ccsdesc@parse#1~#2~#3~{% \def\ccsdesc@parse#1~#2~#3~{%
\stepcounter{@concepts}%
\expandafter\ifx\csname CCS@General@#2\endcsname\relax \expandafter\ifx\csname CCS@General@#2\endcsname\relax
\expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\ \expandafter\gdef\csname CCS@General@#2\endcsname{\textbullet\
\textbf{#2}}% \textbf{#2}}%
@ -1344,9 +1438,10 @@ Computing Machinery]
\expandafter\gdef\csname CCS@Punctuation@#2\endcsname{ \expandafter\gdef\csname CCS@Punctuation@#2\endcsname{
\textrightarrow\ }% \textrightarrow\ }%
\expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{% \expandafter\g@addto@macro\expandafter{\csname CCS@Specific@#2\endcsname}{%
\ifnum#1>499\textbf{#3}; \else \addtocounter{@concepts}{-1}%
\ifnum#1>299\textit{#3}; \else \ifnum#1>499\textbf{#3}\else
#3; \fi\fi}% \ifnum#1>299\textit{#3}\else
#3\fi\fi\ifnum\value{@concepts}=0.\else; \fi}%
\fi \fi
\ccsdesc@parse@finish} \ccsdesc@parse@finish}
\def\ccsdesc@parse@finish#1\ccsdesc@parse@end{} \def\ccsdesc@parse@finish#1\ccsdesc@parse@end{}
@ -1591,12 +1686,11 @@ Computing Machinery]
\ifnum\num@authorgroups=0\author{}\fi \ifnum\num@authorgroups=0\author{}\fi
\fi \fi
\begingroup \begingroup
\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig
\let\@footnotemark\@footnotemark@nolink \let\@footnotemark\@footnotemark@nolink
\let\@footnotetext\@footnotetext@nolink \let\@footnotetext\@footnotetext@nolink
\renewcommand\thefootnote{\@fnsymbol\c@footnote}% \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
\global\@topnum\z@ % this prevents floats from falling
% at the top of page 1
\global\@botnum\z@ % we do not want them to be on the bottom either
\hsize=\textwidth \hsize=\textwidth
\def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}% \def\@makefnmark{\hbox{\@textsuperscript{\@thefnmark}}}%
\@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers \@mktitle\if@ACM@sigchiamode\else\@mkauthors\fi\@mkteasers
@ -1616,7 +1710,7 @@ Computing Machinery]
\fi \fi
\ifx\@empty\@authorsaddresses\else \ifx\@empty\@authorsaddresses\else
\if@ACM@anonymous\else \if@ACM@anonymous\else
\if@ACM@journal \if@ACM@journal@bibstrip
\footnotetextauthorsaddresses{% \footnotetextauthorsaddresses{%
\def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}% \def\par{\let\par\@par}\parindent\z@\@setauthorsaddresses}%
\fi \fi
@ -1633,7 +1727,7 @@ Computing Machinery]
\if@printpermission\@copyrightpermission\par\fi \if@printpermission\@copyrightpermission\par\fi
\fi \fi
\if@ACM@manuscript\else \if@ACM@manuscript\else
\if@ACM@journal\else % Print the conference information \if@ACM@journal@bibstrip\else % Print the conference information
{\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par {\itshape \acmConference@shortname, \acmConference@date, \acmConference@venue}\par
\fi \fi
\fi \fi
@ -1649,7 +1743,7 @@ Computing Machinery]
This is the author's version of the work. It is posted here for This is the author's version of the work. It is posted here for
your personal use. Not for redistribution. The definitive Version your personal use. Not for redistribution. The definitive Version
of Record was published in of Record was published in
\if@ACM@journal \if@ACM@journal@bibstrip
\emph{\@journalName}% \emph{\@journalName}%
\else \else
\emph{\@acmBooktitle}% \emph{\@acmBooktitle}%
@ -1661,7 +1755,7 @@ Computing Machinery]
\fi\\ \fi\\
\else \else
\if@ACM@nonacm\else \if@ACM@nonacm\else
\if@ACM@journal \if@ACM@journal@bibstrip
\@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle \@permissionCodeOne/\@acmYear/\@acmMonth-ART\@acmArticle
\ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\ \ifx\@acmPrice\@empty\else\ \$\@acmPrice\fi\\
\@formatdoi{\@acmDOI}% \@formatdoi{\@acmDOI}%
@ -1707,6 +1801,9 @@ Computing Machinery]
\csname ver@acmart.cls\endcsname\space \csname ver@acmart.cls\endcsname\space
and hyperref and hyperref
\csname ver@hyperref.sty\endcsname}}% \csname ver@hyperref.sty\endcsname}}%
\global\@topnum\z@ % this prevents floats from falling
% at the top of page 1
\global\@botnum\z@ % we do not want them to be on the bottom either
\@printendtopmatter \@printendtopmatter
\@afterindentfalse \@afterindentfalse
\@afterheading \@afterheading
@ -2056,9 +2153,11 @@ Computing Machinery]
\fi \fi
\gdef\and{}}% \gdef\and{}}%
\def\email##1##2{\ifx\@currentaffiliation\@empty \def\email##1##2{\ifx\@currentaffiliation\@empty
\gdef\@currentaffiliation{\nolinkurl{##2}}% \gdef\@currentaffiliation{\bgroup
\mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
\else \else
\g@addto@macro\@currentaffiliation{\par\nolinkurl{##2}}% \g@addto@macro\@currentaffiliation{\par\bgroup
\mathchardef\UrlBreakPenalty=10000\nolinkurl{##2}\egroup}%
\fi}% \fi}%
\def\affiliation##1##2{\ifx\@currentaffiliation\@empty \def\affiliation##1##2{\ifx\@currentaffiliation\@empty
\gdef\@currentaffiliation{% \gdef\@currentaffiliation{%
@ -2144,7 +2243,12 @@ Computing Machinery]
\def\@teaser##1{\par\bigskip\bgroup \def\@teaser##1{\par\bigskip\bgroup
\captionsetup{type=figure}##1\egroup\par} \captionsetup{type=figure}##1\egroup\par}
\global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par \global\setbox\mktitle@bx=\vbox{\noindent\box\mktitle@bx\par
\noindent\@teaserfigures\par\medskip}% \noindent\@Description@presentfalse
\@teaserfigures\par\if@Description@present\else
\global\@undescribed@imagestrue
\ClassWarning{\@classname}{A possible image without
description}\fi
\medskip}%
\fi} \fi}
\def\@mkabstract{\bgroup \def\@mkabstract{\bgroup
\ifx\@abstract\@lempty\else \ifx\@abstract\@lempty\else
@ -2152,11 +2256,13 @@ Computing Machinery]
\if@ACM@journal \if@ACM@journal
\everypar{\setbox\z@\lastbox\everypar{}}\small \everypar{\setbox\z@\lastbox\everypar{}}\small
\else \else
\section*{Abstract}% \section*{\abstractname}%
\fi \fi
\ignorespaces\@abstract\par}% \ignorespaces\@abstract\par}%
\fi\egroup} \fi\egroup}
\def\@mkbibcitation{\bgroup \def\@mkbibcitation{\bgroup
\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig
\def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}% \def\@pages@word{\ifnum\getrefnumber{TotPages}=1\relax page\else pages\fi}%
\def\footnotemark{}% \def\footnotemark{}%
\def\\{\unskip{} \ignorespaces}% \def\\{\unskip{} \ignorespaces}%
@ -2174,7 +2280,7 @@ Computing Machinery]
% and the present \@mkbibcitation definition is never used % and the present \@mkbibcitation definition is never used
% in this case. The conditional remains useful if the user % in this case. The conditional remains useful if the user
% explicitly sets \settopmatter{printacmref=true}. % explicitly sets \settopmatter{printacmref=true}.
\if@ACM@journal \if@ACM@journal@bibstrip
\textit{\@journalNameShort} \textit{\@journalNameShort}
\@acmVolume, \@acmNumber \@article@string (\@acmPubDate), \@acmVolume, \@acmNumber \@article@string (\@acmPubDate),
\ref{TotPages}~\@pages@word. \ref{TotPages}~\@pages@word.
@ -2189,10 +2295,22 @@ Computing Machinery]
\fi \fi
\ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi \ifx\@acmDOI\@empty\else\@formatdoi{\@acmDOI}\fi
\par\egroup} \par\egroup}
\def\@printendtopmatter{\par\bigskip} \def\@printendtopmatter{\bgroup
\let\@vspace\@vspace@orig
\let\@vspacer\@vspacer@orig
\par\bigskip
\egroup}
\def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses} \def\@setthanks{\long\def\thanks##1{\par##1\@addpunct.}\thankses}
\def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.} \def\@setauthorsaddresses{\@authorsaddresses\unskip\@addpunct.}
\RequirePackage{fancyhdr} \RequirePackage{fancyhdr}
\let\ACM@ps@plain\ps@plain
\let\ACM@ps@myheadings\ps@myheadings
\let\ACM@ps@headings\ps@headings
\def\ACM@restore@pagestyle{%
\let\ps@plain\ACM@ps@plain
\let\ps@myheadings\ACM@ps@myheadings
\let\ps@headings\ACM@ps@headings}
\AtBeginDocument{\ACM@restore@pagestyle}
\if@ACM@review \if@ACM@review
\newsavebox{\ACM@linecount@bx} \newsavebox{\ACM@linecount@bx}
\newlength\ACM@linecount@bxht \newlength\ACM@linecount@bxht
@ -2244,7 +2362,8 @@ Computing Machinery]
Anon. Anon.
\ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi \ifx\@acmSubmissionID\@empty\else Submission Id: \@acmSubmissionID\fi
\else\shortauthors\fi} \else\shortauthors\fi}
\def\@headfootfont{\sffamily} \def\@headfootfont{\sffamily\footnotesize}
\AtBeginDocument{%
\fancypagestyle{standardpagestyle}{% \fancypagestyle{standardpagestyle}{%
\fancyhf{}% \fancyhf{}%
\renewcommand{\headrulewidth}{\z@}% \renewcommand{\headrulewidth}{\z@}%
@ -2255,7 +2374,8 @@ Computing Machinery]
\else% \else%
\@acmArticle\if@ACM@printfolios:\thepage\fi% \@acmArticle\if@ACM@printfolios:\thepage\fi%
\fi% \fi%
} }%
\if@ACM@journal@bibstrip
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}% \fancyhead[LE]{\ACM@linecountL\if@ACM@printfolios\thepage\fi}%
@ -2273,7 +2393,7 @@ Computing Machinery]
\if@ACM@nonacm\else% \if@ACM@nonacm\else%
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\fi% \fi
\or % acmlarge \or % acmlarge
\fancyhead[LE]{\ACM@linecountL\@headfootfont \fancyhead[LE]{\ACM@linecountL\@headfootfont
\@acmArticlePage\quad\textbullet\quad\@shortauthors}% \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
@ -2283,7 +2403,7 @@ Computing Machinery]
\if@ACM@nonacm\else% \if@ACM@nonacm\else%
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\fi% \fi
\or % acmtog \or % acmtog
\fancyhead[LE]{\ACM@linecountL\@headfootfont \fancyhead[LE]{\ACM@linecountL\@headfootfont
\@acmArticlePage\quad\textbullet\quad\@shortauthors}% \@acmArticlePage\quad\textbullet\quad\@shortauthors}%
@ -2294,17 +2414,32 @@ Computing Machinery]
\if@ACM@nonacm\else% \if@ACM@nonacm\else%
\fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No. \fancyfoot[RO,LE]{\footnotesize \@journalNameShort, Vol. \@acmVolume, No.
\@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}% \@acmNumber, Article \@acmArticle. Publication date: \@acmPubDate.}%
\fi% \fi
\else % Proceedings \else % Proceedings
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}% \fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
\fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}% \fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
\if@ACM@nonacm\else% \if@ACM@nonacm\else%
\fancyhead[LE]{\ACM@linecountL\@headfootfont\acmConference@shortname, \fancyhead[LE]{\ACM@linecountL\@headfootfont\footnotesize
\acmConference@shortname,
\acmConference@date, \acmConference@venue}% \acmConference@date, \acmConference@venue}%
\fancyhead[RO]{\@headfootfont\acmConference@shortname, \fancyhead[RO]{\@headfootfont
\acmConference@shortname,
\acmConference@date, \acmConference@venue\ACM@linecountR}% \acmConference@date, \acmConference@venue\ACM@linecountR}%
\fi% \fi
\fi
\else % Proceedings
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fancyhead[LO]{\ACM@linecountL\@headfootfont\shorttitle}%
\fancyhead[RE]{\@headfootfont\@shortauthors\ACM@linecountR}%
\if@ACM@nonacm\else%
\fancyhead[LE]{\ACM@linecountL\@headfootfont
\acmConference@shortname,
\acmConference@date, \acmConference@venue}%
\fancyhead[RO]{\@headfootfont
\acmConference@shortname,
\acmConference@date, \acmConference@venue\ACM@linecountR}%
\fi
\fi \fi
\if@ACM@sigchiamode \if@ACM@sigchiamode
\fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}% \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
@ -2312,8 +2447,9 @@ Computing Machinery]
\if@ACM@timestamp \if@ACM@timestamp
\fancyfoot[LO,RE]{\ACM@timestamp} \fancyfoot[LO,RE]{\ACM@timestamp}
\fi \fi
} }%
\pagestyle{standardpagestyle} \pagestyle{standardpagestyle}
}
\newdimen\@folio@wd \newdimen\@folio@wd
\@folio@wd=\z@ \@folio@wd=\z@
\newdimen\@folio@ht \newdimen\@folio@ht
@ -2354,10 +2490,12 @@ Computing Machinery]
\textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}} \textcolor{white}{\LARGE\sffamily\bfseries\@acmArticle}}}}
\end{picture}\fi} \end{picture}\fi}
\AtBeginDocument{%
\fancypagestyle{firstpagestyle}{% \fancypagestyle{firstpagestyle}{%
\fancyhf{}% \fancyhf{}%
\renewcommand{\headrulewidth}{\z@}% \renewcommand{\headrulewidth}{\z@}%
\renewcommand{\footrulewidth}{\z@}% \renewcommand{\footrulewidth}{\z@}%
\if@ACM@journal@bibstrip
\ifcase\ACM@format@nr \ifcase\ACM@format@nr
\relax % manuscript \relax % manuscript
\fancyhead[L]{\ACM@linecountL}% \fancyhead[L]{\ACM@linecountL}%
@ -2398,6 +2536,11 @@ Computing Machinery]
\fancyhead[R]{\ACM@linecountR}% \fancyhead[R]{\ACM@linecountR}%
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}% \fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fi \fi
\else
\fancyhead[L]{\ACM@linecountL}%
\fancyhead[R]{\ACM@linecountR}%
\fancyfoot[C]{\if@ACM@printfolios\footnotesize\thepage\fi}%
\fi
\if@ACM@timestamp \if@ACM@timestamp
\ifnum\ACM@format@nr=0\relax % Manuscript \ifnum\ACM@format@nr=0\relax % Manuscript
\fancyfoot[LO,RE]{\ACM@timestamp\quad \fancyfoot[LO,RE]{\ACM@timestamp\quad
@ -2408,15 +2551,7 @@ Computing Machinery]
\fancyfoot[LO,RE]{\ACM@timestamp} \fancyfoot[LO,RE]{\ACM@timestamp}
\fi \fi
\fi \fi
} }}
\let\ACM@ps@plain\ps@plain
\let\ACM@ps@myheadings\ps@myheadings
\let\ACM@ps@headings\ps@headings
\def\ACM@restore@pagestyle{%
\let\ps@plain\ACM@ps@plain
\let\ps@myheadings\ACM@ps@myheadings
\let\ps@headings\ACM@ps@headings}
\AtBeginDocument{\ACM@restore@pagestyle}
\def\ACM@NRadjust#1{% \def\ACM@NRadjust#1{%
\begingroup \begingroup
\expandafter\ifx\csname Sectionformat\endcsname\relax \expandafter\ifx\csname Sectionformat\endcsname\relax
@ -2634,10 +2769,40 @@ Computing Machinery]
}{% }{%
\popQED\endtrivlist\@endpefalse \popQED\endtrivlist\@endpefalse
} }
\AtEndPreamble{%
\if@ACM@balance
\ifcase\ACM@format@nr
\relax % manuscript
\global\@ACM@balancefalse
\or % acmsmall
\global\@ACM@balancefalse
\or % acmlarge
\global\@ACM@balancefalse
\or % acmtog
\RequirePackage{balance}%
\or % sigconf
\RequirePackage{balance}%
\or % siggraph
\RequirePackage{balance}%
\or % sigplan
\RequirePackage{balance}%
\or % sigchi
\RequirePackage{balance}%
\or % sigchi-a
\global\@ACM@balancefalse
\fi
\fi
}
\AtEndDocument{%
\if@ACM@balance
\if@twocolumn
\balance
\fi\fi}
\newcommand\acksname{Acknowledgments}
\specialcomment{acks}{% \specialcomment{acks}{%
\begingroup \begingroup
\section*{Acknowledgments} \section*{\acksname}
\phantomsection\addcontentsline{toc}{section}{Acknowledgments} \phantomsection\addcontentsline{toc}{section}{\acksname}
}{% }{%
\endgroup \endgroup
} }
@ -2665,6 +2830,19 @@ Computing Machinery]
\ifx\@tempa\@tempb \ifx\@tempa\@tempb
arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2% arXiv:\href{http://arxiv.org/abs/#2}{#2}\else arXiv:#2%
\fi} \fi}
\let\@vspace@orig=\@vspace
\let\@vspacer@orig=\@vspacer
\apptocmd{\@vspace}{\ClassWarning{\@classname}{\string\vspace\space should
only be used to provide space above/below surrounding
objects}}{}{}
\apptocmd{\@vspacer}{\ClassWarning{\@classname}{\string\vspace\space should
only be used to provide space above/below surrounding
objects}}{}{}
\let\ACM@origbaselinestretch\baselinestretch
\AtEndDocument{\ifx\baselinestretch\ACM@origbaselinestretch\else
\ClassError{\@classname}{An attempt to redefine
\string\baselinestretch\space detected. Please do not do this for
ACM submissions!}\fi}
\normalsize\normalfont\frenchspacing \normalsize\normalfont\frenchspacing
\endinput \endinput
%% %%

View File

@ -40,7 +40,7 @@
(case n [(1) "("] [(0) ""] [(2) "(("] [else (make-string n #\()]))) (case n [(1) "("] [(0) ""] [(2) "(("] [else (make-string n #\()])))
(define (make-closers n) (define (make-closers n)
(racketparenfont (racketparenfont
(case n [(1) ")"] [(0) ""] [(2) "))"] [else (make-string n #\()]))) (case n [(1) ")"] [(0) ""] [(2) "))"] [else (make-string n #\))])))
(define-syntax (arg-contract stx) (define-syntax (arg-contract stx)
(syntax-case stx (... ...+ _...superclass-args...) (syntax-case stx (... ...+ _...superclass-args...)
@ -207,13 +207,13 @@
(list (result-value value.value) ...)))))])) (list (result-value value.value) ...)))))]))
(define-struct arg (define-struct arg
(special? kw id optional? starts-optional? ends-optional? num-closers)) (special? kw id optional? starts-optional? ends-optional? depth))
(define (*defproc kind link? mode within-id (define (*defproc kind link? mode within-id
stx-ids sym prototypes arg-contractss arg-valss result-contracts content-thunk stx-ids sym prototypes arg-contractss arg-valss result-contracts content-thunk
[result-values (map (lambda (x) #f) result-contracts)]) [result-values (map (lambda (x) #f) result-contracts)])
(define max-proto-width (current-display-width)) (define max-proto-width (current-display-width))
(define ((arg->elem show-opt-start?) arg) (define ((arg->elem show-opt-start?) arg next-depth)
(let* ([e (cond [(not (arg-special? arg)) (let* ([e (cond [(not (arg-special? arg))
(if (arg-kw arg) (if (arg-kw arg)
(if (eq? mode 'new) (if (eq? mode 'new)
@ -235,10 +235,11 @@
[e (if (arg-ends-optional? arg) [e (if (arg-ends-optional? arg)
(make-element #f (list e "]")) (make-element #f (list e "]"))
e)] e)]
[e (if (zero? (arg-num-closers arg)) [num-closers (- (arg-depth arg) next-depth)]
[e (if (zero? num-closers)
e e
(make-element (make-element
#f (list e (make-closers (arg-num-closers arg)))))]) #f (list e (make-closers num-closers))))])
(if (and show-opt-start? (arg-starts-optional? arg)) (if (and show-opt-start? (arg-starts-optional? arg))
(make-element #f (list "[" e)) (make-element #f (list "[" e))
e))) e)))
@ -258,21 +259,23 @@
(not next-optional?) (not next-optional?)
(not next-special-dots?))) (not next-special-dots?)))
depth))) depth)))
(let loop ([p p] [last-depth 0]) (let loop ([p p] [depth 0])
(append (define head
(if (symbol? (car p)) (if (symbol? (car p))
null null
(loop (car p) (add1 last-depth))) (loop (car p) (add1 depth))))
(let loop ([p (cdr p)][in-optional? #f]) (append
head
(let loop ([p (cdr p)] [in-optional? #f])
(cond (cond
[(null? p) null] [(null? p) null]
[(null? (cdr p)) [(null? (cdr p))
(list (parse-arg (car p) in-optional? last-depth #f #f))] (list (parse-arg (car p) in-optional? depth #f #f))]
[else [else
(let ([a (parse-arg (let ([a (parse-arg
(car p) (car p)
in-optional? in-optional?
0 depth
(let ([v (cadr p)]) (let ([v (cadr p)])
(and (pair? v) (and (pair? v)
(not (not
@ -282,6 +285,10 @@
(cons a (loop (cdr p) (cons a (loop (cdr p)
(and (arg-optional? a) (and (arg-optional? a)
(not (arg-ends-optional? a))))))]))))) (not (arg-ends-optional? a))))))])))))
(define (next-args-depth args)
(if (null? args)
0
(arg-depth (car args))))
(define (prototype-size args first-combine next-combine special-combine?) (define (prototype-size args first-combine next-combine special-combine?)
(let loop ([s args] [combine first-combine]) (let loop ([s args] [combine first-combine])
(if (null? s) (if (null? s)
@ -289,7 +296,7 @@
(combine (combine
(loop (cdr s) next-combine) (loop (cdr s) next-combine)
(let ([a (car s)]) (let ([a (car s)])
(+ (arg-num-closers a) (+ (- (arg-depth a) (next-args-depth (cdr s)))
(if (arg-special? a) (if (arg-special? a)
(string-length (symbol->string (arg-id a))) (string-length (symbol->string (arg-id a)))
(+ (if (arg-kw a) (+ (if (arg-kw a)
@ -468,11 +475,19 @@
#f #f
`(,(make-openers (add1 p-depth)) `(,(make-openers (add1 p-depth))
,tagged ,tagged
,(let ([num-closers (- p-depth (next-args-depth args))])
(if (zero? num-closers)
'()
(make-closers num-closers)))
,@(if (null? args) ,@(if (null? args)
(list (make-closers p-depth)) (list (make-closers p-depth))
(append-map (lambda (arg) (let loop ([args args])
(list spacer ((arg->elem #t) arg))) (cond
args)) [(null? args) null]
[else
(append
(list spacer ((arg->elem #t) (car args) (next-args-depth (cdr args))))
(loop (cdr args)))])))
,(racketparenfont ")")))) ,(racketparenfont ")"))))
(if result-next-line? null end)))) (if result-next-line? null end))))
;; The multi-line case: ;; The multi-line case:
@ -498,7 +513,7 @@
(if (arg-starts-optional? (car args)) (if (arg-starts-optional? (car args))
(to-flow (make-element #f (list spacer "["))) (to-flow (make-element #f (list spacer "[")))
flow-spacer) flow-spacer)
(to-flow ((arg->elem #f) (car args))) (to-flow ((arg->elem #f) (car args) (next-args-depth (cdr args))))
not-end) not-end)
(list* 'cont 'cont not-end))) (list* 'cont 'cont not-end)))
(let loop ([args (if one-ok? (cdr args) args)]) (let loop ([args (if one-ok? (cdr args) args)])
@ -517,12 +532,13 @@
(if (arg-starts-optional? (car args)) (if (arg-starts-optional? (car args))
(to-flow (make-element #f (list spacer "["))) (to-flow (make-element #f (list spacer "[")))
flow-spacer) flow-spacer)
(let ([a ((arg->elem #f) (car args))] (let ([a ((arg->elem #f) (car args) (next-args-depth (cdr args)))]
[next (if dots-next? [next (if dots-next?
(make-element (make-element
#f (list spacer #f (list spacer
((arg->elem #f) ((arg->elem #f)
(cadr args)))) (cadr args)
(next-args-depth (cddr args)))))
"")]) "")])
(to-flow (to-flow
(cond (cond

View File

@ -1,5 +1,6 @@
#lang racket/base #lang racket/base
(require racket/contract/base (require racket/contract/base
racket/class
(for-syntax racket/base (for-syntax racket/base
racket/require-transform racket/require-transform
racket/provide-transform racket/provide-transform
@ -16,6 +17,8 @@
struct-doc struct-doc
struct*-doc struct*-doc
form-doc form-doc
class*-doc
class-doc
generate-delayed-documents generate-delayed-documents
begin-for-doc) begin-for-doc)
@ -577,7 +580,7 @@
[(_ id contract desc) [(_ id contract desc)
(begin (begin
(unless (identifier? #'id) (unless (identifier? #'id)
(raise-syntax-error 'parameter/doc (raise-syntax-error 'thing-doc
"expected an identifier" "expected an identifier"
stx stx
#'id)) #'id))
@ -662,6 +665,48 @@
#'((only-in scribble/manual defform)) #'((only-in scribble/manual defform))
#'id))]))) #'id))])))
(define-provide/doc-transformer class*-doc
(lambda (stx)
(syntax-case stx ()
[(_ id super (intf-id ...) pre-flow)
(begin
(unless (identifier? #'id)
(raise-syntax-error 'class*-doc
"expected an identifier"
stx
#'id))
(unless (identifier? #'super)
(raise-syntax-error 'class*-doc
"expected super class identifier"
stx
#'id))
(values
#'[id class?]
#'(defclass id super (intf-id ...) . pre-flow)
#'((only-in scribble/manual defclass defconstructor defmethod this-obj))
#'id))])))
(define-provide/doc-transformer class-doc
(lambda (stx)
(syntax-case stx ()
[(_ id super pre-flow)
(begin
(unless (identifier? #'id)
(raise-syntax-error 'class-doc
"expected an identifier"
stx
#'id))
(unless (identifier? #'super)
(raise-syntax-error 'class-doc
"expected super class identifier"
stx
#'id))
(values
#'[id class?]
#'(defclass id super () . pre-flow)
#'((only-in scribble/manual defclass defconstructor defmethod this-obj))
#'id))])))
(define-syntax (generate-delayed-documents stx) (define-syntax (generate-delayed-documents stx)
(syntax-case stx () (syntax-case stx ()
[(_) [(_)