<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="doc">
  <TeXML>
    <cmd name="documentclass">
      <opt>11pt</opt>
      <parm>article</parm>
    </cmd>
    <cmd name="title">
      <parm><xsl:value-of select="@title"/></parm>
    </cmd>

    <verb>
\newcommand{\comment}[1]{}
\newcommand{\ptitle}{\sl}


\hoffset=-.1\textwidth
\textwidth=1.2\textwidth
\voffset=.0\textheight
%\voffset=-.05\textheight
\textheight=1.1\textheight

\usepackage{fancyhdr,ifthen}
\pagestyle{fancy}
\cfoot{\thepage}  % no footers (in pagestyle fancy)
% running left heading
</verb>

<verb linebreaks="none">\lhead{\bfseries\LARGE\em \noindent{}\hspace{-.2em}</verb>
<xsl:value-of select="personal/@first"/>
<ctrl ch=" "/>
<xsl:value-of select="personal/@last"/>
<verb linebreaks="none">\hfill Curriculum Vitae\vspace{-.2ex}\\}</verb>

<verb>
% running right heading
%\newcommand{\spc}{1.31em}
\newcommand{\spc}{1.8em}
%\rhead{\em {\small{\phone{}}} \hspace{\spc}$\cdot$\hspace{\spc} 
% \email{}
% \hspace{\spc}$\cdot$\hspace{\spc} \www{}}
% adjust, because the header is now taller than usual.
\setlength{\headheight}{7ex}


% bulleted list environment
\newenvironment{bulletlist}
   {
      \begin{list}
%         {$\bullet$}
         {$\cdot$}
         {
            \setlength{\itemsep}{.5ex}
            \setlength{\parsep}{0ex}
            \setlength{\leftmargin}{1em}
            \setlength{\parskip}{0ex}
            \setlength{\topsep}{0ex}
         }
   }
   {
      \end{list}
   }
%end newenvironment

\newenvironment{dashlist}
   {
      \begin{list}
         {---}
         {
            \setlength{\itemsep}{.5ex}
            \setlength{\parsep}{0ex}
            \setlength{\leftmargin}{1em}
            \setlength{\parskip}{0ex}
            \setlength{\topsep}{0ex}
         }
   }
   {
      \end{list}
   }

