% \def\lastedit{2005-06-22 17:14:25 by stolfi}

%==============meus comandos=======================

% ignora espaço e mudança de linha nestas macros
\advance\endlinechar by -256

% estes 3 comandos permitem as marcacoes de encapsulamento:
% abre encapsulamento - abre colchetes com identificacao
\newcommand{\ab}[1]
	{
	\vtop
		{
		\hbox to 2.5mm{$\bigl[$\hss}
		\kern-1.0mm
		\hbox{\tiny\emph{#1~}}
		}
	}
% fecha encapsulamento - fecha colchetes com identificacao
\newcommand{\fx}[1]
	{
	\vtop
		{
		\hbox to 2.5mm{\hss$\bigr]$}
		\kern-1.0mm\hbox{\tiny~\emph{#1}}
		}
	}
% reserva espaco do tamanho do encapsulamento para a finalidade de alinhamento
\newcommand{\sk}
	{\hbox to 2.5mm{\hss}}

% estes 2 comandos permitem indexar sentencas e encapsulamentos imprimindo-os no indice
% sentenca indexada
%\newcommand{\sentence}[2]
%	{
%	\begin{equation}
%	\label{#1}
%	\hbox{#2}
%	\end{equation}
%	\index{#2}
%	}
% encapsulamento indexado
%\newcommand{\encap}[3]
%	{
%	\sentence{#1}{#3}
%	\index{#2!#3}
%	}

% estes comandos permitem formatar os elementos de uma estrutura
% exemplo de uso da estrutura:
% \grm{e.Sent1}{Sent}{\categ{SO}}
%
% indicador de repetição de 0 ou mais vezes - * sobrescrito
\renewcommand{\*}
	{^{*}}
% indicador de repetição de 1 ou mais vezes - + sobrescrito
\newcommand{\+}
	{^{+}}
% indicador de existência ou não - ? sobrescrito
\newcommand{\?}
	{^{?}}
% muda de linha e deixa pequena identação - usado para cada elemento do lado direito de uma regra
\newcommand{\nl}
	{\\\hspace*{3mm}}
% categoria sintática não terminal (sintagmas, etc) - em itálico
% utilizar 2 letras ou mais iniciando por maiúsculas
% uso: \categ{SO} -> Sintagma Oracional
\newcommand{\categ}[1]
%	{\textit{#1}}
	{{\it #1}}
% categoria léxica (todas as alternativas são palavras) - em itálico
% utilizar somente letras minúsculas
% uso: \lex{cjint} -> conjunção integrante
\newcommand{\lex}[1]
	{\textit{#1}}
%	{{\it #1}}
% função sintática - sans serif
% utilizar somente uma letra maiúscula
% uso: \func{S} -> Sujeito
\newcommand{\func}[1]
%	{\textsf{#1}}
	{{\sf #1}}
% terminais (palavras)
% utilizar caracteres em minúsculas
% uso: \term{que} -> palavra 'que'
\newcommand{\term}[1]
	{\texttt{#1}}
%	{{\tt #1}}
% identificação da regra
% uso: \regra{Integr} -> regra do SN que começa com conjunção integrante
\newcommand{\regra}[1]
%	{{\it #1}}
	{\textit{#1}}
% item de parâmetro
% maiúsculas para variáveis e minúsculas para valores
% uso: \ipar{G} -> Gênero e Número
\newcommand{\ipar}[1]
	{{\it #1}}
% parâmetros
% maiúsculas para variáveis e minúsculas para valores
% uso: \param{(G,N)} -> Gênero e Número
\newcommand{\param}[1]
	{
	(\ipar{#1})
	}
% categoria sintática não terminal + parâmetros
% uso: \categp{SN}{(P,G,N)} -> Sintagma Nominal com parâmetros
\newcommand{\categp}[2]
	{
	 \categ{#1}
	 \ifthenelse{\equal{#2}{}}{}{\param{#2}}
	}
% categoria léxica + parâmetros
% uso: \lex{adj}{G,N} -> adjetivo com parâmetros
\newcommand{\lexp}[2]
	{
	 \lex{#1}
	 \ifthenelse{\equal{#2}{}}{}{\param{#2}}
	}
% terminais + parâmetros
% uso: \term{cujo}{G,N} -> palavras 'cujo','cuja',cujos','cujas'
\newcommand{\termp}[2]
	{
	 \term{#1}
	 \ifthenelse{\equal{#2}{}}{}{\param{#2}}
	}
% função : categoria sintática + parâmetros
% uso: \fcp{S}{SN}{(P,G,N)} -> Sintagma Nominal com parâmetros cuja função é sujeito
\newcommand{\fcp}[3]
	{
	 \ensuremath{
	   \ifthenelse{\equal{#1}{}}{}{\func{#1}\!:\!}
	   \categ{#2}
	   \ifthenelse{\equal{#3}{}}{}{\param{#3}}
	 }
	}
% função : categoria léxica + parâmetros
% uso: \flp{Q}{adj}{G,N} -> adjetivo com parâmetros cuja função é qualificador 
\newcommand{\flp}[3]
	{
	 \ensuremath{
	   \ifthenelse{\equal{#1}{}}{}{\func{#1}\!:\!}
	   \lex{#2}
	   \ifthenelse{\equal{#3}{}}{}{\param{#3}}
	 }
	}
% função : terminal + parâmetros
% uso: \ftp{Q}{cujo}{G,N} -> palavras 'cujo','cuja',cujos','cujas' cuja função é qualificador
\newcommand{\ftp}[3]
	{
	 \ensuremath{
	   \ifthenelse{\equal{#1}{}}{}{\func{#1}\!:\!}
	   \term{#2}
	   \ifthenelse{\equal{#3}{}}{}{\param{#3}}
	 }
	}
% função : categoria sintática + regras + parâmetros
% uso: \fcrp{S}{SN}{a,b}{(P,G,N)} -> regras a e b do sintagma nominal com parâmetros cuja função é sujeito
\newcommand{\fcrp}[4]
	{
	 \ensuremath{
	   \ifthenelse{\equal{#1}{}}{}{\func{#1}\!:\!}
	   \categ{#2}
	   \ifthenelse{\equal{#3}{}}{}{\{ \regra{#3} \}}
	   \ifthenelse{\equal{#4}{}}{}{\param{#4}}
	 }
	}
% este comando permite formatar uma regra da gramática
% #1 indica o uso da regra, com qualquer combinacao dos seguintes valores:
%   d - dissertation - esta regra sera exibida na dissertacao
%   p - program - esta regra sera coletada automaticamente para o programa da gramatica
% exemplo de uso:
% \grm{d}{g.Sent1}{Sent}{so}{}
%   {
%   \fcrp{}{SO}{}{FV,MV}
%   }
% \grm{p}{g.Sent1}{Sent}{so}{}
%   {
%   \fcrp{}{SO}{}{FV,MV}
%   }
% \grm{dp}{g.sv1}{SO}{svpuro}{FV,MV}
%   {
%   \fcrp{S}{SN}{}{P,G,N}
%   \fcrp{V}{SV}{}{FV,MV,P,N}
%   }
\newcounter{Gramctr}[section]
\def\theGramctr{\texttt{R}\thesection.\arabic{Gramctr}}
\newlength{\grmtextlength}
\newcommand{\grm}[6]
  {
  \ifthenelse{\equal{#1}{d} \or \equal{#1}{dp} \or \equal{#1}{pd}}
    {
    \refstepcounter{Gramctr}
    \label{#2}
    \item
%    \par
    \setlength{\grmtextlength}{\linewidth}
    \addtolength{\grmtextlength}{-30mm}
    \parbox[t]{\grmtextlength}{
%      \par
%      \addvspace{\baselineskip}
      \begin{math}
      \categ{#3}
      \ifthenelse{\equal{#4}{}}{}{\{ \regra{#4} \}}
      \ifthenelse{\equal{#5}{}}{}{\param{#5}}
      \to
      #6
      \end{math}
      \par
      }
    \hfill
    \mbox(\theGramctr)
    \par
    }{}
  }


% texto exemplo
% uso: \xm{O carro saiu da estrada}
\newcommand{\xm}[1]
	{\texttt{\small#1}}
%	{{\small\tt #1}}

% este comando permite formatar um texto exemplo
% #1 indica o uso do texto exemplo, com qualquer combinacao dos seguintes valores:
%   d - dissertation - este exemplo sera exibido na dissertacao
%   p - program - este exemplo sera coletado automaticamente para o programa da gramatica
% exemplo de uso:
% \xmp{d}{x.sent}{[O carro saiu da estrada].}
% \xmp{p}{x.sent}{[O carro saiu da estrada].}
% \xmp{dp}{x.sent}{[O carro saiu da estrada].}
\newcounter{Exempctr}[chapter]
\def\theExempctr{\texttt{e}\thechapter.\arabic{Exempctr}}
\newlength{\xmptextlength}
\newcommand{\xmp}[3]
  {
  \ifthenelse{\equal{#1}{d} \or \equal{#1}{dp} \or \equal{#1}{pd}}
    {
    \refstepcounter{Exempctr}
    \label{#2}
    \par
    \noindent
    \hspace{10mm}
    \setlength{\xmptextlength}{\linewidth}
    \addtolength{\xmptextlength}{-30mm}
    \parbox[b]{\xmptextlength}{
      \par
      \addvspace{\baselineskip}
      \xm{#3}
      \par
      }
    \hfill
    \mbox{-\theExempctr-}
    \par
    }{}
  }

% usado para separar duas versoes:
% o primeiro parametro e´ a versao a ser impressa na dissertacao
% o segundo parametro e´ a versao a ser coletada automaticamente para constar da gramatica do programa
% exemplo uso:
% \alt{}{TN:}
% \alt{[\flp{}{virg}{}\ \fcrp{}{SS}{}{}]\+}{\fcrp{}{virg+SS+}{}{}}
\newcommand{\alt}[2]{#1}

% volta o status original
\advance\endlinechar by 256

%==============fim dos meus comandos==============
