%%
%% This is file `ulqda.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% ulqda.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Copyright (C) 2009 by Ivan Griffin
%% 
%% This file may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.2 of this license or (at your option) any later
%% version. The latest version of this license is in:
%% 
%%     http://www.latex-project.org/lppl.txt
%% 
%% and version 1.2 or later is part of all distributions of
%% LaTeX version 1999/12/01 or later.
%% 
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{ulqda}
  [2009/06/11 v1.1 Qualitative Data Analysis package]
\RequirePackage{multicol}
\RequirePackage{tikz}
%%  dot2texi.sty in CTAN doesn't support the cache option yet
%%  The SVN version does.
\RequirePackage{dot2texi}
\usetikzlibrary{backgrounds,shapes,arrows,positioning}


\definecolor[named]{UlQda@lightblue}{rgb}{0.80,0.85,1}
\RequirePackage{soul}
\sethlcolor{UlQda@lightblue}

\newif\ifUlQda@debug \UlQda@debugfalse
\newif\ifUlQda@cache \UlQda@cachefalse
\newif\ifUlQda@cachepresent \UlQda@cachepresentfalse
\newif\ifUlQda@shellescape \UlQda@shellescapetrue
\newif\ifUlQda@MiKTeX \UlQda@MiKTeXfalse
\newif\ifUlQda@active \UlQda@activefalse
\newif\ifUlQda@counts \UlQda@countsfalse

\DeclareOption{active}{\UlQda@activetrue}
\DeclareOption{debug}{\UlQda@debugtrue}
\DeclareOption{cache}{\UlQda@cachetrue}
\DeclareOption{nocache}{\UlQda@cachefalse}
\DeclareOption{shell}{\UlQda@shellescapetrue}
\DeclareOption{noshell}{\UlQda@shellescapefalse}
\DeclareOption{MiKTeX}{\global\UlQda@MiKTeXtrue}
\DeclareOption{counts}{\global\UlQda@countstrue}

\DeclareOption*{%
  \PackageWarning{ulqda}{Unknown option `\CurrentOption'}%
}

\ExecuteOptions{shell}
\ProcessOptions\relax

\ifUlQda@counts
   \def\UlQda@counts{--number }
\else
   \def\UlQda@counts{ }
\fi

%% test if shell escape really works
\ifUlQda@shellescape
  \def\tmpfile{/tmp/shellEscapeTest-\the\year\the\month\the\day-\the\time}
  \immediate\write18{\ifUlQda@MiKTeX rem >"\tmpfile" \else touch \tmpfile \fi}
  \IfFileExists{\tmpfile}{
    \UlQda@shellescapetrue
    \immediate\write18{\ifUlQda@MiKTeX del "\tmpfile" \else rm -f \tmpfile \fi}
  }{\UlQda@shellescapefalse}
\fi

\ifUlQda@shellescape
  \ifUlQda@debug
    \PackageInfo{ulqda}{TeX Shell escape enabled.}
  \fi
\else
  \PackageWarningNoLine{ulqda} {TeX Shell escape not enabled.\MessageBreak%
     Manually process the CSV output with ulqda.pl}
\fi