% bold sans-serif label for margin labels.
\newcommand{\marginlabel}[1]{\textsf{\textbf{#1}}}
%\newcommand{\marginlabel}[1]{\textsc{\textsc{#1}}}
\newcommand{\entrylabel}[1]{\mbox{\marginlabel{#1}}\hfill}

\newcommand{\MainListlabel}[1]
   {
      \parbox[t]{\labelwidth}{\hspace{.8em}\marginlabel{#1}}
   }

% a list with fixed width marginlabels.
\newenvironment{MainList}[1]
   { 
      \renewcommand{\entrylabel}{\MainListlabel}
      \begin{list}{}
      { 
         \renewcommand{\makelabel}{\entrylabel}
         \setlength   {\itemindent}{-.65em}
         \setlength   {\labelwidth}{#1}
         \setlength   {\leftmargin}{\labelwidth}
         \setlength   {\itemsep}{3ex}
      }
   }
   {
      \end{list}
   }
%end newenvironment
    </verb>

    <env name="document">
      <verb>\begin{MainList}{104pt}</verb>
      <xsl:apply-templates/>
      <verb>\end{MainList}</verb>
    </env>
  </TeXML>
</xsl:template>

<xsl:template match="personal">
  <verb>\item[Personal]</verb>
  <xsl:apply-templates/>
</xsl:template>

<!-- Contact Information -->
<xsl:template match="contact">
  <xsl:for-each select="address">
    <xsl:value-of select="@street"/>
    <ctrl ch="\"/> 
    <xsl:value-of select="@city"/>
    <verb>, </verb> 
    <xsl:value-of select="@state"/>
    <ctrl ch=" "/> 
    <xsl:value-of select="@zip"/> 
    <ctrl ch="\"/> 
    <xsl:apply-templates/>
  </xsl:for-each>

  <xsl:call-template name="phone"/>
  <xsl:call-template name="fax"/>
  <xsl:call-template name="email"/>
  <xsl:call-template name="url"/>
</xsl:template>

<!-- template module for phone -->
<xsl:template name="phone">
  <xsl:for-each select="phone">
    <xsl:variable name="count">
      <xsl:number count="phone"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <xsl:text>Phone: </xsl:text>
    </xsl:if>
    <verb linebreaks="none">{\sf </verb>
    <verb linebreaks="none">(</verb>
    <xsl:value-of select="@area"/> 
    <verb linebreaks="none">) </verb>
    <xsl:value-of select="@local"/> 
    <xsl:choose>
      <xsl:when test="@type = 'home'">
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">(H)},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">(H)}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when> 
      <xsl:when test="@type = 'office'">
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">(O)},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">(O)}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when> 
      <xsl:when test="@type = 'mobile'">
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">(M)},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">(M)}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when> 
      <xsl:otherwise>
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise> 
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

<!-- template module for fax -->
<xsl:template name="fax">
  <xsl:for-each select="fax">
    <xsl:variable name="count">
      <xsl:number count="fax"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <xsl:text>FAX: </xsl:text>
    </xsl:if>
    <verb linebreaks="none">{\sf </verb>
    <verb linebreaks="none">(</verb>
    <xsl:value-of select="@area"/> 
    <verb linebreaks="none">) </verb>
    <xsl:value-of select="@local"/> 
    <xsl:choose>
      <xsl:when test="@type = 'home'">
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">(H)},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">(H)}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when> 
      <xsl:when test="@type = 'office'">
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">(O)},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">(O)}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when> 
      <xsl:otherwise>
        <xsl:choose>
          <xsl:when test="$count != last()">
            <verb linebreaks="none">},</verb>
          </xsl:when>
          <xsl:otherwise>
            <verb linebreaks="none">}</verb>
            <ctrl ch="\"/> 
          </xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise> 
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

<!-- template module for email -->
<xsl:template name="email">
  <xsl:for-each select="email">
    <xsl:variable name="count">
      <xsl:number count="email"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <verb linebreaks="none">Email: {\sf </verb>
    </xsl:if>
    <xsl:apply-templates/>
    <xsl:choose>
      <xsl:when test="$count != last()">
        <verb linebreaks="none">, </verb>
      </xsl:when>
      <xsl:otherwise>
        <verb linebreaks="none">}</verb>
        <ctrl ch="\"/> 
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

<!-- template module for url -->
<xsl:template name="url">
  <xsl:for-each select="url">
    <xsl:variable name="count">
      <xsl:number count="url"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <verb linebreaks="none">URL: {\sf </verb>
    </xsl:if>
    <xsl:apply-templates/>
    <xsl:choose>
      <xsl:when test="$count != last()">
        <verb linebreaks="none">},</verb>
      </xsl:when>
      <xsl:otherwise>
        <verb linebreaks="none">}</verb>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
</xsl:template>

<!-- Education -->
<xsl:template match="education">
  <verb>\item[Education]</verb>
  <verb>\begin{bulletlist}</verb>
  <xsl:apply-templates/>
  <verb>\end{bulletlist}</verb>
</xsl:template>

<xsl:template match="level">
  <cmd name="item" />
  <verb linebreaks="none">{\bf </verb>
  <xsl:value-of select="@degree"/>
  <verb linebreaks="none"> in </verb> 
  <xsl:value-of select="@major"/>
  <verb linebreaks="none">}, </verb> 
  <xsl:value-of select="@year"/>
  <ctrl ch="\"/> 
  <xsl:value-of select="@school"/> 
  <verb>, </verb> 
  <xsl:value-of select="@location"/>
</xsl:template>

<!-- Research -->
<xsl:template match="research">
  <verb>\item[Research]</verb>
  <xsl:apply-templates/>
</xsl:template>

<!-- Dissertation -->
<xsl:template match="dissertation">
  <verb>\item[Dissertation]</verb>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="dissertation/title">
  <verb linebreaks="none">Title: ``{\em </verb> 
    <xsl:apply-templates/> 
  <verb linebreaks="none">}''</verb> 
  <ctrl ch="\"/> 
</xsl:template>

<xsl:template match="font">
    <xsl:choose>
      <xsl:when test="@type = 'typewriter'">
        <verb linebreaks="none">{\tt</verb>
        <verb linebreaks="none">{</verb>
        <xsl:apply-templates/>
        <verb linebreaks="none">}}</verb>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates/>
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>

<xsl:template match="advisor">
  <verb>Advisor: </verb>
  <xsl:apply-templates/>
</xsl:template>

<!-- Publication and Presentation-->
<xsl:template match="publication">
  <xsl:for-each select="article[@status != 'preparation']">
    <xsl:variable name="count">
      <xsl:number count="article[@status != 'preparation']"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <verb>\item[Publications]</verb>
      <verb>\begin{enumerate}</verb>
    </xsl:if>
    <cmd name="item"/>
    <xsl:apply-templates/>
    <xsl:if test="$count = last()">  
      <verb>\end{enumerate}</verb>
    </xsl:if>  
  </xsl:for-each>

  <xsl:for-each select="article[@status = 'preparation']">
    <xsl:variable name="count">
      <xsl:number count="article[@status = 'preparation']"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <verb>\item[In Progress]</verb>
      <verb>\begin{enumerate}</verb>
    </xsl:if>
    <cmd name="item"/>
    <xsl:apply-templates/>
    <xsl:if test="$count = last()">  
      <verb>\end{enumerate}</verb>
    </xsl:if>  
  </xsl:for-each>

  <xsl:for-each select="presentation">
    <xsl:variable name="count">
      <xsl:number count="presentation"/>
    </xsl:variable>
    <xsl:if test="$count = 1">
      <verb>\item[Presentations]</verb>
      <verb>\begin{enumerate}</verb>
    </xsl:if>
    <cmd name="item"/>
    <xsl:apply-templates/>
    <xsl:if test="$count = last()">  
      <verb>\end{enumerate}</verb>
    </xsl:if>  
  </xsl:for-each>
</xsl:template>

<xsl:template match="author">
  <xsl:apply-templates/>
  <verb linebreaks="none">, </verb>
</xsl:template>

<xsl:template match="title">
  <verb linebreaks="none">``{\ptitle </verb> 
    <xsl:apply-templates/> 
  <xsl:choose>
    <xsl:when test="../location and ../date">
      <verb linebreaks="none">},'' </verb>
    </xsl:when>
    <xsl:otherwise>
      <verb linebreaks="none">}.''</verb>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="location">
  <xsl:choose>
    <xsl:when test="parent::*[@status='accepted']">
      <verb linebreaks="none">to appear in </verb>
    </xsl:when>
    <xsl:when test="parent::*[@status='submitted']">
      <verb linebreaks="none">submitted to </verb>
    </xsl:when>
  </xsl:choose>
  <xsl:apply-templates/> 
  <xsl:choose>
    <xsl:when test="../date">
      <verb linebreaks="none">, </verb>
    </xsl:when>
    <xsl:otherwise>
      <verb linebreaks="none">.</verb>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="date">
  <xsl:apply-templates/> 
  <verb linebreaks="none">.</verb> 
</xsl:template>

<!-- Awards & Honors -->
<xsl:template match="honor">
  <verb>\item[Awards]</verb>
  <env name="bulletlist">
    <xsl:apply-templates/>
  </env>
</xsl:template>

<xsl:template match="award">
  <cmd name="item"/>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="award/description">
  <xsl:apply-templates/>
  <verb linebreaks="none">, </verb> 
</xsl:template>

<!-- Experience -->
<xsl:template match="experience">
  <verb>\item[Experience]</verb>
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="position">
    <verb linebreaks="none">{\bf </verb>
    <xsl:value-of select="@title"/>
    <verb linebreaks="none">} \hfill </verb>
    <xsl:value-of select="@date"/>
    <ctrl ch="\"/>
    <xsl:value-of select="@employer"/>
    <xsl:apply-templates/>
</xsl:template>

<!-- Project -->
<xsl:template match="achievement">
  <verb>\item[Projects]</verb>
  <env name="enumerate">
    <xsl:apply-templates/>
  </env>
</xsl:template>

<xsl:template match="project">
    <cmd name="item"/>
    <xsl:value-of select="@date"/>
    <verb linebreaks="none"> \hspace{1.5mm} </verb>
    <xsl:apply-templates/>
</xsl:template>

<!-- Professional Activities -->
<xsl:template match="activity">
  <verb>\item[Professional \\ \hspace*{1.6mm} Activities]</verb>
  <env name="bulletlist">
    <xsl:apply-templates/>
  </env>
</xsl:template>

<xsl:template match="activity/description">
  <cmd name="item"/>
  <xsl:apply-templates/>
</xsl:template>

<!-- Reference -->
<xsl:template match="reference">
  <verb>
\item[References]\mbox{}\\

\newcommand{\tw}{.4\textwidth}
\hspace{-4em}\begin{tabular}{ll}
  </verb>
  <xsl:variable name="count">
    <xsl:value-of select="0"/>
  </xsl:variable>
  <xsl:for-each select="person">
    <verb linebreaks="none">\begin{minipage}[b]{\tw}</verb>
    <group>
      <cmd name="bf"/>
      <xsl:value-of select="@name"/>
    </group>
    <ctrl ch="\"/>
    <xsl:value-of select="@title"/>
    <ctrl ch="\"/>
    <xsl:if test="@dept">
      <xsl:value-of select="@dept"/>
      <ctrl ch="\"/>
    </xsl:if>
    <xsl:if test="@employer">
      <xsl:value-of select="@employer"/>
      <ctrl ch="\"/>
    </xsl:if>
    <xsl:apply-templates/>
    <verb linebreaks="none">\end{minipage}</verb>
    <xsl:choose>
      <xsl:when test="position() mod 2">
        <verb>&amp;</verb>
      </xsl:when>
      <xsl:otherwise>
        <verb>\\</verb>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each>
  <verb linebreaks="none">\end{tabular}</verb>
</xsl:template>

<xsl:template match="reference/person/contact">
  <xsl:for-each select="address">
    <xsl:value-of select="@street1"/>
    <ctrl ch="\"/>
    <xsl:if test="@street2">
      <xsl:value-of select="@street2"/>
      <ctrl ch="\"/>
    </xsl:if>
    <xsl:value-of select="@city"/>
    <xsl:if test="@state">
      <verb>, </verb> 
      <xsl:value-of select="@state"/>
    </xsl:if>
    <xsl:if test="@zip">
      <ctrl ch=" "/> 
      <xsl:value-of select="@zip"/> 
    </xsl:if>
    <ctrl ch="\"/> 
    <xsl:if test="@country">
      <ctrl ch="\"/> 
      <xsl:value-of select="@country"/> 
      <ctrl ch="\"/> 
    </xsl:if>
    <xsl:apply-templates/>
  </xsl:for-each>

  <xsl:call-template name="phone"/>
  <xsl:call-template name="fax"/>
  <xsl:call-template name="email"/>
  <xsl:call-template name="url"/>
</xsl:template>

<!-- Bullet lists -->
<xsl:template match="list">
  <env name="bulletlist">
  <xsl:apply-templates/>
  </env>
</xsl:template>

<xsl:template match="item">
  <cmd name="item"/>
  <xsl:apply-templates/>
</xsl:template>

<!-- Descriptive lists -->
<xsl:template match="list[@type='descriptive']">
  <env name="description">
  <xsl:apply-templates/>
  </env>
</xsl:template>

<xsl:template match="item[@term]">
  <cmd name="item">
    <opt><xsl:value-of select="@term"/></opt>
  </cmd>
  <xsl:apply-templates/>
</xsl:template>

<!-- Paragraphs -->
<xsl:template match="p">
 <xsl:apply-templates/>
 <cmd name="par"/>
</xsl:template>

</xsl:stylesheet>
