6.7 nameref

<..nameref.4ht..>
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % nameref.4ht                           2014-07-12-22:36 %
 % Copyright (C) 2005--2009       Eitan M. Gurari         %
 <.TeX4ht copyright.>
    <.nameref v.2 configurations.>
 \Hinput{nameref}
 \endinput
 -_-_-

<..nameref configurations..>
 \let\ltx@label\label
 -_-_-

Bug #130: Optional argument of a sectional unit does not appear as the title when \nameref command is used in a document. The problem was \NR:Title expands to the real heading of the sectional unit. It has been fixed now.

<..nameref v.1 configurations..>
 \def\prf:label{{\ifx \NR:Title\:UnDef \else \NR:Title\fi}%
                {\ifx \NR:Type\:UnDef \else \NR:Type .1\fi}{}}%
 \let\NR:StartSec\:StartSec
 \let\NR:no@sect\no@sect
 \def\no@sect#1#2#3#4#5#6[#7]#8{\gdef\NR:Title{\a:newlabel{#7}}%
      \NR:no@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}}
 \def\:StartSec#1#2#3{%
    \gdef\NR:Title{\a:newlabel{#3}}%
    \gdef\NR:Type{#1}%
    \gdef\@currentlabelname{#3}%
    \NR:StartSec{#1}{#2}{#3}%
 }
 \pend:defI\begin{\PushMacro\NR:Type \PushMacro\NR:Title}
 \pend:defI\end{%
    \PopMacro\NR:Type \PopMacro\NR:Title
    \global\let\NR:Type\NR:Type
    \global\let\NR:Title\NR:Title
 }
 -_-_-

<..nameref v.1 configurations..>+
 \def\:tempc#1#2#3#4#5#6[#7]#8{%
    \gdef\NR:Title{\a:newlabel{#7}}%
    \gdef\NR:Type{#1}%
    \o:NR@sect:{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}}
 \HLet\NR@sect\:tempc
 
 \def\:tempc#1#2#3#4#5{%
    \gdef\NR:Title{\a:newlabel\ssect:ttl}%
    \gdef\NR:Type{#1}%
    \o:NR@ssect:{#1}{#2}{#3}{#4}{#5}%
    \def\@currentlabelname{\ssect:ttl}}
 \HLet\NR@ssect\:tempc
 
 \def\:tempc[#1]#2{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \o:no@part:[{#1}]{#2}}
 \HLet\no@part\:tempc
 
 \def\:tempc#1{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \o:no@spart:{#1}}
 \HLet\no@spart\:tempc
 
 \def\:tempc[#1]#2{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \o:NR@chapter:[#1]{#2}}
 \HLet\NR@chapter\:tempc
 
 \def\:tempc#1{%
    \gdef\NR:Title{\a:newlabel\sch:ttl}%
    \o:NR@schapter:{#1}%
    \def\@currentlabelname{\sch:ttl}}
 \HLet\NR@schapter\:tempc
 
 % \long\def\:tempc#1[#2]{%
 %    \gdef\NR:Type{#1}%
 %    \gdef\NR:Title{\a:newlabel{#2}}%
 %   \gdef\@currentlabelname{#2}%
 %   \o:NR@@caption:{#1}[{#2}]%
 % }
 % \HLet\NR@@caption\:tempc
 
 \let\NR@@caption\@caption
 
 \long\def\@caption#1[#2]{%
       \NR@gettitle{#2}%
       \NR@@caption{#1}[{#2}]}%
 
 \AtBeginDocument{%
   \@ifpackageloaded{listings}{%
       \def\:tempc#1{%
          \gdef\NR:Title{\a:newlabel{listing}}%
          \gdef\NR:Type{lstlisting}%
          \o:NROrg@lst@MakeCaption:{#1}%
          \gdef\@currentlabelname{listing}}
       \HLet\NROrg@lst@MakeCaption\:tempc
   }{}%
 }
 -_-_-

<..star ch title..>
 \gdef\sch:ttl{#1}%
 -_-_-

<..star sec title..>
 \gdef\ssect:ttl{##5}%
 -_-_-

<..nameref v.1 configurations..>+
 \let\T:ref=\::ref
 \def\::ref{\protect\T@ref}
 \def\T@ref#1{%
   \@safe@activestrue
   \let\::ref \T:ref
   \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
   \def\::ref{\protect\T@ref}%
   \@safe@activesfalse
 }
 -_-_-

<..nameref v.2 configurations..>
 \let\NR:Type\relax
 \let\ltx@label\label
 \def\prf:label{{\ifx \NR:Title\:UnDef \else \NR:Title\fi}%
                {\ifx \NR:Type\:UnDef \else \NR:Type .1\fi}{}}%
 \let\NR:StartSec\:StartSec
 \let\NR:no@sect\no@sect
 \def\no@sect#1#2#3#4#5#6[#7]#8{\gdef\NR:Title{\a:newlabel{#7}}%
     \gdef\NR:Type{#1}%
     \NR:no@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
 \def\:StartSec#1#2#3{%
    \gdef\NR:Title{\a:newlabel{#3}}%
    \gdef\NR:Type{#1}%
    \NR:StartSec{#1}{#2}{#3}%
 }
 
 \def\:tempc#1#2#3#4#5#6[#7]#8{%
    \gdef\NR:Title{\a:newlabel{#7}}%
    \gdef\NR:Type{#1}%
    \o:NR@sect:{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
 \HLet\NR@sect\:tempc
 
 \def\:tempc#1#2#3#4#5{%
    \gdef\NR:Title{\a:newlabel\ssect:ttl}%
    \gdef\NR:Type{#1}%
    \o:NR@ssect:{#1}{#2}{#3}{#4}{#5}%
 }
 \HLet\NR@ssect\:tempc
 
 \def\:tempc[#1]#2{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \gdef\NR:Type{part}%
    \o:no@part:[{#1}]{#2}}
 \HLet\no@part\:tempc
 
 \def\:tempc#1{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \gdef\NR:Type{part}%
    \o:no@spart:{#1}}
 \HLet\no@spart\:tempc
 
 \def\:tempc[#1]#2{%
    \gdef\NR:Title{\a:newlabel{#1}}%
    \gdef\NR:Type{chapter}%
    \o:NR@chapter:[{#1}]{#2}}
 \HLet\NR@chapter\:tempc
 
 \def\:tempc#1{%
    \gdef\NR:Title{\a:newlabel\sch:ttl}%
    \o:NR@schapter:{#1}%
    \gdef\NR:Type{chapter}%
 }
 \HLet\NR@schapter\:tempc
 
 \let\o:NR@@caption\@caption
 %
 %
 % Keith Andrews <[email protected]> reported that \@captype as
 % \NR:Type threw an undefined control sequence error. I think
 % \@currenvir is safe, there is nothing special about \@captype.
 %
 \long\def\@caption#1[#2]{%
     \gdef\NR:Type{\@currenvir}%
     \gdef\NR:Title{\a:newlabel{#2}}%
    \o:NR@@caption{#1}[{#2}]%
 }
 
 \let\o:NRorg@opargbegintheorem\@opargbegintheorem
   \def\@opargbegintheorem#1#2#3{%
     \gdef\NR:Title{\a:newlabel{#3}}%
     \gdef\NR:Type{\@currenvir}%
     \NR@gettitle{#3}%
     \defineautorefname{\@currenvir}{#1}%
     \o:NRorg@opargbegintheorem{#1}{#2}{#3}%
   }%
 
 \let\o:NRorg@begintheorem\@begintheorem
   \def\@begintheorem#1#2{%
     \gdef\NR:Title{\a:newlabel{#1 #2}}%
     \gdef\NR:Type{\@currenvir}%
     \defineautorefname{\@currenvir}{#1}%
     \NR@gettitle{}%
     \o:NRorg@begintheorem{#1}{#2}%
   }%
 
 \AtBeginDocument{%
   \@ifpackageloaded{listings}{%
       \def\:tempc#1{%
          \gdef\NR:Title{\a:newlabel{listing}}%
          \gdef\NR:Type{lstlisting}%
          \o:NROrg@lst@MakeCaption:{#1}%
          \gdef\@currentlabelname{listing}}
       \HLet\NROrg@lst@MakeCaption\:tempc
   }{}%
 }
 \let\T:ref=\::ref
 \def\::ref{\protect\T@ref}
 \def\T@ref#1{%
   \@safe@activestrue
   \let\::ref \T:ref
   \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
   \def\::ref{\protect\T@ref}%
   \@safe@activesfalse
 }
 
 \gdef\defineautorefname#1#2{%
     \expandafter\gdef\csname #1autorefname\endcsname{#2}}
 \defineautorefname{theorem}{Theorem}
 
 \Configure{newlabel}
    {\csname cur:th\endcsname \csname :currentlabel\endcsname}
    {\string\csname\space :autoref\string\endcsname
      {\NR:Type}#1}
 
 \ifx \@currentlabelname\:UnDef
    \let\@currentlabelname\empty
 \fi
 
 \pend:defIII\@setref{\edef\RefArg{##3}}
 \append:defIII\@setref{\let\:autoref\:gobble}
 \let\:autoref\:gobble
 
 -_-_-