% \iffalse meta-comment
%
% Copyright 2006      Youssef Jabri
% 
% 
% This file is part of the `Arabi' system.
% -------------------------------------------
% 
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3b
% 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.3b or later is part of all distributions of LaTeX 
% version 2005/12/01 or later.
% 
% This file has the LPPL maintenance status "maintained".
% 
% 
% \fi
%
% Filename: `farsi.ldf' the language definition file of Farsi
% for use with BABEL.
%

\ProvidesFile{farsi.ldf}

\ProvidesLanguage{farsi}[2006/01/01 v0.1 Farsi support for the babel system]
        

\LdfInit{farsi}{captionsfarsi}


\ifx\l@farsi\@undefined
  \@nopatterns{farsi}%
  \adddialect\l@farsi0
\fi
\InputIfFileExists{lfeenc.def}{%
  \message{Loading the definitions for the LaTeX{} Farsi encoding}}{%
  \errhelp{I can't find the laeenc.def file for the Farsi fonts}%
  \errmessage{Since I do not know what the LFE encoding means^^J
    I can't typeset Farsi.^^J
    I stop here, while you get a suitable lfeenc.def file}\@@end
 }
  
%% actually, due to the fact that there is no standard encoding 
%% used widely by the Iranian community. We adopt the Unicode utf8
%% encoding and the Windows CP1256. The user may use the editor he wants if it can export
%% to one of these two formats. If none is specified we will assume it's utf-8!!
%% If no encoding is loaded, utf-8 will be automatically!
%%
\AtEndOfPackage{%
  \@ifpackageloaded{inputenc}{}{\RequirePackage[utf8]{inputenc}}}
  


%NO hyphenation is needed in Farsi!!
\providehyphenmins{\CurrentOption}{\thr@@\thr@@}


%% Some captions are missing. The others have been ``stolen'' from \FarsiTeX
\addto\captionsfarsi{%
\def\prefacename{\textFR{\meem\dal\kha\lam}}% <<
\def\refname{\textFR{\meem\ra\jeem\ayn}}%
\def\abstractname{\textFR{\tcheh\kaf\ya\dal\ha}}%
\def\bibname{\textFR{\kaf\taa\alef\baa\ZWNJ\nun\alef\meem\ha}}%
\def\chaptername{\textFR{\fa\sad\lam}}%
\def\appendixname{\textFR{\peh\ya\waw\seen\taa}}%
\def\contentsname{\textFR{\fa\ha\ra\seen\taa\space\meem\nun\dal\ra\jeem\alef\taa}}%
\def\listfigurename{\textFR{\lam\ya\seen\taa\ \alef\sheen\kaf\alef\lam}}%
\def\listtablename{\textFR{\lam\ya\seen\taa\  \jeem\dal\alef\waw\lam}}%
\def\indexname{\textFR{\fa\ha\ra\seen\taa\  \alef\lam\fa\baa\alef\ya\ya}}%
\def\figurename{\textFR{\sheen\kaf\lam}}%
\def\tablename{\textFR{\jeem\dal\waw\lam}}%
\def\partname{\textFR{\baa\kha\sheen}}%
\def\enclname{}%<-- Needs translation
\def\ccname{\textFR{\nun\seen\kha\T\space\lam\noboundary}}% <<
\def\headtoname{}%<-- Needs translation
\def\pagename{\textFR{\sad\fa\Haa\T}}%
\def\seename{\textFR{\ra\alef\jeem\ayn}}%<<
\def\alsoname{\textFR{\ra\alef\jeem\ayn\space\alefhamza\ya\dad\alef}}%<<
\def\proofname{\textFR{\baa\ra\ha\alef\nun}}% for AMS-\LaTeX
\def\glossaryname{\textFR{\qaf\alef\meem\waw\seen}}%<<
}




%
% The default format for the date in IRAN
% It's called the Jalali calendar. Adapted from FarsiTeX
%
\InputIfFileExists{arabiftoday.sty}{%
  \message{Loading the definitions for the Jalali calendar}}{%
  \errhelp{I can't find the arabiftoday.sty file for the Jalali calendar}%
  \errmessage{Since I do not know what the Jalali calendar is^^J
    I can't typeset the Farsi date.^^J
    I stop here, while you get a suitable arabiftoday.sty file}\@@end
}

\def\datefarsi{\def\today{\ftoday}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%         MACROS FOR Arabic/Latin TYPESETTING			   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% First, the common part to Arabic and Farsi
%
\InputIfFileExists{arabicore.sty}{%
  \message{Loading the Common definitions for Arabic and Farsi}}{%
  \errhelp{I can't find the arabicore.sty file}%
  \errmessage{Since I can't find the arabicore.sty file^^J
    I can't typeset Arabic.^^J
    I stop here, while you get a suitable arabicore.sty file}\@@end
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now the specific part to Farsi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%\newif\if@farsi %-----> Arabicore
%
\newcommand{\FarsiEncoding}{\fontencoding{LFE}\selectfont}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ArabTeX has already  \R as well as \RL command
% While (La)TeX defines already \L
% In addition to the fact that the Hebrew package for Babel
% has \R and \L !!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\DeclareRobustCommand{\@farsi@R}[1]{\bgroup\beginR\@arabicfalse\@farsitrue\FarsiEncoding 
																		#1\endR\egroup}
% To avoid bad surprised we use \def to define the \R control sequence, 
% many packages ``like'' to use , like ArabTeX and the Hebrew package 
% supporting Babel 
\newcommand{\textFR}[1]{\expandafter\@farsi@R{#1}}%
\def\textRL#1{\expandafter\@farsi@R{#1}}%
%Temporary shortcut
\newcommand{\FR}[1]{\textFR{#1}}
% For \cs{L} see the core !
\DeclareRobustCommand{\@ensure@farsi}[1]{\if@farsi #1 \else\beginR\FarsiEncoding #1\endR\fi}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





\def\farsiencoding{LFE}
\DeclareFontEncoding{LFE}{}{}
\DeclareFontSubstitution{LFE}{cmr}{m}{n}
\DeclareErrorFont{LFE}{cmr}{m}{n}{10}

\DeclareRobustCommand{\bbl@farsi}{%
  \bbl@arabi%
  \fontencoding\farsiencoding\selectfont%
  \let\encodingdefault\farsiencoding%
  \@rltrue%
  \@farsitrue%
}

\addto\extrasfarsi{\bbl@farsi
}

\addto\noextrasfarsi{%
\@rlfalse
\@farsifalse
\latintext\normalfont %enough ??
% Restore the lplain.tex penalties??
\hyphenpenalty=50 
\binoppenalty=700
\relpenalty=500
}


% The package \pkg{ifthen} is needed. We test if the font contains a character 
% \cs{rial}. Else we define it just to be the \cs{rial} of the font \texttt{nazli]
% which has one
%
\newlength{\rialheight}%

\DeclareTextCommand{\rial}{LFE}{%
    \settoheight{\rialheight}{\rialchar}%
    \ifthenelse{\lengthtest{\rialheight=0pt}}%
                {\mbox{\textnazli{\,\rialchar\,}}}%
                {{}\,\rialchar\,{}}%
                }


%
% Now, the Farsi fonts Definitions
%
\InputIfFileExists{farsifnt.sty}{%
  \message{Loading the Arabi fonts definitions for Farsi}}{%
  \errhelp{I can't find the farsifnt.sty file}%
  \errmessage{Since I can't find the farsifnt.sty file^^J
    I can't typeset Farsi.^^J
    I stop here, while you get a suitable farsifnt.sty file}\@@end
}



%% Numbers in Arabic contexts, must be written as input, not reflected!
%% They are already Right-to-Left! Sometimes written in Arabic digits and 
%% other times with Arabo-Indic digits.
%% They have to be input using the \I control sequence
%%
\newcommand{\ExtendedIndicDigit}[1]{\L{\FarsiEncoding #1}}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%==========================================================%
%   The changes that should be executed after reading      %
%   the main style file. (e.g., article.sty)               %
%==========================================================%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\addto\extrasfarsi{%
  \let\SAV@alph\@alph%
  \let\SAV@Alph\@Alph%
  \renewcommand*{\@alph}[1]{\protect\abjadnumeral{\number#1}}%
  \renewcommand*{\@Alph}[1]{\protect\abjadnumeral{\number#1}}}

\addto\noextrasfarsi{%
  \let\@alph\SAV@alph%
  \let\@Alph\SAV@Alph}
  
  

%    ****************************************
%    *             PUNCTUATION              *
%    ****************************************
%
%        TEMPORARILY

\addto\extrasfarsi{%
\frenchspacing}




%% We change  \alph{counter} so that we get abjad numerals instead,
%% we change  \Alph{counter} to get abjad numerals since no Uppercase
%% exists in Arabic, just to avoid bad surprises.
%%

%% Good for Farsi? Change!?
%%

\let\latin@Alph\Alph
\let\latin@alph\alph
\def\arabic@alph#1{\expandafter\abjadnumeral\expandafter{\number#1}}
\def\arabic@Alph#1{\expandafter\abjadnumeral\expandafter{\number#1}}
\addto\extrasfarsi{%
\def\alph#1{\expandafter\abjadnumeral\csname c@#1\endcsname}
\def\Alph#1{\expandafter\abjadnumeral\csname c@#1\endcsname}
}
\addto\noextrasfarsi{%
  \let\alph\latin@alph
  \let\Alph\latin@Alph}



%
% Now, the common file to Arabic and Farsi that allows
% activating and deactivating Vowelization
%
\InputIfFileExists{arabnovowel.sty}{%
  \message{Loading the Common definitions for Arabic and Farsi}}{%
  \errhelp{I can't find the arabnovowel.sty file}%
  \errmessage{Since I can't find the arabnovowel.sty file^^J
    I can't activate or deactivate vowelization.^^J
    The vowels you type will be printed!}\@@end
}

% To get the parentheses around equations numbers to appear correctly
% works with standard classes article, report and book (with or without amsmath package) 
% and with ams[*] classes. (reqno should be used!!)
%
\addto\extrasfarsi{%
\let\SAV@@eqnnum\@eqnnum
\let\SAV@tagform@\tagform@
\def\tagform@#1{\maketag@@@{)\ignorespaces#1\unskip\@@italiccorr(}}% if amsmath is loaded
\renewcommand{\@eqnnum}{)\theequation(}%                             otherwise 
}

% Restore original values
\addto\noextrasfarsi{%
\let\@eqnnum\SAV@@eqnnum
\let\tagform@\SAV@tagform@
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%     Experimental Farsi mathematics
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%% Farsi digits in MATHS %%%%%%%%%%%%%%%%%%

% New MathVersion
\DeclareMathVersion{farsimath}

% DeclareSymbolFont to be used with persian and Arabic digits
\DeclareSymbolFont{farsiletters}{LFE}{nazli}{m}{n}
% SetSymbolFont for each version
\SetSymbolFont{farsiletters}{farsimath}{LFE}{nazli}{m}{n}
% We suppose the normal mathematics fonts when restoring back 
% the normal behaviour
\SetSymbolFont{farsiletters}{normal}{OT1}{cmr}{m}{n}

%To work with persianmathdigits 
\DeclareMathSymbol{0}{\mathalpha}{farsiletters}{48}%
\DeclareMathSymbol{1}{\mathalpha}{farsiletters}{49}%
\DeclareMathSymbol{2}{\mathalpha}{farsiletters}{50}%
\DeclareMathSymbol{3}{\mathalpha}{farsiletters}{51}%
\DeclareMathSymbol{4}{\mathalpha}{farsiletters}{52}%
\DeclareMathSymbol{5}{\mathalpha}{farsiletters}{53}%
\DeclareMathSymbol{6}{\mathalpha}{farsiletters}{54}%
\DeclareMathSymbol{7}{\mathalpha}{farsiletters}{55}%
\DeclareMathSymbol{8}{\mathalpha}{farsiletters}{56}%
\DeclareMathSymbol{9}{\mathalpha}{farsiletters}{57}%


\newcommand{\farsimathdigits}{%
\mathversion{farsimath}}
\newcommand{\arabicmathdigits}{%
\mathversion{normal}}



% We suppose the normal behaviour inside Farsi is to use
% Farsi digits
\addto\extrasfarsi{%
\farsimathdigits
}
% While outside, the Arabic digits are used
\addto\noextrasfarsi{%
\arabicmathdigits
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%% To let this file clean and usable by everybody %%%%%%
% use "farsi.cfg" instead and uncomment next line
%\loadlocalcfg{farsi}  %last patches and additional hacks
%%
\ldf@finish{farsi}


\endinput
