%% gatech-thesis-losa.sty - support code for creating a 'List of
%%   Symbols or Abbreviations"
%%
%%   depends on gloss.sty, so it is not included by default in the
%%   main gatech-thesis.cls (this cuts down on ``extra'' dependencies
%%
%% To use this package, all you need do is include
%%   \usepackage{gatech-thesis-losa}
%%   \losafiles{<database file, sans .bib suffix>}
%% in your preamble, and the LOSA will be automatically generated
%% and included in the frontmatter.  Of course, you need actual
%% *entries* in the glossary file -- which must end in .bib -- and you
%% need actual citations to those entries within your bodytext, like this:
%%   \losa{key}.
%% Note that \losa{<key>} typesets the <word> from the <key> entry of
%% the losafile within the text, so there''s no need to do this:
%%    (BAD) word\losa{key-for-word}
%% Again, you should read the gloss.sty documentation for more info, but
%% basically gatech-thesis-losa.sty makes it simple:
%%     1. insert the two commands above into your preamble
%%     2. create a database with your glossary definitions
%%     3. sprinkle \losa{} citations in your text
%%     4. run ``bibtex'' on the <rootfile>.losa.aux file created
%%        after the first ``latex'' run.  (But don''t include the
%%        .aux extension.  So say ``bibtex <rootfile>.losa''  You
%%        can do this at the same time you run ``bibtex'' for your
%%        references.
%%     5. run ``latex'' twice more
%%
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
\ProvidesPackage{gatech-thesis-losa}
         [2002/08/08  List of Symbols support for gatech-thesis.cls]
\@ifclassloaded{gatech-thesis}{}{
 PackageError{This style can only be used with the gatech-thesis class}
}
\RequirePackage[refpages]{gloss}

\newif\iflosapage
\losapagetrue % why use this package if you're not going to USE it?

\newcommand{\losafiles}[1]%
 {\ifx\empty#1\empty\else\gdef\@losafiles{#1}\fi}
\def\@losafiles{}

\newcommand{\losaname}{}
\newcommand{\gtlosaname}{}
\newcommand{\losacontentlinestring}{}
\newcommand{\losapdfbookmarkstring}{}

\newcommand{\setlosastring}[1]{%
 \renewcommand{\gtlosaname}{#1}
 \renewcommand{\losaname}{\Makeuppercase{#1}}
 \renewcommand{\losacontentlinestring}{%
   \texorpdfstring{\Makeuppercase{#1}}{#1}
 }
 \renewcommand{\losapdfbookmarkstring}{#1}
}
\setlosastring{List of Symbols or Abbreviations}

\makegloss
\newgloss{losa}{.losa}{\losaname}{gatech-thesis-losa}
\newlength{\losahang}
\setlength{\losahang}{2cm}

\newcommand\setlosagroup[1]{\@namedef{gls@group@#1}}
\newcommand{\losaheading}[1]{} % don't print subsection headings ("A", "B", ...)
\newcommand{\losagroup}[1]{%
 \expandafter\losaheading\csname gls@group@#1\endcsname}

% make the '\losa[otheroptions]{}' command a synonym for
% '\gloss[losa,otheroptions]{}'
\newcommand\losa{\protect\losa@gloss@i}
\def\losa@gloss@i{%
 \@bsphack
 \begingroup
   \catcode`\ =9
   \@ifnextchar[{\losa@gloss@iia}{\losa@gloss@iib[]}}
\def\losa@gloss@iia[#1]{%
   \endgroup
 \gls@gloss@iii{losa,#1}}
\def\losa@gloss@iib[#1]{% #1 is empty
   \endgroup
 \gls@gloss@iii{losa}}

% and alternate forms
\newcommand\Losa[1]{\losa[Word]{#1}}
\newcommand\onlylosa[1]{\losa[nocite]{#1}}

\newenvironment{losalist}
 {\begin{singlespaced}\begin{list}{\relax}{%
       \def\makelabel##1{##1\hfil}%
       \setlength{\labelsep}{1em}%
       \setlength{\labelwidth}{\losahang}%
       \addtolength{\labelwidth}{-\labelsep}%
       \setlength{\itemindent}{0em}%
       \setlength{\leftmargin}{\losahang}}}
 {\end{list}\end{singlespaced}}

\newenvironment{losaitem}[4]%
 {\ifgls@list
    \expandafter\let\expandafter\gls@thispage  % relax if undefined
            \csname glsp@\gls@name::#1\endcsname
    \item[%
      \gls@raisedlink{\hyper@anchorstart{\gls@name::#1}\hyper@anchorend}%
      \gls@label{#2}{#3}{#4}]%
    \begingroup
      \let\protect\noexpand
      \immediate\write\@auxout{%
        \string\gls@cite{\gls@name::#1}{#2}{#3}{#4}}%
    \endgroup
  \else
    \xdef\gls@a{\noexpand\begin{\@currenvir}}%
    \endgroup
    \begin{losalist}%
    \gls@listtrue
    \def\stopglosslist{\end{losalist}}%
    \gls@a{#1}{#2}{#3}{#4}%
  \fi
  \ignorespaces}
 {.\@@par}

\expandafter\let\csname losaitem*\endcsname\losaitem
\expandafter\let\csname endlosaitem*\endcsname\@@par

\newcommand\losa@section{%
 \if@twocolumn
   \@restonecoltrue\onecolumn
 \else
   \@restonecolfalse
 \fi
 \chapter*{\losaname}%
 \@mkboth{\scshape\MakeUppercase\losaname}%
         {\scshape\MakeUppercase\losaname}%
}
\newenvironment{thelosa}
 {\losa@section
  \def\+##1+{}%
  \@beginparpenalty\@M}%
 {\if@restonecol\twocolumn\fi%
 \stopglosslist}

\renewcommand{\do@losapage}{%
 \iflosapage
   \if@openright\cleardoublepage\else\clearpage\fi
   % must clear page here, so that phantomsection\addcontentsline is on the correct page
   \settoheight{\gt@tmpa}{A}
   \set@gttocskip{\gt@tmpa}
   {\newlinestretch{1}
    \addvspace{\gt@tocentryskip@value}
    \phantomsection%
    \addcontentsline{toc}{chapter}{\losacontentlinestring}
    \printgloss[losa]{\@losafiles}
   }%
   \newpage
 \fi
}