The following is late arrival into TeX4ht, inserted for handling \newtheorem, and possibly other structures. It might cause duplicated anchors. At least in the case of figures and lists they are overided by other anchors, and hence not needed. In case of lists and new theorems we ended to delete the overriden case. Still need to do it for pictures, and amybe also other cases.
The \refstepcounter may appear in places (e.g., before first item of a list) where no text is allowed, hence we have to ensure that \anc:lbl will not break this restriction. How about within pictures?
<..cross ref..>+
\append:defI\refstepcounter{%
<.def :currentlabel for refstepcounter.>%
\anc:lbl r{#1}}
\def\anc:lbl#1#2{%
\html:addr \edef\cur:th{<.haddr prefix.>\last:haddr #1}%
\ifx \EndPicture\:UnDef
{\let\leavevmode=\empty \cur:lbl{#2}%
\Make:Label{\cur:th\:currentlabel}{}}%
\else \ifx \label\@gobble \else \cur:lbl{#2}%
\edef\:temp{\noexpand\AfterPicture{%
\noexpand\Make:Label{\cur:th\:currentlabel}{}}}\:temp
\fi \fi}
\let\onc:lbl=\anc:lbl
\def\SkipRefstepAnchor{\def\anc:lbl##1##2{\html:addr
\edef\cur:th{<.haddr prefix.>\last:haddr}\ShowRefstepAnchor
\let\skip:anchor=\cur:th}}
\def\ShowRefstepAnchor{\let\anc:lbl=\onc:lbl}
<.replace AutoRefstepAnchor.>
\html:addr \edef\cur:th{<.haddr prefix.>\last:haddr}
-_-_-
We can’t use ref- below, because
The MakeLabel removes duplicates such as in
For memory conservation, a maximum is placed on the number of labels recorded.
<..cross ref..>+
\def\Make:Label#1#2{%
\def\:tempb##1<.par del.>{%
\xdef\Made:Labels{{#1}\Made:Labels}%
\set:label{\hbox{\Link{}{#1}#2\EndLink}}%
\trim:Labels
}%
\def\:tempc##1<.par del.>{\hbox{#2}}%
\let\:next=\check:labels \edef\:tempa{#1}%
\expandafter\:next\Made:Labels{}<.par del.>%
}
\let\set:label=\empty
-_-_-
<..cross ref..>+
\let\Made:Labels=\empty
\def\check:labels#1{%
\def\:temp{#1}\ifx\:temp\empty \let\:next=\:tempb
\else\ifx \:temp\:tempa \let\:next=\:tempc
\fi \fi
\:next }
-_-_-
<..cross ref..>+
\HAssign\Labels:Cnt = 0
\def\trim:Labels{%
\ifnum \Labels:Cnt>100
\def\:tempa##1<.par del.>{}%
\gHAssign\Labels:Cnt = 0
\let\:tempb\Made:Labels
\let\Made:Labels\empty
\expandafter\keep:Labels\:tempb<.par del.>%
\else \gHAdvance\Labels:Cnt by 1 \fi
}
\def\keep:Labels#1{\relax
\ifnum \Labels:Cnt<50
\xdef\Made:Labels{\Made:Labels{#1}}\gHAdvance\Labels:Cnt by 1
\expandafter\keep:Labels
\else \expandafter\:tempa \fi }
-_-_-
We need the \hbox above because \label complains if vertical mode is replaced with horizontal mode.
‘ \let\Link:Labe|=\Make:Label \def\Tag:Label#1#2{\Tag{fR\label:Count}{#1}#2\GetLabel} \def\LinkLabels{\let\Make:Label|=\Link:Label} \def\SendLabels{\let\Make:Label|=\Tag:Label}’