\newcommand{\ulqdaHighlight}[2]{%
    \hl{\protect\ul{#2}}%
    \marginpar%
    {\raggedright\hbadness=10000\tiny\it%
      \hl{#1}
  \par}%
  %\par%
  }

\newcommand{\ulQda}{\textsf{ul\kern -.075em\lower .3ex\hbox {\protect\emph{q}}da}}

\ifUlQda@active
  \AtBeginDocument{%
    \typeout{ulqda: Loaded - 2009/06/11 v1.1 Qualitative Data Analysis package}
    \ifUlQda@cache
      \IfFileExists{\jobname.csv} %
      {
        \ifUlQda@debug
          \typeout{ulqda: QDA cache file \jobname.csv found}
        \fi
        \UlQda@cachepresenttrue
      }
      {
        \ifUlQda@debug
          \typeout{ulqda: QDA cache file \jobname.csv not found}
        \fi
        \UlQda@cachepresentfalse
      }
    \else
      \ifUlQda@debug
        \typeout{ulqda: caching disabled}
      \fi
      \UlQda@cachepresentfalse
    \fi

  % Code macro
    \ifUlQda@cachepresent
      \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2}}
    \else
      \ifUlQda@debug
        \typeout{ulqda: Creating QDA cache file \jobname.csv} %
      \fi
      \newwrite\ulqdaCodeFile %
      \immediate\openout\ulqdaCodeFile=\jobname.csv %
      \immediate\write\ulqdaCodeFile{Page Number, Section, Code, Text} %

      \def\UlQda@ListIt#1[#2,{%
        \ifUlQda@debug %
          \typeout{ulqda: Coding "#2" as "#1" on page \thepage, section \thesection}
        \fi %
        \immediate\write\ulqdaCodeFile{\thepage, \thesection, #2, "#1"}
        \index{#2} %
        \@ifnextchar]%             Look ahead one token.
          {\eatthesquarebracket}%  End of list.
          {\UlQda@ListIt{#1}[}%     Process rest of list.
      }
      \def\eatthesquarebracket]{}  % Gobble the square bracket.
      %
      % Coding macro
      \newcommand{\ulqdaCode}[2]{\ulqdaHighlight{#1}{#2}\UlQda@ListIt{#2}[#1,]} %
    \fi
  } % end of \AtBeginDocument

\newcommand{\UlQda@FirstOfTwo}[1]{
  \ifx#1\UlQda@MyUndefinedMacro
    ?\typeout{ulqda: undefined reference, please re-run}
  \else
    \expandafter\@firstoftwo#1
  \fi}
\newcommand{\UlQda@RefToSectNum}[1]{
  \expandafter \ifx\csname r@#1\endcsname\relax
    ?\typeout{ulqda: undefined reference, please re-run}
  \else
    \expandafter\UlQda@FirstOfTwo\csname r@#1\endcsname
  \fi}
  \def\UlQda@filter{}
  \newcommand{\ulqdaSetSectFilter}[1]{
      \ifUlQda@shellescape
        \immediate\write18{\ifUlQda@MiKTeX del \else rm -f -- \fi \jobname_net.dot}
        \immediate\write18{\ifUlQda@MiKTeX del \else rm -f -- \fi \jobname_flat.dot}
        \immediate\write18{\ifUlQda@MiKTeX del \else rm -f -- \fi \jobname_table.tex}
      \fi
      \def\UlQda@filter{--filter \UlQda@RefToSectNum{#1}}
  }
  \newcommand{\ulqdaClearSectFilter}{\def\UlQda@filter{}}
  \newcommand{\ulqdaGraph}[2]{\expandafter\csname UlQda@Graph#1\endcsname{#2}}
  \newcommand\UlQda@Graphflat[1]{\UlQda@GraphFlat{#1}}
  \newcommand\UlQda@Graphnet[1]{\UlQda@GraphNet{#1}}
  \newcommand{\UlQda@GraphVizFileName}{}
  \newsavebox{\UlQda@GraphSaveBox}
  \newcommand{\UlQda@GraphNet}[1]{%
    \renewcommand{\UlQda@GraphVizFileName}{\jobname_net.dot}%
    \ifUlQda@cachepresent
      \ifUlQda@shellescape
        \ifUlQda@debug
          \typeout{ulqda: Converting .csv to hierarchical GraphViz dot file}
        \fi
        \immediate\write18{ulqda.pl --graphnet \UlQda@filter \UlQda@counts
                             -- \jobname.csv \jobname_net.dot}
      \fi
    \fi

    \UlQda@DoGraph{#1}%
  }
  \newcommand{\UlQda@GraphFlat}[1]{%
    \renewcommand{\UlQda@GraphVizFileName}{\jobname_flat.dot}%
    \ifUlQda@cachepresent
      \ifUlQda@shellescape
        \ifUlQda@debug
          \typeout{ulqda: Converting .csv to flat GraphViz dot file}
        \fi
        \immediate\write18{ulqda.pl --graphflat \UlQda@filter \UlQda@counts
                             -- \jobname.csv \jobname_flat.dot}
      \fi
    \fi

    \UlQda@DoGraph{#1}%
  }

  \newcommand{\UlQda@DoGraph}[1]{
    \IfFileExists{\UlQda@GraphVizFileName}{
      \ifUlQda@shellescape
        \begin{lrbox}{\UlQda@GraphSaveBox}
          \stepcounter{dtt@fignum}
          \setkeys{dtt}{#1}
          \immediate\write18{cp "\UlQda@GraphVizFileName" "\dtt@figname.dot"}
          \dottotexgraphicsinclude
        \end{lrbox}
        \framebox{\usebox{\UlQda@GraphSaveBox}} \par
      \else
        \typeout{ulqda: shell escape not enabled}
        \typeout{ulqda: unable to process \UlQda@GraphVizFileName}
      \fi
    }
  }
  \newcommand{\ulqdaTable}{
    \IfFileExists{\jobname_table.tex}{
      \input{\jobname_table.tex}
    }{
      \ifUlQda@cachepresent
        \ifUlQda@shellescape
          \ifUlQda@debug
            \typeout{ulqda: Converting .csv to TeX table}
          \fi
          \immediate\write18{ulqda.pl --list \UlQda@filter \UlQda@counts
                               -- \jobname.csv \jobname_table.tex}
        \fi
      \fi
      \IfFileExists{\jobname_table.tex}{
        \input{\jobname_table.tex}
      }
    }
  }
  \newcommand{\ulqdaCloud}{
    \IfFileExists{\jobname_cloud.tex}{
      \input{\jobname_cloud.tex}
    }{
      \ifUlQda@cachepresent
        \ifUlQda@shellescape
          \ifUlQda@debug
            \typeout{ulqda: Converting .csv to TeX cloud}
          \fi
          \immediate\write18{ulqda.pl --cloud \UlQda@filter \UlQda@counts
                               -- \jobname.csv \jobname_cloud.tex}
        \fi
      \fi
      \IfFileExists{\jobname_cloud.tex}{
        \input{\jobname_cloud.tex}
      }
    }
  }
\else % UlQda@activefalse
  \newcommand{\ulqdaTable}{}
  \newcommand{\ulqdaCloud}{}
  \newcommand{\ulqdaGraph}[2]{}
  \newcommand{\ulqdaCode}[2]{#2}
  \newcommand{\ulqdaSetSectFilter}[1]{}
  \newcommand{\ulqdaClearSectFilter}{}
\fi
\endinput
%%
%% End of file `ulqda.sty'.
