% \iffalse 
%<*internal>
\iffalse
%</internal>
%<*readme>
_________________
The XePersian package
v1.0.1

XePersian is a package written for XeLaTeX that allows users to typeset
Persian easily. The current version is 1.0.1 and it will be developed to
 meet the needs of Persian typesetting properly.

The XePersian package is independent of any operating system, meaning it 
will work on all operating systems.

There are some  excellent fonts made by IRMUG (Iranian Mac User Group) which you can download
from http://wiki.irmug.org/index.php/X_Series_2#Download_fonts and
http://wiki.irmug.org/index.php/XWZar


This version fixes all known bugs and adds heaps of new things.

______________
Vafa Khalighi
vafa@users.berlios.de

Copyright 2008-2009
Distributed under the LaTeX Project Public License
%</readme>
%<*internal>
\fi
%
%</internal>
%
%<*internal>
\begingroup
%</internal>
%<*batchfile>
\input docstrip.tex
\keepsilent
\preamble

  __________________________________
  Copyright © 2008-2009 Vafa Khalighi

  License information appended.


\endpreamble
\postamble

Copyright © 2008-2009      by Vafa Khalighi     <vafa@users.berlios.de>

Distributable under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt

This work is "maintained" (as per LPPL maintenance status) 
by Vafa Khalighi.


                             

\endpostamble
\askforoverwritefalse
\generate{\file{xepersian.sty}{\from{xepersian.dtx}{xepersian.sty}}}
\generate{\file{algorithmic-xepersian.def}{\from{xepersian.dtx}{algorithmic-xepersian.def}}}
\generate{\file{algorithm-xepersian.def}{\from{xepersian.dtx}{algorithm-xepersian.def}}}
\generate{\file{amsart-xepersian.def}{\from{xepersian.dtx}{amsart-xepersian.def}}}
\generate{\file{amsbook-xepersian.def}{\from{xepersian.dtx}{amsbook-xepersian.def}}}
\generate{\file{article-xepersian.def}{\from{xepersian.dtx}{article-xepersian.def}}}
\generate{\file{backref-xepersian.def}{\from{xepersian.dtx}{backref-xepersian.def}}}
\generate{\file{bidibeamer-xepersian.def}{\from{xepersian.dtx}{bidibeamer-xepersian.def}}}
\generate{\file{bidimoderncv-xepersian.def}{\from{xepersian.dtx}{bidimoderncv-xepersian.def}}}
\generate{\file{bookest-xepersian.def}{\from{xepersian.dtx}{bookest-xepersian.def}}}
\generate{\file{book-xepersian.def}{\from{xepersian.dtx}{book-xepersian.def}}}
\generate{\file{footnote-bidi-xepersian.def}{\from{xepersian.dtx}{footnote-bidi-xepersian.def}}}
\generate{\file{localise-xepersian.def}{\from{xepersian.dtx}{localise-xepersian.def}}}
\generate{\file{commands-ltx.def}{\from{xepersian.dtx}{commands-ltx.def}}}
\generate{\file{commands-xepersian.def}{\from{xepersian.dtx}{commands-xepersian.def}}}
\generate{\file{enumerate-xepersian.def}{\from{xepersian.dtx}{enumerate-xepersian.def}}}
\generate{\file{environments-ltx.def}{\from{xepersian.dtx}{environments-ltx.def}}}
\generate{\file{environments-xepersian.def}{\from{xepersian.dtx}{environments-xepersian.def}}}
\generate{\file{extbook-xepersian.def}{\from{xepersian.dtx}{extbook-xepersian.def}}}
\generate{\file{kashida-xepersian.def}{\from{xepersian.dtx}{kashida-xepersian.def}}}
\generate{\file{listings-xepersian.def}{\from{xepersian.dtx}{listings-xepersian.def}}}
\generate{\file{bidimemoir-xepersian.def}{\from{xepersian.dtx}{bidimemoir-xepersian.def}}}
\generate{\file{minitoc-xepersian.def}{\from{xepersian.dtx}{minitoc-xepersian.def}}}
\generate{\file{misccommandsenvironments-ltx.def}{\from{xepersian.dtx}{misccommandsenvironments-ltx.def}}}
\generate{\file{refrep-xepersian.def}{\from{xepersian.dtx}{refrep-xepersian.def}}}
\generate{\file{report-xepersian.def}{\from{xepersian.dtx}{report-xepersian.def}}}
\generate{\file{rapport3-xepersian.def}{\from{xepersian.dtx}{rapport3-xepersian.def}}}
\generate{\file{scrartcl-xepersian.def}{\from{xepersian.dtx}{scrartcl-xepersian.def}}}
\generate{\file{scrbook-xepersian.def}{\from{xepersian.dtx}{scrbook-xepersian.def}}}
\generate{\file{scrreprt-xepersian.def}{\from{xepersian.dtx}{scrreprt-xepersian.def}}}
\generate{\file{tocloft-xepersian.def}{\from{xepersian.dtx}{tocloft-xepersian.def}}}
\generate{\file{xepersian-magazine.cls}{\from{xepersian.dtx}{xepersian-magazine.cls}}}
\generate{\file{xepersian-mathsdigitspec.sty}{\from{xepersian.dtx}{xepersian-mathsdigitspec.sty}}}
\generate{\file{xepersian-multiplechoice.sty}{\from{xepersian.dtx}{xepersian-multiplechoice.sty}}}
\generate{\file{xepersian-persiancal.sty}{\from{xepersian.dtx}{xepersian-persiancal.sty}}}
\generate{\file{xepersian-thesis.cls}{\from{xepersian.dtx}{xepersian-thesis.cls}}}
\generate{\file{xepersian-thesis-xepersian.def}{\from{xepersian.dtx}{xepersian-thesis-xepersian.def}}}
\generate{\file{acm-fa.bst}{\from{xepersian.dtx}{acm-fa.bst}}}
\generate{\file{ieeetr-fa.bst}{\from{xepersian.dtx}{ieeetr-fa.bst}}}
\generate{\file{plain-fa.bst}{\from{xepersian.dtx}{plain-fa.bst}}}
\generate{\file{unsrt-fa.bst}{\from{xepersian.dtx}{unsrt-fa.bst}}}
%</batchfile>
%<batchfile>\endbatchfile
%<*internal>
\generate{\file{xepersian.ins}{\from{xepersian.dtx}{batchfile}}}
\nopreamble\nopostamble
\generate{\file{README.txt}{\from{xepersian.dtx}{readme}}}
\generate{\file{parsidigits.map}{\from{xepersian.dtx}{parsidigits.map}}}
\generate{\file{txt2maths.map}{\from{xepersian.dtx}{txt2maths.map}}}
\generate{\file{thesis-sample.tex}{\from{xepersian.dtx}{thesis-sample.tex}}}
\generate{\file{magazine-sample.tex}{\from{xepersian.dtx}{magazine-sample.tex}}}
\generate{\file{test-correction.tex}{\from{xepersian.dtx}{test-correction.tex}}}
\generate{\file{test-empty-form.tex}{\from{xepersian.dtx}{test-empty-form.tex}}}
\generate{\file{test-question-only.tex}{\from{xepersian.dtx}{test-question-only.tex}}}
\generate{\file{test-solution-form.tex}{\from{xepersian.dtx}{test-solution-form.tex}}}
\generate{\file{acm-fa-output.tex}{\from{xepersian.dtx}{acm-fa-output.tex}}}
\generate{\file{bibtex-example.tex}{\from{xepersian.dtx}{bibtex-example.tex}}}
\generate{\file{ieeetr-fa-output.tex}{\from{xepersian.dtx}{ieeetr-fa-output.tex}}}
\generate{\file{MyReferences.bib}{\from{xepersian.dtx}{MyReferences.bib}}}
\generate{\file{plain-fa-output.tex}{\from{xepersian.dtx}{plain-fa-output.tex}}}
\endgroup
%</internal>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage[sc,osf]{mathpazo}
\usepackage{fvrb-ex}
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\OnlyDescription

\begin{document}
  \DocInput{xepersian.dtx}
\end{document}
%</driver>
%
%
% \fi
%
% \GetFileInfo{bidi.sty}
% \makeatletter
%
%\title{The \textsf{XePersian} Package}
%\author{Vafa Khalighi\\
%\footnotesize\texttt{<vafa@users.berlios.de>}}
%
% \StopEventually{}
% \section{Implementation}
% \part{xepersian.sty}
%\iffalse
%<*xepersian.sty>
% \fi
%
%
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\def\xepersianversion{v1.0.1}
\def\xepersianrevision{revision 88}
\def\xepersiandate{2009/07/15}
\ProvidesPackage{xepersian}[\xepersiandate\space \xepersianversion\space <\xepersianrevision>
	Persian typesetting in XeLaTeX]
\DeclareOption{Kashida}{\input{kashida-xepersian.def}}
\DeclareOption{localise}{\input{localise-xepersian.def}}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{bidi}}
\ProcessOptions\relax
\newcommand\xepersian@isloaded[2][]{
  \expandafter\ifx\csname if@xepersian@#2loaded@\endcsname\relax
    \expandafter\newif\csname if@xepersian@#2loaded@\endcsname
  \fi
  \@ifpackageloaded{#2}
    {\csname @xepersian@#2loaded@true\endcsname #1}
    {\csname @xepersian@#2loaded@false\endcsname}}
\xepersian@isloaded{xunicode}
\AtBeginDocument{
  \if@xepersian@xunicodeloaded@
    \xepersian@isloaded[\PackageError{xepersian}{Oops! you have loaded package xunicode before xepersian package. Please load package xunicode after xepersian package, and then try to run xelatex on your document again}{}]{xunicode}
  \fi%
}
\AtBeginDocument{\ifdefined\persianfont\relax\else%
\PackageError{xepersian}{Oops! you have not specified any font for the main text of the document. Please specify a font for the main text of the document by using \settextfont\space CS, and then try to run xelatex on your document again}%
\fi}
\AtBeginDocument{\ifdefined\latinfont\relax\else%
\PackageError{xepersian}{Oops! you have not specified any font for the Latin texts of the document. Please specify a font for the Latin texts of the document by using \setlatintextfont\space CS, and then try to run xelatex on your document again}%
\fi}
\AtBeginDocument{\ifdefined\decimalseparator\relax\else%
\PackageWarning{xepersian}{“You have not specified any font for the digits in maths mode and so the digits in maths mode will appear Latin. If you would like to have Persian digits in maths mode, then please specify a font for the digits in maths mode by using \setdigitfont\space CS, and then try to run xelatex on your document again”}%
\fi}
\RequirePackage[RTLdocument]{bidi}
\RequirePackage{fontspec}
\RequirePackage{xepersian-persiancal}
\RequirePackage{xepersian-mathsdigitspec}
\RequirePackage{etoolbox}
\AtBeginDocument{\special{pdf: docinfo <<
	/Creator (X∃Persian \xepersianversion\space <\xepersianrevision> Copyright © 2008-2009 Vafa Khalighi)
         >>}}
\gdef\@latex@error#1#2{%
   \GenericError{%
      \space\space\space\@spaces\@spaces\@spaces
   }{%
      XePersian Error: #1%
   }{%
      Oops! either you have done something wrong or it is a xepersian bug. Please first produce a similar file without using XePersian package and then compile it with xelatex, if you got the same error, then please study the Persian translation of “The not so Short Introduction to LaTeX” by MEHDI OMIDALI, otherwise please report the error with a minimal tex file which shows the error to  the Author of XePersian.%
   }{#2}%
}
\gdef\@latexbug{%
  \@latex@error{This may be a XePersian bug}{Please inform the Author of XePersian}}
\def\prq{«}
\def\plq{»}
\newfontscript{Persian}{arab}
\newfontlanguage{Persian}{ARA}
\newcommand*\settextfont[2][]{%
\newfontfamily\persianfont[Script=Persian,Mapping=parsidigits,#1]{#2}
\let\rmdefault\zf@family
  \normalfont
}
\newcommand*\settxtmathfont[2][]{%
\newfontfamily\TXTmath[Mapping=txt2maths,#1]{#2}
}
\newcommand*\setlatintextfont[2][]{%
\newfontfamily\latinfont[Mapping=tex-text,#1]{#2}
}
\newcommand*\defpersianfont[1]{%
  \@ifnextchar[{\defpersianfont@i#1}{\defpersianfont@i#1[]}}
\def\defpersianfont@i#1[#2]#3{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#2}{#3}%
  \edef\@tempa{%
    \noexpand\DeclareRobustCommand\noexpand#1
      {\noexpand\fontfamily{\zf@family}\noexpand\selectfont}}%
  \@tempa}
\newcommand*\deflatinfont[1]{%
  \@ifnextchar[{\deflatinfont@i#1}{\deflatinfont@i#1[]}}
\def\deflatinfont@i#1[#2]#3{%
  \zf@fontspec{Mapping=tex-text,#2}{#3}%
  \edef\@tempa{%
    \noexpand\DeclareRobustCommand\noexpand#1
      {\noexpand\fontfamily{\zf@family}\noexpand\selectfont}}%
  \@tempa}
\newcommand\persiansfdefault{}
\newcommand\persianttdefault{}
\newcommand\navardefault{}
\newcommand\pookdefault{}
\newcommand\sayehdefault{}
\DeclareRobustCommand\persiansffamily
        {\not@math@alphabet\persiansffamily\mathpersiansf
         \fontfamily\persiansfdefault\selectfont}
\DeclareRobustCommand\persianttfamily
        {\not@math@alphabet\persianttfamily\mathpersiantt
         \fontfamily\persianttdefault\selectfont}
\DeclareRobustCommand\navarfamily
        {\not@math@alphabet\navarfamily\mathnavar
         \fontfamily\navardefault\selectfont}
\DeclareRobustCommand\pookfamily
        {\not@math@alphabet\pookfamily\mathpook
         \fontfamily\pookdefault\selectfont}
\DeclareRobustCommand\sayehfamily
        {\not@math@alphabet\sayehfamily\mathsayeh
         \fontfamily\sayehdefault\selectfont}
\DeclareTextFontCommand{\textpersiansf}{\persiansffamily}
\DeclareTextFontCommand{\textpersiantt}{\persianttfamily}
\DeclareTextFontCommand{\textnavar}{\navarfamily}
\DeclareTextFontCommand{\textpook}{\pookfamily}
\DeclareTextFontCommand{\textsayeh}{\sayehfamily}
\newcommand*\setpersiansansfont[2][]{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#1}{#2}%
  \let\persiansfdefault\zf@family
  \normalfont}
\newcommand*\setpersianmonofont[2][]{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#1}{#2}%
  \let\persianttdefault\zf@family
  \normalfont}
\newcommand*\setnavarfont[2][]{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#1}{#2}%
  \let\navardefault\zf@family
  \normalfont}
\newcommand*\setpookfont[2][]{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#1}{#2}%
  \let\pookdefault\zf@family
  \normalfont}
\newcommand*\setsayehfont[2][]{%
  \zf@fontspec{Script=Persian,Mapping=parsidigits,#1}{#2}%
  \let\sayehdefault\zf@family
  \normalfont}
\def\lr#1{\begingroup\beginL\latinfont#1\endL\endgroup}
\def\rl#1{\begingroup\beginR\persianfont#1\endR\endgroup}
\def\latin{\bgroup\LatinAlphs\par\@RTLfalse\@RTL@footnotefalse\latinfont}
\def\endlatin{\par\egroup}
\def\persian{\bgroup\PersianAlphs\par\@RTLtrue\@RTL@footnotetrue\persianfont}
\def\endpersian{\par\egroup}
\def\Latin{\if@RTL\par\LatinAlphs\@RTLfalse\@RTL@footnotefalse\latinfont\fi}
\def\Persian{\if@RTL\relax\else\par\PersianAlphs\@RTLtrue\@RTL@footnotetrue\persianfont\fi}
\let\originaltoday=\today
\def\today{\lr{\originaltoday}}
\let\latintoday\today
\def\today{\rl{\persiantoday}}
\newcommand\twocolumnstableofcontents{%
  \begin{multicols}{2}[\section*{\contentsname}]%
    \small
    \@starttoc{toc}%
  \end{multicols}}
\def\XePersian{\lr{\leavevmode$\smash{\hbox{X\lower.5ex
  \hbox{\kern-.125em\reflect{E}}Persian}}$}}
\def\TeX{\lr{\@@TeX}}
\def\LaTeX{\lr{\@@LaTeX}}
\def\LaTeXe{\lr{\@@LaTeXe}}
\let\origin@XeTeX\XeTeX
\def\XeTeX{\lr{\origin@XeTeX}}
\let\origin@XeLaTeX\XeLaTeX
\def\XeLaTeX{\lr{\origin@XeLaTeX}}
\def\figurename{\if@RTL شکل\else Figure\fi}
\def\tablename{\if@RTL جدول\else Table\fi}
\def\contentsname{\if@RTL فهرست مطالب\else Contents\fi}
\def\listfigurename{\if@RTL لیست تصاویر\else List of Figures\fi}
\def\listtablename{\if@RTL لیست جداول\else List of Tables\fi}
\def\appendixname{\if@RTL پیوست\else Appendix\fi}
\def\indexname{\if@RTL نمایه\else Index\fi}
\def\refname{\if@RTL مراجع\else References\fi}
\def\abstractname{\if@RTL چکیده\else Abstract\fi}
\def\partname{\if@RTL بخش\else Part\fi}
\def\datename{\if@RTL تاریخ:\else Date:\fi}
\def\@@and{\if@RTL و\else and\fi}
\def\bibname{\if@RTL کتاب‌نامه\else Bibliography\fi}
\def\chaptername{\if@RTL فصل\else Chapter\fi}
\def\ccname{\if@RTL رونوشت\else cc\fi}
\def\enclname{\if@RTL پیوست\else encl\fi}
\def\pagename{\if@RTL صفحه\else Page\fi}
\def\headtoname{\if@RTL به\else To\fi}
\def\proofname{\if@RTL اثبات\else Proof\fi}
\def\@harfi#1{\ifcase#1\or الف\char"200D\or ب\or پ\or ت\or ث\or
ج\or چ\or ح\or خ\or د\or ذ\or ر\or ز\or س\or ش\or ص\or ض\or ع\or غ\or
ف\or ق\or ک\or گ\or ل\or م\or ن\or ه\or و\or ی\else\@ctrerr\fi}
\def\harfi#1{\expandafter\@harfi\csname c@#1\endcsname}
\def\@adadi#1{\ifcase#1 \or یک\or دو\or سه\or چهار\or پنج\or شش\or هفت\or هشت\or نه\or ده\or یازده\or دوازده\or سیزده\or چهارده\or پانزده\or شانزده\or هفده\or هجده\or نوزده\or بیست\else\@ctrerr\fi}
\def\adadi#1{\expandafter\@adadi\csname c@#1\endcsname}
\def\@tartibi#1{\ifcase#1 \or اول \or دوم \or سوم \or چهارم \or پنجم \or ششم \or هفتم \or هشتم \or نهم \or دهم \or یازدهم \or دوازدهم \or سیزدهم \or چهاردهم \or پانزدهم \or شانزدهم \or هفدهم \or هجدهم \or نوزدهم \or بیستم\else\@ctrerr\fi}
\def\tartibi#1{\expandafter\@tartibi\csname c@#1\endcsname}
\providecommand*{\xpg@warning}[1]{%
   \PackageWarning{XePersian}%
   {#1}}      
\ifcsdef{abjad}{}{%
\def\abjad#1{%
\ifnum#1>1999 \xpg@warning{Illegal value (#1) for abjad numeral} {#1}
\else
  \ifnum#1<\z@\space\xpg@warning{Illegal value (#1) for abjad numeral}%
  \else
    \ifnum#1<10\expandafter\abj@num@i\number#1%
    \else
      \ifnum#1<100\expandafter\abj@num@ii\number#1%
      \else
        \ifnum#1<\@m\expandafter\abj@num@iii\number#1%
        \else
          \ifnum#1<\@M\expandafter\abj@num@iv\number#1%since #1<2000, we must have 1000
          \fi
        \fi
      \fi
    \fi
  \fi
\fi
}
\def\abjad@zero{}
\def\abj@num@i#1{%
  \ifcase#1\or الف\or ب\or ج\or د%
           \or ه\char"200D\or و\or ز\or ح\or ط\fi
  \ifnum#1=\z@\abjad@zero\fi}
\def\abj@num@ii#1{%
  \ifcase#1\or ی\or ک\or ل\or م\or ن%
           \or س\or ع\or ف\or ص\fi
  \ifnum#1=\z@\fi\abj@num@i}
\def\abj@num@iii#1{%
  \ifcase#1\or ق\or ر\or ش\or ت\or ث%
            \or خ\or ذ\or ض\or ظ\fi
  \ifnum#1=\z@\fi\abj@num@ii}
\def\abj@num@iv#1{%
  \ifcase#1\or غ\fi
  \ifnum#1=\z@\fi\abj@num@iii}
}
   \let\@latinalph\@alph%
   \let\@latinAlph\@Alph%
\def\PersianAlphs{%
   \let\@alph\abjad%
   \let\@Alph\abjad%
}
\def\LatinAlphs{%
   \let\@alph\@latinalph%
   \let\@Alph\@latinAlph%
}
\PersianAlphs
\@ifpackageloaded{listings}{\input{listings-xepersian.def}}{}
\@ifpackageloaded{algorithmic}{\input{algorithmic-xepersian.def}}{}
\@ifpackageloaded{algorithm}{\input{algorithm-xepersian.def}}{}
\@ifpackageloaded{backref}{\input{backref-xepersian.def}}{}
\@ifpackageloaded{bidi}{\input{footnote-bidi-xepersian.def}}{}
\@ifpackageloaded{enumerate}{\input{enumerate-xepersian.def}}{}
\@ifpackageloaded{minitoc}{\input{minitoc-xepersian.def}}{}
\@ifpackageloaded{tocloft}{\input{tocloft-xepersian.def}}{}
\@ifclassloaded{article}{\input{article-xepersian.def}}{}
\@ifclassloaded{amsart}{\input{amsart-xepersian.def}}{}
\@ifclassloaded{bidimoderncv}{\input{bidimoderncv-xepersian.def}}{}
\@ifclassloaded{report}{\input{report-xepersian.def}}{}
\@ifclassloaded{rapport3}{\input{rapport3-xepersian.def}}{}
\@ifclassloaded{scrartcl}{\input{scrartcl-xepersian.def}}{}
\@ifclassloaded{scrbook}{\input{scrbook-xepersian.def}}{}
\@ifclassloaded{scrreprt}{\input{scrreprt-xepersian.def}}{}
\@ifclassloaded{xepersian-thesis}{\input{xepersian-thesis-xepersian.def}}{}
\@ifclassloaded{amsbook}{\input{amsbook-xepersian.def}}{}
\@ifclassloaded{bookest}{\input{bookest-xepersian.def}}{}
\@ifclassloaded{extbook}{\input{extbook-xepersian.def}}{}
\@ifclassloaded{book}{\input{book-xepersian.def}}{}
\@ifclassloaded{refrep}{\input{refrep-xepersian.def}}{}
\@ifclassloaded{bidibeamer}{\input{bidibeamer-xepersian.def}}{}
\@ifclassloaded{bidimemoir}{\input{bidimemoir-xepersian.def}}{}
%    \end{macrocode}
% \iffalse
%</xepersian.sty>
%<*algorithmic-xepersian.def>
% \fi
% \part{algorithmic-xepersian.def}
%    \begin{macrocode}
\def\algorithmicrequire{\if@RTL\textbf{ورودی:}\else\textbf{Require:}\fi}
\def\algorithmicensure{\if@RTL\textbf{خروجی:}\else\textbf{Ensure:}\fi}
%    \end{macrocode}
% \iffalse
%</algorithmic-xepersian.def>
%<*algorithm-xepersian.def>
% \fi
% \part{algorithm-xepersian.def}
%    \begin{macrocode}
\def\ALG@name{\if@RTL الگوریتم\else Algorithm\fi}
\def\ALGS@name{الگوریتم‌ها}
\def\listalgorithmname{\if@RTL لیست \ALGS@name\else List of \ALG@name s\fi}
%    \end{macrocode}
% \iffalse
%</algorithm-xepersian.def>
%<*amsart-xepersian.def>
% \fi
% \part{amsart-xepersian.def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
\renewcommand\appendix{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\thesection{\@harfi\c@section}}
%    \end{macrocode}
% \iffalse
%</amsart-xepersian.def>
%<*amsbook-xepersian.def>
% \fi
% \part{amsbook-xepersian.def}
%    \begin{macrocode}
\def\frontmatter{\cleardoublepage\pagenumbering{harfi}}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</amsbook-xepersian.def>
%<*article-xepersian.def>
% \fi
% \part{article-xepersian-def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
\renewcommand\appendix{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\thesection{\@harfi\c@section}}
%    \end{macrocode}
% \iffalse
%</article-xepersian.def>
%<*backref-xepersian.def>
% \fi
% \part{backref-xepersian.def}
%    \begin{macrocode}
\def\backrefpagesname{\if@RTL صفحات\else pages\fi}
%    \end{macrocode}
% \iffalse
%</backref-xepersian.def>
%<*bidibeamer-xepersian.def>
% \fi
% \part{bidibeamer-xepersian.def}
%    \begin{macrocode}
\def\familydefault{\rmdefault}
\def\latin{\bgroup\LatinAlphs\par\raggedright\@RTLfalse\@RTL@footnotefalse\latinfont}
\def\endlatin{\par\egroup}
\def\persian{\bgroup\PersianAlphs\par\raggedleft\@RTLtrue\@RTL@footnotetrue\persianfont}
\def\endpersian{\par\egroup}
\def\biditheoremname{قضیه}
\def\bidicorollaryname{نتیجه}
\def\bidifactname{حقیقت}
\def\bidilemmaname{لم}
\def\bidiproblemname{مسئله}
\def\bidisolutionname{پاسخ}
\def\bididefinitionname{تعریف}
\def\bididefinitionsname{تعریف‌ها}
\def\bidiexamplename{مثال}
\def\bidiexamplesname{مثال‌ها}
\def\bidiproofname{اثبات}
%    \end{macrocode}
% \iffalse
%</bidibeamer-xepersian.def>
%<*bidimoderncv-xepersian.def>
% \fi
% \part{bidimoderncv-xepersian.def}
%    \begin{macrocode}
\def\refname{تألیفات}
%    \end{macrocode}
% \iffalse
%</bidimoderncv-xepersian.def>
%<*bookest-xepersian.def>
% \fi
% \part{bookest-xepersian.def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</bookest-xepersian.def>
%<*book-xepersian.def>
% \fi
% \part{book-xepersian.def}
%    \begin{macrocode}
\renewcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{harfi}}
\renewcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering Persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</book-xepersian.def>
%<*footnote-bidi-xepersian.def>
% \fi
% \part{footnote-bidi-xepersian.def}
%    \begin{macrocode}
\long\def\@footnotetext#1{%
    \begingroup
    \setbox\footins
    \vbox{\if@RTL@footnote\@RTLtrue\else\@RTLfalse\fi\reset@font\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \bidi@footnotetext@dir{#1}%
    \protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
    {\rule{\z@}{\footnotesep}\ignorespaces\if@RTL@footnote#1\else\latinfont#1\fi\strut}}%
     \bidi@footnotetext@after
    \insert\footins{\unvbox\footins}%
    \endgroup}
\long\def\@RTLfootnotetext#1{%
    \begingroup
    \setbox\footins
    \vbox{\@RTLtrue\reset@font\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \bidi@footnotetext@dir{#1}%
    \protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
    {\rule{\z@}{\footnotesep}\ignorespaces\persianfont #1\strut}}%
     \bidi@footnotetext@after
    \insert\footins{\unvbox\footins}%
    \endgroup}
\long\def\@LTRfootnotetext#1{%
    \begingroup
    \setbox\footins
    \vbox{\@RTLfalse\reset@font\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \bidi@footnotetext@dir{#1}%
    \protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
    {\rule{\z@}{\footnotesep}\ignorespaces\latinfont #1\strut}}%
     \bidi@footnotetext@after
    \insert\footins{\unvbox\footins}%
    \endgroup}
\long\def\@mpfootnotetext#1{
  \global\setbox\@mpfootins\vbox{\if@RTL@footnote\@RTLtrue\else\@RTLfalse\fi
    \unvbox\@mpfootins
    \reset@font\footnotesize
    \hsize\columnwidth
    \@parboxrestore
    \protected@edef\@currentlabel
         {\csname p@mpfootnote\endcsname\@thefnmark}
    \color@begingroup
     \bidi@footnotetext@dir{#1}
    \if@RTL\global\let\bidi@footnoterule\right@footnote\else\global\let\bidi@footnoterule\left@footnote\fi
      \@makefntext{
        \rule\z@\footnotesep\ignorespaces\if@RTL@footnote#1\else\latinfont#1\fi\@finalstrut\strutbox}
    \color@endgroup}}
\long\def\@mpRTLfootnotetext#1{
  \global\setbox\@mpfootins\vbox{\@RTLtrue
    \unvbox\@mpfootins
    \reset@font\footnotesize
    \hsize\columnwidth
    \@parboxrestore
    \protected@edef\@currentlabel
         {\csname p@mpfootnote\endcsname\@thefnmark}
    \color@begingroup
     \bidi@footnotetext@dir{#1}
    \if@RTL\global\let\bidi@footnoterule\right@footnote\else\global\let\bidi@footnoterule\left@footnote\fi
      \@makefntext{
        \rule\z@\footnotesep\ignorespaces\persianfont#1\@finalstrut\strutbox}
    \color@endgroup}}
\long\def\@mpLTRfootnotetext#1{
  \global\setbox\@mpfootins\vbox{\@RTLfalse
    \unvbox\@mpfootins
    \reset@font\footnotesize
    \hsize\columnwidth
    \@parboxrestore
    \protected@edef\@currentlabel
         {\csname p@mpfootnote\endcsname\@thefnmark}
    \color@begingroup
     \bidi@footnotetext@dir{#1}
    \if@RTL\global\let\bidi@footnoterule\right@footnote\else\global\let\bidi@footnoterule\left@footnote\fi
      \@makefntext{
        \rule\z@\footnotesep\ignorespaces\latinfont#1\@finalstrut\strutbox}
    \color@endgroup}}
%    \end{macrocode}
% \iffalse
%</footnote-bidi-xepersian.def>
%<*localise-xepersian.def>
% \fi
% \part{localise-xepersian.def}
%    \begin{macrocode}
\catcode`\﷼=3
\catcode`‌=11
\newcommand\eqcommand[2][]{\let#1=#2}
\newcommand\eqenvironment[2][]{\newenvironment{#1}{\begin{#2}}{\end{#2}}}
\define@key[zf]{options}{مقیاس}{%
  \edef\@tempa{#1}%
  \edef\@tempb{MatchLowercase}%
  \ifx\@tempa\@tempb
    \zf@calc@scale{5}%
  \else
    \edef\@tempb{MatchUppercase}%
    \ifx\@tempa\@tempb
      \zf@calc@scale{8}%
    \else
      \edef\zf@scale{#1}%
    \fi
  \fi
  \zf@update@family{+scale:\zf@scale}%
  \edef\zf@scale{s*[\zf@scale]}}
\input{commands-ltx.def}
\input{commands-xepersian.def}
\input{environments-ltx.def}
\input{environments-xepersian.def}
\input{misccommandsenvironments-ltx.def}
%    \end{macrocode}
% \iffalse
%</localise-xepersian.def>
%<*commands-ltx.def>
% \fi
% \part{commands-ltx.def}
%    \begin{macrocode}
\eqcommand[]{\abovedisplayshortskip}
\eqcommand[]{\abovedisplayskip}
\eqcommand[]{\abstractname}
\eqcommand[]{\acute}
\eqcommand[]{\addcontentsline}
\eqcommand[]{\address}
\eqcommand[]{\addtocontents}
\eqcommand[]{\addtocounter}
\eqcommand[]{\addtolength}
\eqcommand[]{\addvspace}
\eqcommand[]{\aleph}
\eqcommand[]{\allowdisplaybreaks}
\eqcommand[]{\Alph}
\eqcommand[]{\alph}
\eqcommand[]{\alpha}
\eqcommand[]{\alsoname}
\eqcommand[]{\amalg}
\eqcommand[]{\and}
\eqcommand[]{\angle}
\eqcommand[]{\appendixname}
\eqcommand[]{\approx}
\eqcommand[]{\arabic}
\eqcommand[]{\arccos}
\eqcommand[]{\arcsin}
\eqcommand[]{\arctan}
\eqcommand[]{\arg}
\eqcommand[]{\arraycolsep}
\eqcommand[]{\arrayrulewidth}
\eqcommand[]{\arraystretch}
\eqcommand[]{\ast}
\eqcommand[]{\asymp}
\eqcommand[]{\AtBeginDocument}
\eqcommand[]{\AtEndDocument}
\eqcommand[]{\AtEndOfClass}
\eqcommand[]{\AtEndOfPackage}
\eqcommand[]{\author}
\eqcommand[]{\backmatter}
\eqcommand[]{\backslash}
\eqcommand[]{\bar}
\eqcommand[]{\baselineskip}
\eqcommand[]{\baselinestretch}
\eqcommand[]{\begin}
\eqcommand[]{\belowdisplayshortskip}
\eqcommand[]{\belowdisplayskip}
\eqcommand[]{\beta}
\eqcommand[]{\bfdefault}
\eqcommand[]{\bfseries}
\eqcommand[]{\bibitem}
\eqcommand[]{\bibliography}
\eqcommand[]{\bibliographystyle}
\eqcommand[]{\bibname}
\eqcommand[]{\big}
\eqcommand[]{\Big}
\eqcommand[]{\bigcap}
\eqcommand[]{\bigcirc}
\eqcommand[]{\bigcup}
\eqcommand[]{\bigg}
\eqcommand[]{\Bigg}
\eqcommand[]{\bigodot}
\eqcommand[]{\bigoplus}
\eqcommand[]{\bigotimes}
\eqcommand[]{\bigskip}
\eqcommand[]{\bigskipamount}
\eqcommand[]{\bigsqcup}
\eqcommand[]{\bigtriangledown}
\eqcommand[]{\bigtriangleup}
\eqcommand[]{\biguplus}
\eqcommand[]{\bigvee}
\eqcommand[]{\bigwedge}
\eqcommand[]{\binom}
\eqcommand[]{\bmod}
\eqcommand[]{\boldmath}
\eqcommand[]{\boldsymbol}
\eqcommand[]{\bot}
\eqcommand[]{\botfigrule}
\eqcommand[]{\bottomfraction}
\eqcommand[]{\bowtie}
\eqcommand[]{\Box}
\eqcommand[]{\boxed}
\eqcommand[]{\breve}
\eqcommand[]{\bullet}
\eqcommand[]{\cap}
\eqcommand[]{\caption}
\eqcommand[]{\cc}
\eqcommand[]{\ccname}
\eqcommand[]{\cdot}
\eqcommand[]{\cdots}
\eqcommand[]{\centering}
\eqcommand[]{\centerline}
\eqcommand[]{\cfrac}
\eqcommand[]{\chapter}
\eqcommand[]{\chapter*}
\eqcommand[]{\chaptername}
\eqcommand[]{\check}
\eqcommand[]{\CheckCommand}
\eqcommand[]{\chi}
\eqcommand[]{\circ}
\eqcommand[]{\circle}
\eqcommand[]{\circle*}
\eqcommand[]{\cite}
\eqcommand[]{\citep}
\eqcommand[]{\citet}
\eqcommand[]{\ClassError}
\eqcommand[]{\ClassInfo}
\eqcommand[]{\ClassWarning}
\eqcommand[]{\ClassWarningNoLine}
\eqcommand[]{\cleardoublepage}
\eqcommand[]{\clearpage}
\eqcommand[]{\cline}
\eqcommand[]{\closing}
\eqcommand[]{\clubsuit}
\eqcommand[]{\color}
\eqcommand[]{\colorbox}
\eqcommand[]{\columnsep}
\eqcommand[]{\columnseprule}
\eqcommand[]{\cong}
\eqcommand[]{\contentsline}
\eqcommand[]{\contentsname}
\eqcommand[]{\coprod}
\eqcommand[]{\copyright}
\eqcommand[]{\cos}
\eqcommand[]{\cosh}
\eqcommand[]{\cot}
\eqcommand[]{\coth}
\eqcommand[]{\csc}
\eqcommand[]{\cup}
\eqcommand[]{\CurrentOption}
\eqcommand[]{\dag}
\eqcommand[]{\dagger}
\eqcommand[]{\dashbox}
\eqcommand[]{\dashv}
\eqcommand[]{\date}
\eqcommand[]{\dbinom}
\eqcommand[]{\dblfigrule}
\eqcommand[]{\dblfloatpagefraction}
\eqcommand[]{\dblfloatsep}
\eqcommand[]{\dbltextfloatsep}
\eqcommand[]{\dbltopfraction}
\eqcommand[]{\ddag}
\eqcommand[]{\ddagger}
\eqcommand[]{\dddot}
\eqcommand[]{\ddddot}
\eqcommand[]{\ddot}
\eqcommand[]{\ddots}
\eqcommand[]{\DeclareGraphicsExtensions}
\eqcommand[]{\DeclareGraphicsRule}
\eqcommand[]{\DeclareOption}
\eqcommand[]{\DeclareOption*}
\eqcommand[]{\DeclareRobustCommand}
\eqcommand[]{\DeclareRobustCommand*}
\eqcommand[]{\definecolor}
\eqcommand[]{\deg}
\eqcommand[]{\DeleteShortVerb}
\eqcommand[]{\Delta}
\eqcommand[]{\delta}
\eqcommand[]{\depth}
\eqcommand[]{\det}
\eqcommand[]{\dfrac}
\eqcommand[]{\Diamond}
\eqcommand[]{\diamond}
\eqcommand[]{\diamondsuit}
\eqcommand[]{\dim}
\eqcommand[]{\discretionary}
\eqcommand[]{\displaybreak}
\eqcommand[]{\displaystyle}
\eqcommand[]{\div}
\eqcommand[]{\documentclass}
\eqcommand[]{\dot}
\eqcommand[]{\doteq}
\eqcommand[]{\dotfill}
\eqcommand[]{\dots}
\eqcommand[]{\dotsb}
\eqcommand[]{\dotsc}
\eqcommand[]{\dotsi}
\eqcommand[]{\dotsm}
\eqcommand[]{\doublebox}
\eqcommand[]{\doublerulesep}
\eqcommand[]{\Downarrow}
\eqcommand[]{\downarrow}
\eqcommand[]{\ell}
\eqcommand[]{\em}
\eqcommand[]{\emph}
\eqcommand[]{\emptyset}
\eqcommand[]{\encl}
\eqcommand[]{\enclname}
\eqcommand[]{\end}
\eqcommand[]{\endfirsthead}
\eqcommand[]{\endfoot}
\eqcommand[]{\endhead}
\eqcommand[]{\endlastfoot}
\eqcommand[]{\enlargethispage}
\eqcommand[]{\enlargethispage*}
\eqcommand[]{\ensuremath}
\eqcommand[]{\epsilon}
\eqcommand[]{\eqref}
\eqcommand[]{\equiv}
\eqcommand[]{\eta}
\eqcommand[]{\euro}
\eqcommand[]{\EUR}
\eqcommand[]{\evensidemargin}
\eqcommand[]{\ExecuteOptions}
\eqcommand[]{\exists}
\eqcommand[]{\exp}
\eqcommand[]{\extracolsep}
\eqcommand[]{\fancypage}
\eqcommand[]{\fbox}
\eqcommand[]{\fboxrule}
\eqcommand[]{\fboxsep}
\eqcommand[]{\fcolorbox}
\eqcommand[]{\figurename}
\eqcommand[]{\fill}
\eqcommand[]{\flat}
\eqcommand[]{\floatpagefraction}
\eqcommand[]{\floatsep}
\eqcommand[]{\flushbottom}
\eqcommand[]{\fnsymbol}
\eqcommand[]{\fontfamily}
\eqcommand[]{\fontseries}
\eqcommand[]{\fontshape}
\eqcommand[]{\fontsize}
\eqcommand[]{\LTRfootnote}
\eqcommand[]{\footnote}
\eqcommand[]{\footnotemark}
\eqcommand[]{\footnoterule}
\eqcommand[]{\footnotesep}
\eqcommand[]{\footnotesize}
\eqcommand[]{\footnotetext}
\eqcommand[]{\footskip}
\eqcommand[]{\forall}
\eqcommand[]{\frac}
\eqcommand[]{\frame}
\eqcommand[]{\framebox}
\eqcommand[]{\frenchspacing}
\eqcommand[]{\frontmatter}
\eqcommand[]{\frown}
\eqcommand[]{\fussy}
\eqcommand[]{\Gamma}
\eqcommand[]{\gamma}
\eqcommand[]{\gcd}
\eqcommand[]{\ge}
\eqcommand[]{\genfrac}
\eqcommand[]{\geq}
\eqcommand[]{\gets}
\eqcommand[]{\gg}
\eqcommand[]{\glossary}
\eqcommand[]{\glossaryentry}
\eqcommand[]{\graphpaper}
\eqcommand[]{\grave}
\eqcommand[]{\guillemotleft}
\eqcommand[]{\guillemotright}
\eqcommand[]{\guilsinglleft}
\eqcommand[]{\guilsinglright}
\eqcommand[]{\hat}
\eqcommand[]{\hbar}
\eqcommand[]{\headheight}
\eqcommand[]{\headsep}
\eqcommand[]{\headtoname}
\eqcommand[]{\heartsuit}
\eqcommand[]{\height}
\eqcommand[]{\hfill}
\eqcommand[]{\hline}
\eqcommand[]{\hoffset}
\eqcommand[]{\hom}
\eqcommand[]{\hookleftarrow}
\eqcommand[]{\hookrightarrow}
\eqcommand[]{\hrulefill}
\eqcommand[]{\hspace}
\eqcommand[]{\hspace*}
\eqcommand[]{\huge}
\eqcommand[]{\Huge}
\eqcommand[]{\hyperlink}
\eqcommand[]{\hypersetup}
\eqcommand[]{\hypertarget}
\eqcommand[]{\hyphenation}
\eqcommand[]{\idotsint}
\eqcommand[]{\iff}
\eqcommand[]{\IfFileExists}
\eqcommand[]{\ifthenelse}
\eqcommand[]{\Im}
\eqcommand[]{\imath}
\eqcommand[]{\in}
\eqcommand[]{\include}
\eqcommand[]{\includegraphics}
\eqcommand[]{\includegraphics*}
\eqcommand[]{\includeonly}
\eqcommand[]{\indent}
\eqcommand[]{\index}
\eqcommand[]{\indexentry}
\eqcommand[]{\indexname}
\eqcommand[]{\indexspace}
\eqcommand[]{\inf}
\eqcommand[]{\infty}
\eqcommand[]{\input}
\eqcommand[]{\InputIfFileExists}
\eqcommand[]{\int}
\eqcommand[]{\iint}
\eqcommand[]{\iiint}
\eqcommand[]{\iiiint}
\eqcommand[]{\intertext}
\eqcommand[]{\intertextsep}
\eqcommand[]{\invisible}
\eqcommand[]{\iota}
\eqcommand[]{\itdefault}
\eqcommand[]{\item}
\eqcommand[]{\itemindent}
\eqcommand[]{\itemsep}
\eqcommand[]{\itshape}
\eqcommand[]{\jmath}
\eqcommand[]{\join}
\eqcommand[]{\jot}
\eqcommand[]{\kappa}
\eqcommand[]{\ker}
\eqcommand[]{\kill}
\eqcommand[]{\label}
\eqcommand[]{\labelenumi}
\eqcommand[]{\labelenumii}
\eqcommand[]{\labelenumiii}
\eqcommand[]{\labelenumiv}
\eqcommand[]{\labelitemi}
\eqcommand[]{\labelitemii}
\eqcommand[]{\labelitemiii}
\eqcommand[]{\labelitemiv}
\eqcommand[]{\labelsep}
\eqcommand[]{\labelwidth}
\eqcommand[]{\Lambda}
\eqcommand[]{\lambda}
\eqcommand[]{\langle}
\eqcommand[]{\language}
\eqcommand[]{\large}
\eqcommand[]{\Large}
\eqcommand[]{\LARGE}
\eqcommand[]{\LaTeX}
\eqcommand[]{\LaTeXe}
\eqcommand[]{\lceil}
\eqcommand[]{\ldots}
\eqcommand[]{\le}
\eqcommand[]{\leadsto}
\eqcommand[]{\left}
\eqcommand[]{\Leftarrow}
\eqcommand[]{\leftarrow}
\eqcommand[]{\lefteqn}
\eqcommand[]{\leftharpoondown}
\eqcommand[]{\leftharpoonup}
\eqcommand[]{\leftmargin}
\eqcommand[]{\Leftrightarrow}
\eqcommand[]{\leftrightarrow}
\eqcommand[]{\leftroot}
\eqcommand[]{\leq}
\eqcommand[]{\lfloor}
\eqcommand[]{\lg}
\eqcommand[]{\lhd}
\eqcommand[]{\lim}
\eqcommand[]{\liminf}
\eqcommand[]{\limits}
\eqcommand[]{\limsup}
\eqcommand[]{\line}
\eqcommand[]{\linebreak}
\eqcommand[]{\linethickness}
\eqcommand[]{\linewidth}
\eqcommand[]{\listfigurename}
\eqcommand[]{\listfiles}
\eqcommand[]{\listoffigures}
\eqcommand[]{\listoftables}
\eqcommand[]{\listparindent}
\eqcommand[]{\listtablename}
\eqcommand[]{\ll}
\eqcommand[]{\ln}
\eqcommand[]{\LoadClass}
\eqcommand[]{\LoadClassWithOptions}
\eqcommand[]{\location}
\eqcommand[]{\log}
\eqcommand[]{\Longleftarrow}
\eqcommand[]{\longleftarrow}
\eqcommand[]{\Longleftrightarrow}
\eqcommand[]{\longleftrightarrow}
\eqcommand[]{\longmapsto}
\eqcommand[]{\Longrightarrow}
\eqcommand[]{\longrightarrow}
\eqcommand[]{\lvert}
\eqcommand[]{\lVert}
\eqcommand[]{\mainmatter}
\eqcommand[]{\makebox}
\eqcommand[]{\makeglossary}
\eqcommand[]{\makeindex}
\eqcommand[]{\makelabel}
\eqcommand[]{\makelabels}
\eqcommand[]{\MakeLowercase}
\eqcommand[]{\MakeShortVerb}
\eqcommand[]{\maketitle}
\eqcommand[]{\MakeUppercase}
\eqcommand[]{\mapsto}
\eqcommand[]{\marginpar}
\eqcommand[]{\marginparpush}
\eqcommand[]{\marginparsep}
\eqcommand[]{\marginparwidth}
\eqcommand[]{\markboth}
\eqcommand[]{\markright}
\eqcommand[]{\mathbf}
\eqcommand[]{\mathcal}
\eqcommand[]{\mathindent}
\eqcommand[]{\mathit}
\eqcommand[]{\mathnormal}
\eqcommand[]{\mathring}
\eqcommand[]{\mathrm}
\eqcommand[]{\mathsf}
\eqcommand[]{\mathtt}
\eqcommand[]{\max}
\eqcommand[]{\mbox}
\eqcommand[]{\mddefault}
\eqcommand[]{\mdseries}
\eqcommand[]{\medskip}
\eqcommand[]{\medskipamount}
\eqcommand[]{\medspace}
\eqcommand[]{\MessageBreak}
\eqcommand[]{\mho}
\eqcommand[]{\mid}
\eqcommand[]{\min}
\eqcommand[]{\mod}
\eqcommand[]{\models}
\eqcommand[]{\mp}
\eqcommand[]{\mspace}
\eqcommand[]{\mu}
\eqcommand[]{\multicolumn}
\eqcommand[]{\multiput}
\eqcommand[]{\multlinegap}
\eqcommand[]{\nabla}
\eqcommand[]{\name}
\eqcommand[]{\natural}
\eqcommand[]{\nearrow}
\eqcommand[]{\NeedsTeXFormat}
\eqcommand[]{\neg}
\eqcommand[]{\negmedspace}
\eqcommand[]{\negthickspace}
\eqcommand[]{\negthinspace}
\eqcommand[]{\neq}
\eqcommand[]{\newboolean}
\eqcommand[]{\newcommand}
\eqcommand[]{\newcommand*}
\eqcommand[]{\newcounter}
\eqcommand[]{\newenvironment}
\eqcommand[]{\newenvironment*}
\eqcommand[]{\newfont}
\eqcommand[]{\newlength}
\eqcommand[]{\newline}
\eqcommand[]{\newpage}
\eqcommand[]{\newsavebox}
\eqcommand[]{\newtheorem}
\eqcommand[]{\ni}
\eqcommand[]{\nocite}
\eqcommand[]{\nofiles}
\eqcommand[]{\noindent}
\eqcommand[]{\nolimits}
\eqcommand[]{\nolinebreak}
\eqcommand[]{\nonfrenchspacing}
\eqcommand[]{\nonumber}
\eqcommand[]{\nopagebreak}
\eqcommand[]{\normalcolor}
\eqcommand[]{\normalfont}
\eqcommand[]{\normalmarginpar}
\eqcommand[]{\normalsize}
\eqcommand[]{\not}
\eqcommand[]{\notag}
\eqcommand[]{\notin}
\eqcommand[]{\nu}
\eqcommand[]{\numberwithin}
\eqcommand[]{\nwarrow}
\eqcommand[]{\oddsidemargin}
\eqcommand[]{\odot}
\eqcommand[]{\oint}
\eqcommand[]{\Omega}
\eqcommand[]{\omega}
\eqcommand[]{\ominus}
\eqcommand[]{\onecolumn}
\eqcommand[]{\onlynotes}
\eqcommand[]{\onlyslides}
\eqcommand[]{\opening}
\eqcommand[]{\oplus}
\eqcommand[]{\OptionNotUsed}
\eqcommand[]{\oslash}
\eqcommand[]{\otimes}
\eqcommand[]{\oval}
\eqcommand[]{\ovalbox}
\eqcommand[]{\Ovalbox}
\eqcommand[]{\overbrace}
\eqcommand[]{\overleftarrow}
\eqcommand[]{\overleftrightarrow}
\eqcommand[]{\overline}
\eqcommand[]{\overrightarrow}
\eqcommand[]{\overset}
\eqcommand[]{\PackageError}
\eqcommand[]{\PackageInfo}
\eqcommand[]{\PackageWarning}
\eqcommand[]{\PackageWarningNoLine}
\eqcommand[]{\pagebreak}
\eqcommand[]{\pagecolor}
\eqcommand[]{\pagename}
\eqcommand[]{\pagenumbering}
\eqcommand[]{\pageref}
\eqcommand[]{\pagestyle}
\eqcommand[]{\paperheight}
\eqcommand[]{\paperwidth}
\eqcommand[]{\par}
\eqcommand[]{\paragraph}
\eqcommand[]{\paragraph*}
\eqcommand[]{\parallel}
\eqcommand[]{\parbox}
\eqcommand[]{\parindent}
\eqcommand[]{\parsep}
\eqcommand[]{\parskip}
\eqcommand[]{\part}
\eqcommand[]{\part*}
\eqcommand[]{\partial}
\eqcommand[]{\partname}
\eqcommand[]{\partopsep}
\eqcommand[]{\PassOptionToClass}
\eqcommand[]{\PassOptionToPackage}
\eqcommand[]{\path}
\eqcommand[]{\prep}
\eqcommand[]{\Phi}
\eqcommand[]{\phi}
\eqcommand[]{\Pi}
\eqcommand[]{\pi}
\eqcommand[]{\pm}
\eqcommand[]{\pmb}
\eqcommand[]{\pmod}
\eqcommand[]{\pod}
\eqcommand[]{\poptabs}
\eqcommand[]{\pounds}
\eqcommand[]{\Pr}
\eqcommand[]{\prec}
\eqcommand[]{\preceq}
\eqcommand[]{\prime}
\eqcommand[]{\printindex}
\eqcommand[]{\ProcessOptions}
\eqcommand[]{\ProcessOptions*}
\eqcommand[]{\prod}
\eqcommand[]{\propto}
\eqcommand[]{\protect}
\eqcommand[]{\providecommand}
\eqcommand[]{\providecommand*}
\eqcommand[]{\ProvidesClass}
\eqcommand[]{\ProvidesFile}
\eqcommand[]{\ProvidesPackage}
\eqcommand[]{\ps}
\eqcommand[]{\Psi}
\eqcommand[]{\psi}
\eqcommand[]{\pushtabs}
\eqcommand[]{\put}
\eqcommand[]{\qbezier}
\eqcommand[]{\qquad}
\eqcommand[]{\quad}
\eqcommand[]{\raggedbottom}
\eqcommand[]{\raggedleft}
\eqcommand[]{\raggedright}
\eqcommand[]{\raisebox}
\eqcommand[]{\raisetag}
\eqcommand[]{\rangle}
\eqcommand[]{\rceil}
\eqcommand[]{\Re}
\eqcommand[]{\ref}
\eqcommand[]{\reflectbox}
\eqcommand[]{\refname}
\eqcommand[]{\refstepcounter}
\eqcommand[]{\renewcommand}
\eqcommand[]{\renewcommand*}
\eqcommand[]{\renewenvironment}
\eqcommand[]{\renewenvironment*}
\eqcommand[]{\RequirePackage}
\eqcommand[]{\RequirePackageWithOptions}
\eqcommand[]{\resizebox}
\eqcommand[]{\resizebox*}
\eqcommand[]{\reversemarginpar}
\eqcommand[]{\rfloor}
\eqcommand[]{\rhd}
\eqcommand[]{\rho}
\eqcommand[]{\right}
\eqcommand[]{\Rightarrow}
\eqcommand[]{\rightarrow}
\eqcommand[]{\rightharpoondown}
\eqcommand[]{\rightharpoonup}
\eqcommand[]{\rightleftharpoons}
\eqcommand[]{\rightmargin}
\eqcommand[]{\rmdefault}
\eqcommand[]{\rmfamily}
\eqcommand[]{\Roman}
\eqcommand[]{\roman}
\eqcommand[]{\rotatebox}
\eqcommand[]{\rule}
\eqcommand[]{\rvert}
\eqcommand[]{\rVert}
\eqcommand[]{\savebox}
\eqcommand[]{\sbox}
\eqcommand[]{\scalebox}
\eqcommand[]{\scdefault}
\eqcommand[]{\scriptscriptstyle}
\eqcommand[]{\scriptsize}
\eqcommand[]{\scripstyle}
\eqcommand[]{\scshape}
\eqcommand[]{\searrow}
\eqcommand[]{\sec}
\eqcommand[]{\section}
\eqcommand[]{\section*}
\eqcommand[]{\see}
\eqcommand[]{\seealso}
\eqcommand[]{\seename}
\eqcommand[]{\selectfont}
\eqcommand[]{\setboolean}
\eqcommand[]{\setcounter}
\eqcommand[]{\setlength}
\eqcommand[]{\setminus}
\eqcommand[]{\settodepth}
\eqcommand[]{\settoheight}
\eqcommand[]{\settowidth}
\eqcommand[]{\sfdefault}
\eqcommand[]{\sffamily}
\eqcommand[]{\shadowbox}
\eqcommand[]{\sharp}
\eqcommand[]{\shortstack}
\eqcommand[]{\sideset}
\eqcommand[]{\Sigma}
\eqcommand[]{\sigma}
\eqcommand[]{\signature}
\eqcommand[]{\sim}
\eqcommand[]{\simeq}
\eqcommand[]{\sin}
\eqcommand[]{\sinh}
\eqcommand[]{\sldefault}
\eqcommand[]{\sloppy}
\eqcommand[]{\slshape}
\eqcommand[]{\small}
\eqcommand[]{\smallskip}
\eqcommand[]{\smallskipamount}
\eqcommand[]{\smash}
\eqcommand[]{\smile}
\eqcommand[]{\spadesuit}
\eqcommand[]{\sqcap}
\eqcommand[]{\sqcup}
\eqcommand[]{\sqrt}
\eqcommand[]{\sqsubset}
\eqcommand[]{\sqsubseteq}
\eqcommand[]{\sqsupset}
\eqcommand[]{\sqsupseteq}
\eqcommand[]{\stackrel}
\eqcommand[]{\star}
\eqcommand[]{\stepcounter}
\eqcommand[]{\stretch}
\eqcommand[]{\subitem}
\eqcommand[]{\subparagraph}
\eqcommand[]{\subparagraph*}
\eqcommand[]{\subsection}
\eqcommand[]{\subsection*}
\eqcommand[]{\substack}
\eqcommand[]{\subsubitem}
\eqcommand[]{\subsubsection}
\eqcommand[]{\subsubsection*}
\eqcommand[]{\subset}
\eqcommand[]{\subseteq}
\eqcommand[]{\succ}
\eqcommand[]{\succeq}
\eqcommand[]{\sum}
\eqcommand[]{\sup}
\eqcommand[]{\supressfloats}
\eqcommand[]{\supset}
\eqcommand[]{\supseteq}
\eqcommand[]{\surd}
\eqcommand[]{\swarrow}
\eqcommand[]{\tabbingsep}
\eqcommand[]{\tabcolsep}
\eqcommand[]{\tableofcontents}
\eqcommand[]{\tablename}
\eqcommand[]{\tabularnewline}
\eqcommand[]{\tag}
\eqcommand[]{\tan}
\eqcommand[]{\tanh}
\eqcommand[]{\tau}
\eqcommand[]{\tbinom}
\eqcommand[]{\telephone}
\eqcommand[]{\TeX}
\eqcommand[]{\text}
\eqcommand[]{\textbullet}
\eqcommand[]{\textemdash}
\eqcommand[]{\textendash}
\eqcommand[]{\textexclamdown}
\eqcommand[]{\textperiodcentered}
\eqcommand[]{\textquestiondown}
\eqcommand[]{\textquotedblleft}
\eqcommand[]{\textquotedblright}
\eqcommand[]{\textquoteleft}
\eqcommand[]{\textquoteright}
\eqcommand[]{\textvisiblespace}
\eqcommand[]{\textasciicircum}
\eqcommand[]{\textasciitilde}
\eqcommand[]{\textbackslash}
\eqcommand[]{\textbar}
\eqcommand[]{\textgreater}
\eqcommand[]{\textless}
\eqcommand[]{\textbf}
\eqcommand[]{\textcircled}
\eqcommand[]{\textcolor}
\eqcommand[]{\textcompwordmark}
\eqcommand[]{\textfloatsep}
\eqcommand[]{\textfraction}
\eqcommand[]{\textheight}
\eqcommand[]{\textit}
\eqcommand[]{\textmd}
\eqcommand[]{\textnormal}
\eqcommand[]{\textregistered}
\eqcommand[]{\textrm}
\eqcommand[]{\textsc}
\eqcommand[]{\textsf}
\eqcommand[]{\textsl}
\eqcommand[]{\textstyle}
\eqcommand[]{\textsuperscript}
\eqcommand[]{\texttrademark}
\eqcommand[]{\texttt}
\eqcommand[]{\textup}
\eqcommand[]{\textwidth}
\eqcommand[]{\tfrac}
\eqcommand[]{\thanks}
\eqcommand[]{\Theta}
\eqcommand[]{\theta}
\eqcommand[]{\thicklines}
\eqcommand[]{\thickspace}
\eqcommand[]{\thinlines}
\eqcommand[]{\thinspace}
\eqcommand[]{\thisfancypage}
\eqcommand[]{\thispagestyle}
\eqcommand[]{\tilde}
\eqcommand[]{\tiny}
\eqcommand[]{\times}
\eqcommand[]{\title}
\eqcommand[]{\to}
\eqcommand[]{\today}
\eqcommand[]{\top}
\eqcommand[]{\topfigrule}
\eqcommand[]{\topfraction}
\eqcommand[]{\topmargin}
\eqcommand[]{\topsep}
\eqcommand[]{\topskip}
\eqcommand[]{\totalheight}
\eqcommand[]{\triangle}
\eqcommand[]{\triangleleft}
\eqcommand[]{\triangleright}
\eqcommand[]{\ttdefault}
\eqcommand[]{\ttfamily}
\eqcommand[]{\twocolumn}
\eqcommand[]{\typein}
\eqcommand[]{\typeout}
\eqcommand[]{\unboldmath}
\eqcommand[]{\underbrace}
\eqcommand[]{\underleftarrow}
\eqcommand[]{\underleftrightarrow}
\eqcommand[]{\underline}
\eqcommand[]{\underrightarrow}
\eqcommand[]{\underset}
\eqcommand[]{\unitlength}
\eqcommand[]{\unlhd}
\eqcommand[]{\unrhd}
\eqcommand[]{\Uparrow}
\eqcommand[]{\uparrow}
\eqcommand[]{\updefault}
\eqcommand[]{\Updownarrow}
\eqcommand[]{\updownarrow}
\eqcommand[]{\uplus}
\eqcommand[]{\upshape}
\eqcommand[]{\Upsilon}
\eqcommand[]{\upsilon}
\eqcommand[]{\uproot}
\eqcommand[]{\url}
\eqcommand[]{\urlstyle}
\eqcommand[]{\usebox}
\eqcommand[]{\usecounter}
\eqcommand[]{\usefont}
\eqcommand[]{\usepackage}
\eqcommand[]{\value}
\eqcommand[]{\varepsilon}
\eqcommand[]{\varinjlim}
\eqcommand[]{\varliminf}
\eqcommand[]{\varlimsup}
\eqcommand[]{\varphi}
\eqcommand[]{\varpi}
\eqcommand[]{\varprojlim}
\eqcommand[]{\varrho}
\eqcommand[]{\varsigma}
\eqcommand[]{\vartheta}
\eqcommand[]{\vdash}
\eqcommand[]{\vdots}
\eqcommand[]{\vec}
\eqcommand[]{\vector}
\eqcommand[]{\vee}
\eqcommand[]{\verb}
\eqcommand[]{\verb*}
\eqcommand[]{\vfill}
\eqcommand[]{\visible}
\eqcommand[]{\vline}
\eqcommand[]{\voffset}
\eqcommand[]{\vpageref}
\eqcommand[]{\vref}
\eqcommand[]{\vspace}
\eqcommand[]{\vspace*}
\eqcommand[]{\wedge}
\eqcommand[]{\whiledo}
\eqcommand[]{\widehat}
\eqcommand[]{\widetilde}
\eqcommand[]{\width}
\eqcommand[]{\wp}
\eqcommand[]{\wr}
\eqcommand[]{\Xi}
\eqcommand[]{\xi}
\eqcommand[]{\xleftarrow}
\eqcommand[]{\xrightarrow}
\eqcommand[]{\zeta}
%    \end{macrocode}
% \iffalse
%</commands-ltx.def>
%<*commands-xepersian.def>
% \fi
% \part{commands-xepersian.def}
%    \begin{macrocode}

%    \end{macrocode}
% \iffalse
%</commands-xepersian.def>
%<*enumerate-xepersian.def>
% \fi
% \part{enumerate-xepersian.def}
%    \begin{macrocode}
\def\@enloop@{%
  \ifx ا\@entemp         \def\@tempa{\@enLabel\harfi  }\else
  \ifx ی\@entemp         \def\@tempa{\@enLabel\adadi  }\else
  \ifx ت\@entemp         \def\@tempa{\@enLabel\tartibi  }\else
  \ifx A\@entemp         \def\@tempa{\@enLabel\Alph  }\else
  \ifx a\@entemp         \def\@tempa{\@enLabel\alph  }\else
  \ifx i\@entemp         \def\@tempa{\@enLabel\roman }\else
  \ifx I\@entemp         \def\@tempa{\@enLabel\Roman }\else
  \ifx 1\@entemp         \def\@tempa{\@enLabel\arabic}\else
  \ifx \@sptoken\@entemp \let\@tempa\@enSpace         \else
  \ifx \bgroup\@entemp   \let\@tempa\@enGroup         \else
  \ifx \@enum@\@entemp   \let\@tempa\@gobble          \else
                         \let\@tempa\@enOther
                         \@enhook
             \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
  \@tempa}
%    \end{macrocode}
% \iffalse
%</enumerate-xepersian.def>
%<*minitoc-xepersian.def>
% \fi
% \part{minitoc-xepersian.def}
%    \begin{macrocode}
\def\ptctitle{\if@RTL فهرست مطالب\else Table of Contents\fi}%
\def\plftitle{\if@RTL لیست تصاویر\else List of Figures\fi}%
\def\plttitle{\if@RTL لیست جداول\else List of Tables\fi}%
\def\mtctitle{\if@RTL عناوین\else Contents\fi}%
\def\mlftitle{\if@RTL اشکال\else Figures\fi}%
\def\mlttitle{\if@RTL جداول\else Tables\fi}%
\def\stctitle{\if@RTL عناوین\else Contents\fi}%
\def\slftitle{\if@RTL اشکال\else Figures\fi}%
\def\slttitle{\if@RTL جداول\else Tables\fi}%
%    \end{macrocode}
% \iffalse
%</minitoc-xepersian.def>
%<*environments-ltx.def>
% \fi
% \part{environments-ltx.def}
%    \begin{macrocode}
\eqenvironment[]{abstract}
\eqenvironment[]{align}
\eqenvironment[]{alignat}
\eqenvironment[]{aligned}
\eqenvironment[]{appendix}
\eqenvironment[]{array}
\eqenvironment[]{center}
\eqenvironment[]{alltt}
\eqenvironment[]{bmatrix}
\eqenvironment[]{Bmatrix}
\eqenvironment[]{cases}
\eqenvironment[]{description}
\eqenvironment[]{displaymath}
\eqenvironment[]{enumerate}
\eqenvironment[]{eqnarray}
\eqenvironment[]{eqnarray*}
\eqenvironment[]{equation}
\eqenvironment[]{equation*}
\eqenvironment[]{falign}
\eqenvironment[]{figure}
\eqenvironment[]{figure*}
\eqenvironment[]{filecontents}
\eqenvironment[]{filecontents*}
\eqenvironment[]{flushleft}
\eqenvironment[]{flushright}
\eqenvironment[]{gather}
\eqenvironment[]{gathered}
\eqenvironment[]{itemize}
\eqenvironment[]{letter}
\eqenvironment[]{list}
\eqenvironment[]{longtable}
\eqenvironment[]{lrbox}
\eqenvironment[]{math}
\eqenvironment[]{matrix}
\eqenvironment[]{minipage}
\eqenvironment[]{multicols}
\eqenvironment[]{multline}
\eqenvironment[]{note}
\eqenvironment[]{overlay}
\eqenvironment[]{picture}
\eqenvironment[]{pmatrix}
\eqenvironment[]{quotation}
\eqenvironment[]{quote}
\eqenvironment[]{slide}
\eqenvironment[]{sloppypar}
\eqenvironment[]{split}
\eqenvironment[]{subarray}
\eqenvironment[]{subequations}
\eqenvironment[]{tabbing}
\eqenvironment[]{table}
\eqenvironment[]{table*}
\eqenvironment[]{tabular}
\eqenvironment[]{tabular*}
\eqenvironment[]{thebibliography}
\eqenvironment[]{theindex}
\eqenvironment[]{titlepage}
\eqenvironment[]{trivlist}
\eqenvironment[]{verbatim}
\eqenvironment[]{verbatim*}
\eqenvironment[]{verse}
\eqenvironment[]{vmatrix}
\eqenvironment[]{Vmatrix}
%    \end{macrocode}
% \iffalse
%</environments-ltx.def>
%<*environments-xepersian.def>
% \fi
% \part{environments-xepersian.def}
%    \begin{macrocode}

%    \end{macrocode}
% \iffalse
%</environments-xepersian.def>
%<*extbook-xepersian.def>
% \fi
% \part{extbook-xepersian.def}
%    \begin{macrocode}
\renewcommand\frontmatter{%
    \cleardoublepage
  \@mainmatterfalse
  \pagenumbering{harfi}}
\renewcommand\mainmatter{%
    \cleardoublepage
  \@mainmattertrue
  \pagenumbering{arabic}}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering Persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</extbook-xepersian.def>
%<*kashida-xepersian.def>
% \fi
% \part{kashida-xepersian.def}
%    \begin{macrocode}
\chardef\zwj="200D % zero-width joiner
\chardef\ksh="0640 % kashida

\chardef\D=10 % dual-joiner class
\chardef\L=11 % lam
\chardef\R=12 % right-joiner
\chardef\A=13 % alef
\chardef\V=256 % vowel or other combining mark (to be ignored)

\def\kashida{\zwj\nobreak \setbox0=\hbox{\ksh}%
    \leaders\hrule height\ht0 \hskip0pt plus 0.5em \zwj}

\def\setclass#1#2{\def\theclass{#1}\def\charlist{#2}%
  \expandafter\dosetclass\charlist,\end}
\def\dosetclass#1,#2\end{%
  \def\test{#1}\def\charlist{#2}%
  \ifx\test\empty\let\next\finishsetclass
  \else \XeTeXcharclass "\test = \theclass
     \let\next\dosetclass \fi
  \expandafter\next\charlist,,\end}
\def\finishsetclass#1,,\end{}

\setclass \A {0622,0623,0625,0627}
\setclass \R {0624,0629,062F,0630,0631,0632,0648,0698}
\setclass \D {0626,0628,062A,062B,062C,062D,062E}
\setclass \D {0633,0634,0635,0636,0637,0638,0639,063A}
\setclass \D {0640,0641,0642,0643,0645,0646,0647,0649,064A}
\setclass \D {067E,0686,06A9,06AF,06CC}
\setclass \L {0644}
\setclass \V {064B,064C,064D,064E,064F,0650,0651,0652}

\XeTeXinterchartoks \D \D = {\kashida}
\XeTeXinterchartoks \L \D = {\kashida}
\XeTeXinterchartoks \D \L = {\kashida}
\XeTeXinterchartoks \L \L = {\kashida}
\XeTeXinterchartoks \D \R = {\kashida}
\XeTeXinterchartoks \D \A = {\kashida}
\XeTeXinterchartoks \L \R = {\kashida}
\XeTeXinterchartoks \L \A = {}

\XeTeXinterchartokenstate=1
%    \end{macrocode}
% \iffalse
%</kashida-xepersian.def>
%<*listings-xepersian.def>
% \fi
% \part{listings-xepersian.def}
%    \begin{macrocode}
\def\lstlistingname{برنامهٔ}
\def\lstlistlistingname{فهرست برنامه‌ها}
%    \end{macrocode}
% \iffalse
%</listings-xepersian.def>
%<*bidimemoir-xepersian.def>
% \fi
% \part{bidimemoir-xepersian.def}
%    \begin{macrocode}
\renewcommand{\@memfront}{%
  \@smemfront\pagenumbering{harfi}}
\renewcommand{\setthesection}{\thechapter\@SepMark\harfi{section}}
\renewcommand*{\thebook}{\@tartibi\c@book}
\renewcommand*{\thepart}{\@tartibi\c@part}
\renewcommand{\appendix}{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}%
  \anappendixtrue}
%    \end{macrocode}
% \iffalse
%</bidimemoir-xepersian.def>
%<*misccommandsenvironments-ltx.def>
% \fi
% \part{misccommandsenvironments-ltx.def}
%    \begin{macrocode}
\eqcommand[\سند]{\document}
\eqcommand[\endسند]{\enddocument}
%    \end{macrocode}
% \iffalse
%</misccommandsenvironments-ltx.def>
%<*refrep-xepersian.def>
% \fi
% \part{refrep-xepersian.def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering Persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</refrep-xepersian.def>
%<*report-xepersian.def>
% \fi
% \part{report-xepersian.def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering Persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</report-xepersian.def>
%<*rapport3-xepersian.def>
% \fi
% \part{rapport3-xepersian.def}
%    \begin{macrocode}
\renewcommand*\thepart{\@tartibi\c@part}
\renewcommand*\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}}
%    \end{macrocode}
% \iffalse
%</rapport3-xepersian.def>
%<*scrartcl-xepersian.def>
% \fi
% \part{scrartcl-xepersian.def}
%    \begin{macrocode}
\renewcommand*\descfont{\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\DeclareOldFontCommand{\sf}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\if@RTL\persianttfamily\else\ttfamily\fi}{\mathtt}
\DeclareOldFontCommand{\sfb}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi\bfseries}{%
  \@nomath\sfb}
\renewcommand*\sectfont{\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\newkomafont{dictum-xepersian}{\normalfont\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\small}
\renewcommand*{\thepart}{\@tartibi\c@part}
\renewcommand*\appendix{\par%
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\thesection{\@harfi\c@section}%
  \csname appendixmore\endcsname
}
\renewcommand*{\@@maybeautodot}[1]{%
  \ifx #1\@stop\let\@@maybeautodot\relax
  \else
    \ifx #1\harfi \@autodottrue\fi
    \ifx #1\adadi \@autodottrue\fi
    \ifx #1\tartibi \@autodottrue\fi
    \ifx #1\Alph \@autodottrue\fi
    \ifx #1\alph \@autodottrue\fi
    \ifx #1\Roman \@autodottrue\fi
    \ifx #1\roman \@autodottrue\fi
    \ifx #1\@harfi \@autodottrue\fi
    \ifx #1\@adadi \@autodottrue\fi
    \ifx #1\@tartibi \@autodottrue\fi
    \ifx #1\@Alph \@autodottrue\fi
    \ifx #1\@alph \@autodottrue\fi
    \ifx #1\@Roman \@autodottrue\fi
    \ifx #1\@roman \@autodottrue\fi
    \ifx #1\romannumeral \@autodottrue\fi
  \fi
  \@@maybeautodot
}
%    \end{macrocode}
% \iffalse
%</scrartcl-xepersian.def>
%<*scrbook-xepersian.def>
% \fi
% \part{scrbook-xepersian.def}
%    \begin{macrocode}
\renewcommand*\descfont{\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\DeclareOldFontCommand{\sf}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\if@RTL\persianttfamily\else\ttfamily\fi}{\mathtt}
\DeclareOldFontCommand{\sfb}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi\bfseries}{%
  \@nomath\sfb}
\renewcommand*\sectfont{\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\newkomafont{dictum-xepersian}{\normalfont\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\small}
\renewcommand*\frontmatter{%
  \if@twoside\cleardoubleoddpage\else\clearpage\fi
  \@mainmatterfalse\pagenumbering{harfi}%
}
\renewcommand*{\thepart}{\@tartibi\c@part}
\renewcommand*\appendix{\par%
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}%
  \csname appendixmore\endcsname
}
\renewcommand*{\@@maybeautodot}[1]{%
  \ifx #1\@stop\let\@@maybeautodot\relax
  \else
    \ifx #1\harfi \@autodottrue\fi
    \ifx #1\adadi \@autodottrue\fi
    \ifx #1\tartibi \@autodottrue\fi
    \ifx #1\Alph \@autodottrue\fi
    \ifx #1\alph \@autodottrue\fi
    \ifx #1\Roman \@autodottrue\fi
    \ifx #1\roman \@autodottrue\fi
    \ifx #1\@harfi \@autodottrue\fi
    \ifx #1\@adadi \@autodottrue\fi
    \ifx #1\@tartibi \@autodottrue\fi
    \ifx #1\@Alph \@autodottrue\fi
    \ifx #1\@alph \@autodottrue\fi
    \ifx #1\@Roman \@autodottrue\fi
    \ifx #1\@roman \@autodottrue\fi
    \ifx #1\romannumeral \@autodottrue\fi
  \fi
  \@@maybeautodot
}
%    \end{macrocode}
% \iffalse
%</scrbook-xepersian.def>
%<*scrreprt-xepersian.def>
% \fi
% \part{scrreprt-xepersian.def}
%    \begin{macrocode}
\renewcommand*\descfont{\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\DeclareOldFontCommand{\sf}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\if@RTL\persianttfamily\else\ttfamily\fi}{\mathtt}
\DeclareOldFontCommand{\sfb}{\normalfont\if@RTL\persiansffamily\else\sffamily\fi\bfseries}{%
  \@nomath\sfb}
\renewcommand*\sectfont{\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\bfseries}
\newkomafont{dictum-xepersian}{\normalfont\normalcolor\if@RTL\persiansffamily\else\sffamily\fi\small}
\renewcommand*{\thepart}{\@tartibi\c@part}
\renewcommand*\appendix{\par%
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}%
  \csname appendixmore\endcsname
}
\renewcommand*{\@@maybeautodot}[1]{%
  \ifx #1\@stop\let\@@maybeautodot\relax
  \else
    \ifx #1\harfi \@autodottrue\fi
    \ifx #1\adadi \@autodottrue\fi
    \ifx #1\tartibi \@autodottrue\fi
    \ifx #1\Alph \@autodottrue\fi
    \ifx #1\alph \@autodottrue\fi
    \ifx #1\Roman \@autodottrue\fi
    \ifx #1\roman \@autodottrue\fi
    \ifx #1\@harfi \@autodottrue\fi
    \ifx #1\@adadi \@autodottrue\fi
    \ifx #1\@tartibi \@autodottrue\fi
    \ifx #1\@Alph \@autodottrue\fi
    \ifx #1\@alph \@autodottrue\fi
    \ifx #1\@Roman \@autodottrue\fi
    \ifx #1\@roman \@autodottrue\fi
    \ifx #1\romannumeral \@autodottrue\fi
  \fi
  \@@maybeautodot
}
%    \end{macrocode}
% \iffalse
%</scrreprt-xepersian.def>
%<*tocloft-xepersian.def>
% \fi
% \part{tocloft-xepersian.def}
%    \begin{macrocode}
\renewcommand*{\cftchapname}{\if@RTL فصل\else chapter\fi}
\renewcommand*{\cftsecname}{\if@RTL قسمت\else section\fi}
\renewcommand*{\cftsubsecname}{\if@RTL زیرقسمت\else subsection\fi}
\renewcommand*{\cftsubsubsecname}{\if@RTL زیرزیرقسمت\else subsubsection\fi}
\renewcommand*{\cftparaname}{\if@RTL پاراگراف\else paragraph\fi}
\renewcommand*{\cftsubparaname}{\if@RTL زیرپاراگراف\else subparagraph\fi}
\renewcommand*{\cftfigname}{\if@RTL شکل\else figure\fi}
\renewcommand*{\cftsubfigname}{\if@RTL زیرشکل\else subfigure\fi}
\renewcommand*{\cfttabname}{\if@RTL جدول\else table\fi}
\renewcommand*{\cftsubtabname}{\if@RTL زیرجدول\else subtable\fi}
%    \end{macrocode}
% \iffalse
%</tocloft-xepersian.def>
%<*xepersian-magazine.cls>
% \fi
% \part{xepersian-magazine.cls}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{xepersian-magazine}[2009/01/05 v0.1 Typesetting Persian magazines in XeLaTeX (Author: Vafa Khalighi)]
\RequirePackage{ifthen}
\newlength{\xepersian@imgsize}
\newlength{\xepersian@coltitsize}
\newlength{\xepersian@pageneed}
\newlength{\xepersian@pageleft}
\newlength{\xepersian@indexwidth}
\newcommand{\xepersian@ncolumns}{0}
\newlength{\columnlines}
\setlength{\columnlines}{0 pt} % no lines by default
\newboolean{xepersian@hyphenatedtitles}
\setboolean{xepersian@hyphenatedtitles}{true}
\newboolean{xepersian@ninepoints}
\setboolean{xepersian@ninepoints}{false}
\newboolean{xepersian@showgrid}
\setboolean{xepersian@showgrid}{false}
\newboolean{xepersian@a3paper}
\setboolean{xepersian@a3paper}{false}
\newboolean{xepersian@insidefrontpage}
\setboolean{xepersian@insidefrontpage}{false}
\newboolean{xepersian@insideweather}
\setboolean{xepersian@insideweather}{false}
\newboolean{xepersian@insideindex}
\setboolean{xepersian@insideindex}{false}
\newcount\xepersian@gridrows
\newcount\xepersian@gridcolumns
\xepersian@gridrows=40
\xepersian@gridcolumns=50
\newcount\minraggedcols
\minraggedcols=5
\DeclareOption{10pt}{\PassOptionsToClass{10pt}{article}}
\DeclareOption{11pt}{\PassOptionsToClass{11pt}{article}}
\DeclareOption{12pt}{\PassOptionsToClass{12pt}{article}}
\DeclareOption{twocolumn}%
{\ClassWarning{xepersian-magazine}{Option 'twocolumn' not available for xepersian-magazine.}}
\DeclareOption{notitlepage}%
{\ClassWarning{xepersian-magazine}{Option 'notitlepage' not available for xepersian-magazine.}}
\DeclareOption{twoside}%
{\ClassWarning{xepersian-magazine}{Option 'twoside' not available for xepersian-magazine.}}
\DeclareOption{9pt}{\setboolean{xepersian@ninepoints}{true}}
\DeclareOption{hyphenatedtitles}{\setboolean{xepersian@hyphenatedtitles}{false}}
\DeclareOption{columnlines}{\setlength{\columnlines}{0.1 pt}}
\DeclareOption{showgrid}{\setboolean{xepersian@showgrid}{true}}
\DeclareOption{a3paper}{\setboolean{xepersian@a3paper}{true}}
\ProcessOptions\relax
\LoadClass[10pt, onecolumn, titlepage, a4paper]{article}
\RequirePackage{ifxetex}
\RequirePackage{multido}
\RequirePackage{datetime}
\RequirePackage{fmultico}
\RequirePackage{fancyhdr}
\RequirePackage{fancybox}
\ifthenelse{\boolean{xepersian@a3paper}}{%
\RequirePackage[a3paper,headsep=0.5cm,vmargin={2cm,2cm},hmargin={1.5cm,1.5cm}]{geometry}
}{
\RequirePackage[headsep=0.5cm,vmargin={2cm,2cm},hmargin={1.5cm,1.5cm}]{geometry}
}
\RequirePackage[absolute]{textpos} % absoulte positioning
\RequirePackage{hyphenat} % when hyphenate
\RequirePackage{lastpage} % to know the last page number
\RequirePackage{setspace} % set space between lines
\RequirePackage{ragged2e}
\newcommand{\raggedFormat}{\RaggedLeft}
\AtEndOfClass{\xepersianInit}
\ifthenelse{\boolean{xepersian@showgrid}}{%
\AtBeginDocument{
\grid[show]{\xepersian@gridrows}{\xepersian@gridcolumns}}
\advance\minraggedcols by -1
}{%
\AtBeginDocument{
\grid[]{\xepersian@gridrows}{\xepersian@gridcolumns}}
\advance\minraggedcols by -1
}
\ifthenelse{\boolean{xepersian@ninepoints}}{
\renewcommand{\normalsize}{%
  \@setfontsize{\normalsize}{9pt}{10pt}%
  \setlength{\abovedisplayskip}{5pt plus 1pt minus .5pt}%
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \setlength{\abovedisplayshortskip}{3pt plus 1pt minus 2pt}%
  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}

\renewcommand{\tiny}{\@setfontsize{\tiny}{5pt}{6pt}}

\renewcommand{\scriptsize}{\@setfontsize{\scriptsize}{7pt}{8pt}}

\renewcommand{\small}{%
  \@setfontsize{\small}{8pt}{9pt}%
  \setlength{\abovedisplayskip}{4pt plus 1pt minus 1pt}%
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}

\renewcommand{\footnotesize}{%
  \@setfontsize{\footnotesize}{8pt}{9pt}%
  \setlength{\abovedisplayskip}{4pt plus 1pt minus .5pt}%
  \setlength{\belowdisplayskip}{\abovedisplayskip}%
  \setlength{\abovedisplayshortskip}{2pt plus 1pt}%
  \setlength{\belowdisplayshortskip}{\abovedisplayshortskip}}

\renewcommand{\large}{\@setfontsize{\large}{11pt}{13pt}}
\renewcommand{\Large}{\@setfontsize{\Large}{14pt}{18pt}}
\renewcommand{\LARGE}{\@setfontsize{\LARGE}{18pt}{20pt}}
\renewcommand{\huge}{\@setfontsize{\huge}{20pt}{25pt}}
\renewcommand{\Huge}{\@setfontsize{\Huge}{25pt}{30pt}}
}{}
\def\customwwwTxt#1{\gdef\@customwwwTxt{\lr{#1}}}
\newcommand{\xepersian@wwwFormat}{\sffamily}
\newcommand{\xepersian@www}{%
\raisebox{-3pt}{{\xepersian@wwwFormat\@customwwwTxt}}
}
\newcommand{\xepersian@edition}{ویرایش من}
\newcommand{\editionFormat}{\large\bfseries\texttt}
\newcommand{\xepersian@editionLogo}{%
\raisebox{-3pt}{%
{\editionFormat\xepersian@edition}%
}%
}
\newcommand{\indexFormat}{\large\bfseries}
\newcommand{\xepersian@indexFrameTitle}[1]
{\begin{flushright}{{\indexFormat #1}}\end{flushright}}

\newcommand{\indexEntryFormat}{\normalsize}
\newcommand{\xepersian@indexEntry}[1]{\begin{minipage}{13\TPHorizModule}%
{\indexEntryFormat\noindent\ignorespaces{#1}}%
\end{minipage}}
\newcommand{\indexEntrySeparator}{\rule{\xepersian@indexwidth}{.1pt}}
\newcommand{\indexEntryPageTxt}{صفحهٔ}
\newcommand{\indexEntryPageFormat}{\footnotesize}
\newcommand{\xepersian@indexEntryPage}[1]{%
{\indexEntryPageFormat{\indexEntryPageTxt{}~#1}}%
}
\newcommand{\headDateTimeFormat}{}
\newcommand{\xepersian@headDateTime}{%
\headDateTimeFormat\date\hspace{5pt}$\parallel$\hspace{5pt}%
\currenttime %
}
\newcommand{\weatherFormat}{\bfseries}
\newcommand{\xepersian@weather}[1]{%
\noindent{\weatherFormat #1}%
}
\newcommand{\weatherTempFormat}{\small}
\newcommand{\weatherUnits}{\textdegree{}C}
\newcommand{\xepersian@section}[0]{صفحهٔ جلو}
\newcommand{\xepersian@headleft}{%
{\small\bfseries \@custommagazinename}، \date
}
\newcommand{\xepersian@headcenter}{%
\xepersian@section{}
}
\newcommand{\xepersian@headright}{%
\small\xepersian@edition%
\hspace*{5pt}\beginL\thepage\ / \pageref{LastPage}\endL
}

\newcommand{\heading}[3]{%
\renewcommand{\xepersian@headleft}{\beginR#1\endR}%
\renewcommand{\xepersian@headcenter}{\beginR#2\endR}%
\renewcommand{\xepersian@headright}{\beginR#3\endR}%
}
\newcommand{\xepersian@footright}{%
{\footnotesize\lr{\copyright\ \@customwwwTxt{}}---تهیه‌شده توسط \lr{\XePersian}}%
}
\newcommand{\xepersian@footcenter}{%
}
\newcommand{\xepersian@footleft}{%
}

\newcommand{\foot}[3]{%
\renewcommand{\xepersian@footleft}{\beginR#1\endR}%
\renewcommand{\xepersian@footcenter}{\beginR#2\endR}%
\renewcommand{\xepersian@footright}{\beginR#3\endR}%
}
\newcommand{\firstTitleFormat}{\Huge\bfseries\flushright}
\newcommand{\xepersian@firstTitle}[1]{%
{%
\begin{spacing}{2.0}{%
\noindent\ignorespaces
\ifthenelse{\boolean{xepersian@hyphenatedtitles}}%
{\nohyphens{\firstTitleFormat #1}}%
{{\firstTitleFormat #1}}%
}%
\end{spacing}%
}%
}
\newcommand{\firstTextFormat}{}
\newcommand{\xepersian@firstText}[1]{%
{\noindent\ignorespaces\firstTextFormat #1}%
}
\newcommand{\secondTitleFormat}{\LARGE\bfseries}
\newcommand{\xepersian@secondTitle}[1]{%
\begin{spacing}{1.5}{%
\noindent\ignorespaces\flushright
\ifthenelse{\boolean{xepersian@hyphenatedtitles}}%
{\nohyphens{\secondTitleFormat #1}}%
{{\secondTitleFormat #1}}%
}\end{spacing}%
}
\newcommand{\secondSubtitleFormat}{\large}
\newcommand{\xepersian@secondSubtitle}[1]{%
{\noindent\ignorespaces{\secondSubtitleFormat #1}}%
}
\newcommand{\secondTextFormat}{}
\newcommand{\xepersian@secondText}[1]{%
\begin{multicols}{2}
{\noindent\ignorespaces\secondTextFormat #1}
\end{multicols}
}
\newcommand{\thirdTitleFormat}{\Large\bfseries}
\newcommand{\xepersian@thirdTitle}[1]{%
\begin{spacing}{1.5}{%
\noindent\ignorespaces\flushright
\ifthenelse{\boolean{xepersian@hyphenatedtitles}}%
{\nohyphens{\thirdTitleFormat #1}}%
{{\thirdTitleFormat #1}}%
}\end{spacing}%
}
\newcommand{\thirdSubtitleFormat}{\large}
\newcommand{\xepersian@thirdSubtitle}[1]%
{{\noindent\ignorespaces\thirdSubtitleFormat #1}}
\newcommand{\thirdTextFormat}{}
\newcommand{\xepersian@thirdText}[1]{{\thirdTextFormat #1}}
\newcommand{\pictureCaptionFormat}{\small\bfseries}
\newcommand{\xepersian@pictureCaption}[1]{%
{\noindent\pictureCaptionFormat #1}%
}
\newcommand{\pagesFormat}{\bfseries\footnotesize}
\newcommand{\xepersian@pages}[1]%
{\noindent{\pagesFormat\MakeUppercase{#1}}}
\newcommand{\innerTitleFormat}{\Huge}
\newcommand{\xepersian@innerTitle}[1]{%
\begin{flushright}{%
\noindent
\ifthenelse{\boolean{xepersian@hyphenatedtitles}}%
{\nohyphens{\innerTitleFormat #1}}%
{{\innerTitleFormat #1}}%
}%
\\%
\end{flushright}%
}
\newcommand{\innerSubtitleFormat}{\large}
\newcommand{\xepersian@innerSubtitle}[1]{{\innerSubtitleFormat #1}}
\newcommand{\timestampTxt}{}
\newcommand{\timestampSeparator}{|}
\newcommand{\timestampFormat}{\small}
\newcommand{\timestamp}[1]{%
{\timestampFormat%
#1~\timestampTxt{}%
}~\timestampSeparator{}%
}
\newcommand{\innerAuthorFormat}{\footnotesize}
\newcommand{\innerPlaceFormat}{\footnotesize\bfseries}
\newcommand{\innerTextFinalMark}{\rule{0.65em}{0.65em}}
\newcommand{\editorialTitleFormat}{\LARGE\textit}
\newcommand{\xepersian@editorialTitle}[1]{\editorialTitleFormat{#1}}
\newcommand{\editorialAuthorFormat}{\textsc}
\newcommand{\shortarticleTitleFormat}{\LARGE\bfseries}
\newcommand{\xepersian@shortarticleTitle}[1]{{\shortarticleTitleFormat #1}}
\newcommand{\shortarticleSubtitleFormat}{\Large}
\newcommand{\xepersian@shortarticleSubtitle}[1]{{\shortarticleSubtitleFormat #1}}
\newcommand{\shortarticleItemTitleFormat}{\large\bfseries}
\newcommand{\xepersian@shortarticleItemTitle}[1]{{\shortarticleItemTitleFormat #1}}
\renewcommand{\maketitle}{\begin{titlepage}%
  \let\footnotesize\small
  \let\footnoterule\relax
  \let \footnote \thanks
  \null\vfil
  \vskip 60\p@
  \begin{center}%
    {\LARGE \@title \par}%
    \vskip 1em%
    {\LARGE «\xepersian@edition» \par}%
    \vskip 3em%
    {\large
     \lineskip .75em%
      \begin{tabular}[t]{c}%
        \@author
      \end{tabular}\par}%
      \vskip 1.5em%
    {\large \@date \par}%
  \end{center}\par
  \@thanks
  \vfil\null
  \end{titlepage}%
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}
\newcommand{\xepersian@say}[1]{\typeout{#1}}
\newsavebox{\xepersian@fmbox}
\newenvironment{xepersian@fmpage}[1]
 {\begin{lrbox}{\xepersian@fmbox}\begin{minipage}{#1}}
 {\end{minipage}\end{lrbox}\fbox{\usebox{\xepersian@fmbox}}}
\newcommand{\image}[2]{
\vspace{5pt}
\setlength{\fboxsep}{1pt}
\addtolength{\xepersian@imgsize}{\columnwidth}
\addtolength{\xepersian@imgsize}{-1\columnsep}
\ifxetex
\setlength{\xepersian@pageneed}{1.5\xepersian@imgsize}
\addtolength{\xepersian@pageneed}{50pt}
\ClassWarning{xepersian-magazine}{%
Image #1 needs: \the\xepersian@pageneed \space %
and there is left: \the\page@free\space%
}
\ifdim \xepersian@pageneed < \page@free

{\centering\fbox{%
\includegraphics[width = \xepersian@imgsize,
height = \xepersian@imgsize,
keepaspectratio ]{#1}}}
\xepersian@pictureCaption{#2}

\vspace{5pt}
\else
\ClassWarning{Image #1 needs more space!%
  It was not inserted!}
\fi
\fi
}
\textblockorigin{1cm}{1cm}
\newdimen\xepersian@dx
\newdimen\xepersian@dy
\newcount\xepersian@cx
\newcount\xepersian@cy
\newcommand{\grid}[3][]{
\xepersian@dx=\textwidth%
\xepersian@dy=\textheight%
\xepersian@cx=#3% %columns
\xepersian@cy=#2% %rows

\count1=#3%
\advance\count1 by 1

\count2=#2%
\advance\count2 by 1

\divide\xepersian@dx by #3
\divide\xepersian@dy by #2

\setlength{\TPHorizModule}{\xepersian@dx}
\setlength{\TPVertModule}{\xepersian@dy}

\ifthenelse{\equal{#1}{show}}{
\multido{\xepersian@nrow=0+1}{\count2}{
\begin{textblock}{\xepersian@cx}(0,\xepersian@nrow)
\rule[0pt]{\textwidth}{.1pt}
\end{textblock}
}

\multido{\xepersian@ncol=0+1}{\count1}{
\begin{textblock}{\xepersian@cy}(\xepersian@ncol,0)
\rule[0pt]{.1pt}{\textheight}
\end{textblock}
}
}{}
}
\newcommand{\xepersianInit}{
\setlength{\headheight}{14pt}
\renewcommand{\headrulewidth}{0.4pt}

\pagestyle{fancy}

\setlength{\columnseprule}{\columnlines}
\setlength{\fboxrule}{0.1 pt}

}

\def\customlogo#1{\gdef\@customlogo{\beginR#1\endR}}
\def\customminilogo#1{\gdef\@customminilogo{\beginR#1\endR}}
\def\custommagazinename#1{\gdef\@custommagazinename{\beginR#1\endR}}
\newcommand{\logo}[0]{
%% Heading %%
\noindent\hrulefill\hspace{10pt}\xepersian@editionLogo\hspace{5pt}\xepersian@www

\vspace*{-3pt}

{\Large\bfseries \@customlogo}
\hrulefill
\hspace{10pt}\xepersian@headDateTime

}
\newcommand{\minilogo}[0]{
{\large\bfseries \@customminilogo}

\vspace*{5pt}
}
\newcommand{\mylogo}[1]{
{\beginR#1\endR}

\noindent
\xepersian@editionLogo\hspace{5pt}
\hrulefill
\hspace{5pt}\xepersian@headDateTime
}
\newcommand{\edition}[1]{\renewcommand{\xepersian@edition}{#1}}
\newenvironment{frontpage}[0]
{
\setboolean{xepersian@insidefrontpage}{true}
\thispagestyle{empty}
%\pdfbookmark[1]{صفحهٔ اول}{\thepage}
\logo

}%
{
\thispagestyle{empty}
\clearpage
\newpage
\fancyhead{}
 \fancyfoot{}
\fancyhead[RO,LE]{\beginR\xepersian@headright\endR}
\fancyhead[LO,RE]{\beginR\xepersian@headleft\endR}
    \fancyhead[C]{\beginR\xepersian@headcenter\endR}
    \fancyfoot[RO,LE]{\beginR\xepersian@footright\endR}
    \fancyfoot[LO,RE]{\beginR\xepersian@footleft\endR}
\fancyfoot[C]{\beginR\xepersian@footcenter\endR}
\renewcommand{\headrulewidth}{0.4pt}
\setboolean{xepersian@insidefrontpage}{false}

}
\newcommand{\firstarticle}[3]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\ifthenelse{\boolean{xepersian@hyphenatedtitles}}{%
\begin{textblock}{24}(22,5)
}
{
\begin{textblock}{28}(22,5)
}
\vspace{-7pt}
\xepersian@firstTitle{#1}
\end{textblock}
\begin{textblock}{29}(22,10)
\vspace{5pt plus 2pt minus 2pt}

\xepersian@firstText{\timestamp{#3}~#2}

\end{textblock}

\begin{textblock}{50}(0,15)
\rule{50\TPHorizModule}{.3pt}
\end{textblock}
}{%else
\ClassError{xepersian-magazine}{%
\protect\firstarticle\space in a wrong place.\MessageBreak
\protect\firstarticle\space may only appear inside frontpage environment.
}{%
\protect\firstarticle\space may only appear inside frontpage environment.
}%
}
}
\newcommand{\secondarticle}[5]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\begin{textblock}{33}(2,16)
\xepersian@pages{#4}
\vspace{-5pt}
\xepersian@secondTitle{#1}

\vspace*{5pt}

\xepersian@secondSubtitle{#2}

\vspace*{-7pt}

\xepersian@secondText{\timestamp{#5}~#3}

\end{textblock}

\begin{textblock}{33}(2,25)
\vspace{5pt plus 2pt minus 2pt}

\noindent\ignorespaces\rule{33\TPHorizModule}{.3pt}
\end{textblock}
}{%else
\ClassError{xepersian-magazine}{%
\protect\secondarticle\space in a wrong place.\MessageBreak
\protect\secondarticle\space may only appear inside frontpage environment.
}{%
\protect\secondarticle\space may only appear inside frontpage environment.
}%
}
}
\newcommand{\thirdarticle}[6]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\begin{textblock}{32}(2,26)
\xepersian@pages{#5}
\vspace{-5pt}
\setlength{\fboxsep}{1pt}
\xepersian@thirdTitle{#1}

\vspace*{5pt}

\xepersian@thirdSubtitle{#2}

\vspace*{5pt}

{\noindent\ignorespaces %
\ifthenelse{\equal{#4}{}}{}

\xepersian@thirdText{\timestamp{#6}~#3}

}

\vspace*{5pt}

\end{textblock}
}{%else
\ClassError{xepersian-magazine}{%
\protect\thirdarticle\space in a wrong place.\MessageBreak
\protect\thirdarticle\space may only appear inside frontpage environment.
}{%
\protect\thirdarticle\space may only appear inside frontpage environment.
}%
}
}
\newcommand{\firstimage}[2]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\begin{textblock}{18}(2,5)
\setlength{\fboxsep}{1pt}
\ifxetex % only in PDF
\noindent\fbox{\includegraphics[width = 18\TPHorizModule ]{#1}}
\fi

\xepersian@pictureCaption{#2}
\end{textblock}%
}
{\ClassError{xepersian-magazine}{%
\protect\firstimage\space in a wrong place.\MessageBreak
\protect\firstimage\space may only appear inside frontpage environment.
}{%
\protect\firstimage\space may only appear inside frontpage environment.
}}
}%
\newcommand{\weatheritem}[5]{%
\ifthenelse{\boolean{xepersian@insideweather}}{
\begin{minipage}{45pt}
\ifxetex
\includegraphics[width=40pt]{#1}
\fi
\end{minipage}
\begin{minipage}{50pt}
\weatherTempFormat
#2\\
\beginL#3 $\|$ #4 \lr{\weatherUnits{}}\endL\\
#5
\end{minipage}
}{%else
\ClassError{xepersian-magazine}{%
\protect\weatheritem\space in a wrong place.\MessageBreak
\protect\weatheritem\space may only appear inside weatherblock environment.
}{%
\protect\weatheritem\space may only appear inside weatherblock environment.\MessageBreak
weatherblock environment may only appear inside frontpage environment.
}%
}
}
\newenvironment{weatherblock}[1]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\setboolean{xepersian@insideweather}{true}
\begin{textblock}{32}(2,38)
\vspace*{-15pt}

\xepersian@weather{\beginR#1\endR}

\vspace*{5pt}

\noindent\begin{xepersian@fmpage}{32\TPHorizModule}
\begin{minipage}{32\TPHorizModule}
\hspace{5pt}

}{%
\ClassError{xepersian-magazine}{%
weatherblock in a wrong place.\MessageBreak
weatherblock may only appear inside frontpage environment.
}{%
weatherblock may only appear inside frontpage environment.
}
}
}%
{
\end{minipage}
\end{xepersian@fmpage}
\end{textblock}
\setboolean{xepersian@insideweather}{false}
}
\newenvironment{authorblock}[0]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\begin{textblock}{15}(36,35)
\setlength{\fboxsep}{5pt}
\begin{xepersian@fmpage}{13\TPHorizModule}
\begin{minipage}{13\TPHorizModule}
\centering
\minilogo

}{%else
\ClassError{xepersian-magazine}{%
authorblock in a wrong place.\MessageBreak
authorblock may only appear inside frontpage environment.
}{%
authorblock may only appear inside frontpage environment.
}
}
}
{
\end{minipage}
\end{xepersian@fmpage}
\end{textblock}
}
\newenvironment{indexblock}[1]
{
\ifthenelse{\boolean{xepersian@insidefrontpage}}{%
\setboolean{xepersian@insideindex}{true}%let's in
\begin{textblock}{15}(36,16)
\setlength{\xepersian@indexwidth}{13\TPHorizModule}
\xepersian@indexFrameTitle{#1}

\setlength{\fboxsep}{5pt} %espacio entre el frame y la imagen
\begin{xepersian@fmpage}{\xepersian@indexwidth}
\begin{minipage}{\xepersian@indexwidth}
\vspace*{10pt}
}{%else
\ClassError{xepersian-magazine}{%
indexblock in a wrong place.\MessageBreak
indexblock may only appear inside frontpage environment.
}{%
indexblock may only appear inside frontpage environment.
}
}
}%
{
\end{minipage}
\end{xepersian@fmpage}
\end{textblock}
\setboolean{xepersian@insideindex}{false}%let's out
}
\newcommand{\indexitem}[2]
{
\ifthenelse{\boolean{xepersian@insideindex}}{
\xepersian@indexEntry{#1، \xepersian@indexEntryPage{\pageref{#2}}}

\vspace{0.5cm}

\noindent\ignorespaces\indexEntrySeparator{}
}{%else
\ClassError{xepersian-magazine}{%
\protect\indexitem\space in a wrong place.\MessageBreak
\protect\indexitem\space may only appear inside indexblock environment.
}{%
\protect\indexitem\space may only appear inside indexblock environment.\MessageBreak
indexblock environment may only appear inside frontpage environment.
}%
}
}
\newcommand{\xepersian@inexpandedtitle}[1]{
\begin{minipage}{.95\textwidth}
\begin{center}
\noindent\Large\textbf{\beginR#1\endR}
\end{center}
\end{minipage}
}
\newcommand{\expandedtitle}[2]{
\end{multicols}

\begin{center}
\setlength{\fboxsep}{5pt}
\setlength{\shadowsize}{2pt}
\ifthenelse{\equal{#1}{shadowbox}}{%
\shadowbox{%
\xepersian@inexpandedtitle{#2}%
}%
}{}
\ifthenelse{\equal{#1}{doublebox}}{%
\doublebox{%
\xepersian@inexpandedtitle{#2}%
}%
}{}
\ifthenelse{\equal{#1}{ovalbox}}{%
\ovalbox{%
\xepersian@inexpandedtitle{#2}%
}%
}{}
\ifthenelse{\equal{#1}{Ovalbox}}{%
\Ovalbox{%
\xepersian@inexpandedtitle{#2}%
}%
}{}
\ifthenelse{\equal{#1}{lines}}{
\hrule
\vspace*{8pt}
\begin{center}
\noindent\Large\textbf{#2}
\end{center}
\vspace*{8pt}
\hrule
}{}
\end{center}

\begin{multicols}{\xepersian@ncolumns{}}
\ifnum \xepersian@ncolumns > \minraggedcols
\raggedFormat
\fi
}
\newcommand{\xepersian@incolumntitle}[2]{
\begin{minipage}{#1}
\begin{center}
\noindent\normalsize\textbf{#2}
\end{center}
\end{minipage}
}

\newcommand{\columntitle}[2]{
\vspace*{5pt}
\begin{center}
\setlength{\fboxsep}{5pt}
\setlength{\shadowsize}{2pt}
\addtolength{\xepersian@coltitsize}{\columnwidth}
\addtolength{\xepersian@coltitsize}{-1\columnsep}
\addtolength{\xepersian@coltitsize}{-5pt}
\addtolength{\xepersian@coltitsize}{-1\shadowsize}
\ifthenelse{\equal{#1}{shadowbox}}{%
\shadowbox{%
\xepersian@incolumntitle{\xepersian@coltitsize}{#2}%
}%
}{}
\ifthenelse{\equal{#1}{doublebox}}{%
\doublebox{%
\xepersian@incolumntitle{\xepersian@coltitsize}{#2}%
}%
}{}
\ifthenelse{\equal{#1}{ovalbox}}{%
\ovalbox{%
\xepersian@incolumntitle{\xepersian@coltitsize}{#2}%
}%
}{}
\ifthenelse{\equal{#1}{Ovalbox}}{%
\Ovalbox{%
\xepersian@incolumntitle{\xepersian@coltitsize}{#2}%
}%
}{}
\ifthenelse{\equal{#1}{lines}}{
\hrule
\vspace*{5pt}
\begin{center}
\noindent\normalsize\textbf{#2}
\end{center}
\vspace*{5pt}
\hrule
}{}
\end{center}
}
\renewcommand{\date}{%
\longdate{\today}%
}
\newcommand{\authorandplace}[2]{%
\rightline{%
{\innerAuthorFormat #1},\space{}{\innerPlaceFormat #2}%
}%
\par %
}
\newcommand{\newsection}[1]{
%\pdfbookmark[0]{#1}{\thepage} %bookmark para el pdf
\renewcommand{\xepersian@section}{#1}
}
\newenvironment{article}[5]
{
\xepersian@say{Adding a new piece of article}
\renewcommand{\xepersian@ncolumns}{#1}
\begin{multicols}{#1}[
\xepersian@pages{#4}
\xepersian@innerTitle{#2}%
\xepersian@innerSubtitle{#3}%
][4cm]%
\label{#5}
\ifnum #1 > \minraggedcols
\raggedFormat
\fi
}
{~\innerTextFinalMark{}
\end{multicols}
}
\newcommand{\articlesep}{%
\setlength{\xepersian@pageneed}{16000pt}
\setlength\xepersian@pageleft{\pagegoal}
\addtolength\xepersian@pageleft{-\pagetotal}

\xepersian@say{How much left \the\xepersian@pageleft}

\ifdim \xepersian@pageneed < \xepersian@pageleft
\xepersian@say{Not enough space}
\else
\xepersian@say{Adding sep line between articles}
\vspace*{10pt plus 10pt minus 5pt}
\hrule
\vspace*{10pt plus 5pt minus 5pt}
\fi

}
\newcommand{\xepersian@editorialTit}[2]{
\setlength{\arrayrulewidth}{.1pt}
\begin{center}
\begin{tabular}{c}
\noindent
\xepersian@editorialTitle{#1}
\vspace{2pt plus 1pt minus 1pt}
\\
\hline
\vspace{2pt plus 1pt minus 1pt}
\\
\editorialAuthorFormat{#2}
\end{tabular}
\end{center}
}
\newenvironment{editorial}[4]
{
\xepersian@say{Adding a new editorial}
\begin{multicols}{#1}[%
\xepersian@editorialTit{#2}{#3}%
][4cm]
\label{#4}
\ifnum #1 > \minraggedcols
\raggedFormat
\fi
}
{
\end{multicols}
}
\newcommand{\xepersian@shortarticleTit}[2]{
\begin{center}
\vbox{%
\noindent
\xepersian@shortarticleTitle{#1}
\vspace{4pt plus 2pt minus 2pt}
\hrule
\vspace{4pt plus 2pt minus 2pt}
\xepersian@shortarticleSubtitle{#2}
}
\end{center}
}
\newenvironment{shortarticle}[4]
{
\xepersian@say{Adding a short article block}
\begin{multicols}{#1}[\xepersian@shortarticleTit{#2}{#3}][4cm] %
    \label{#4}
\par %
\ifnum #1 > \minraggedcols
\raggedFormat
\fi
}
{
\end{multicols}
}
\newcommand{\shortarticleitem}[2]{
\goodbreak
\vspace{5pt plus 3pt minus 3pt}
{\vbox{\noindent\xepersian@shortarticleItemTitle{#1}}}
\vspace{5pt plus 3pt minus 3pt}
{\noindent #2}\\
}
%    \end{macrocode}
% \iffalse
%</xepersian-magazine.cls>
%<*xepersian-mathsdigitspec.sty>
% \fi
% \part{xepersian-mathsdigitspec.sty}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xepersian-mathsdigitspec}
  [2009/04/22 v1.0.1 Unicode Persian maths digits in XeLaTeX (Author: Vafa Khalighi)]
\@zf@mathfalse
\def\@preamblecmds{}
\newcommand\not@onlypreamble[1]{{%
  \def\do##1{\ifx#1##1\else\noexpand\do\noexpand##1\fi}%
  \xdef\@preamblecmds{\@preamblecmds}}}
\def\gm@notprerr{ can be used only in preamble (\on@line)}
\AtBeginDocument{%
  \def\do#1{\noexpand\do\noexpand#1}%
  \edef\@preamblecmds{%
    \def\noexpand\do##1{%
      \def##1{\noexpand\PackageError{gmutils/LaTeX}%
        {\noexpand\string##1 \noexpand\gm@notprerr}\noexpand\@eha}}%
    \@preamblecmds}}
\def\nocite#1{%
  \@bsphack{\setbox0=\hbox{\cite{#1}}}\@esphack}
\newcommand\xepersian@PackageInfo[1]{\PackageInfo{xepersian-mathsdigitspec}{#1}}
\newcommand\SetMathCode[4]{%
  \XeTeXmathcode#1="\mathchar@type#2 \csname sym#3\endcsname #4\relax}
\newcommand\SetMathCharDef[4]{%
  \XeTeXmathchardef#1="\mathchar@type#2 \csname sym#3\endcsname #4\relax}
\newcommand\setdigitfont[2][]{%
  \let\glb@currsize\relax
  \setkeys*[xepersian-mathsdigitspec]{options}{#1}%
  \edef\@tempa{\noexpand\zf@fontspec{%
    \XKV@rm}{#2}}\@tempa
  \xepersian@PackageInfo{Defining the default Persian maths digits font as '#2'}
  \DeclareSymbolFont{OPERATORS}   {EU1}{\zf@family} {m}{n}
  \SetSymbolFont{OPERATORS}{bold}{EU1}{\zf@family} {bx}{n}
  \DeclareMathAlphabet      {\mathit}{EU1}{\zf@family}{m}{it}
  \DeclareSymbolFontAlphabet{\mathrm}    {OPERATORS}
  \DeclareMathAlphabet      {\mathbf}{EU1}{\zf@family}{bx}{n}
  \SetMathCode{`0}{\mathalpha}{OPERATORS}{"06F0}
  \SetMathCode{`1}{\mathalpha}{OPERATORS}{"06F1}
  \SetMathCode{`2}{\mathalpha}{OPERATORS}{"06F2}
  \SetMathCode{`3}{\mathalpha}{OPERATORS}{"06F3}
  \SetMathCode{`4}{\mathalpha}{OPERATORS}{"06F4}
  \SetMathCode{`5}{\mathalpha}{OPERATORS}{"06F5}
  \SetMathCode{`6}{\mathalpha}{OPERATORS}{"06F6}
  \SetMathCode{`7}{\mathalpha}{OPERATORS}{"06F7}
  \SetMathCode{`8}{\mathalpha}{OPERATORS}{"06F8}
  \SetMathCode{`9}{\mathalpha}{OPERATORS}{"06F9}
  \SetMathCharDef{\decimalseparator}{\mathpunct}{OPERATORS}{"066B}
}
\ifx\newcommand\undefined\else
  \newcommand{\ZifferAn}{}
\fi
\mathchardef\ziffer@DotOri="013A
{\ZifferAn
 \catcode`\.=\active\gdef.{\begingroup\obeyspaces\futurelet\n\ziffer@dcheck}}
\def\ziffer@dcheck{\ziffer@check\ZifferLeer\ziffer@DotOri}
\def\ziffer@check#1#2{%
  \ifx\n1\endgroup#1\else
    \ifx\n2\endgroup#1\else
      \ifx\n3\endgroup#1\else
        \ifx\n4\endgroup#1\else
          \ifx\n5\endgroup#1\else
            \ifx\n6\endgroup#1\else
              \ifx\n7\endgroup#1\else
                \ifx\n8\endgroup#1\else
                  \ifx\n9\endgroup#1\else
                    \ifx\n0\endgroup#1\else
                      \endgroup#2%
                    \fi
                  \fi
                \fi
              \fi
            \fi
          \fi
        \fi
      \fi
    \fi
  \fi}
\mathcode`.="8000\relax
\def\ZifferLeer{\ifx\decimalseparator\undefied .\else \decimalseparator\fi}
%    \end{macrocode}
% \iffalse
%</xepersian-mathsdigitspec.sty>
%<*xepersian-multiplechoice.sty>
% \fi
% \part{xepersian-multiplechoice.sty}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xepersian-multiplechoice}[2009/03/21 v0.1
                    Multiple Choice Questionnaire class for Persian in XeLaTeX (Author: Vafa Khalighi)]
\RequirePackage{pifont}
\RequirePackage{fullpage}
\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{verbatim}
\RequirePackage{fmultico}
\def\@headerfont{\bfseries}
\newcommand\headerfont[1]{\gdef\@headerfont{#1}}
\def\@X{X}
\newcommand\X[1]{\gdef\@X{#1}}
\def\pbs#1{\let\tmp=\\#1\let\\=\tmp}
\newcommand\makeform@nocorrection{%
  \addtocontents{frm}{\protect\end{tabular}}
  \@starttoc{frm}}
\newcommand\makeform@correction{%
  \addtocontents{frm}{\protect\end{tabular}}}
\newcommand\makemask@nocorrection{%
  \addtocontents{msk}{\protect\end{tabular}}
  \@starttoc{msk}}
\newcommand\makemask@correction{%
  \addtocontents{msk}{\protect\end{tabular}}}
\newlength\questionspace
\setlength\questionspace{0pt}
\newcommand\answerstitle[1]{\gdef\@answerstitle{#1}}
\def\@answerstitlefont{\bfseries}
\newcommand\answerstitlefont[1]{\gdef\@answerstitlefont{#1}}
\def\@answernumberfont{\bfseries}
\newcommand\answernumberfont[1]{\gdef\@answernumberfont{#1}}
\newcounter{question}\stepcounter{question}
\newcounter{@choice}
\def\@initorcheck{%
  \xdef\@choices{\the@choice}%
  \setcounter{@choice}{1}%
  \gdef\@arraydesc{|l||}%
  \gdef\@headerline{}%
  \whiledo{\not{\value{@choice}>\@choices}}{
    \xdef\@arraydesc{\@arraydesc c|}
    \def\@appendheader{\g@addto@macro\@headerline}
    \@appendheader{&\protect\@headerfont}
    \edef\@the@choice{{\alph{@choice}}}
    \expandafter\@appendheader\@the@choice
    \stepcounter{@choice}}%
  \addtocontents{frm}{%
    \protect\begin{tabular}{\@arraydesc}
    \protect\hline
    \@headerline\protect\\\protect\hline\protect\hline}%
  \addtocontents{msk}{%
    \protect\begin{tabular}{\@arraydesc}
    \protect\hline
    \@headerline\protect\\\protect\hline\protect\hline}%
  \gdef\@initorcheck{%
    \ifthenelse{\value{@choice} = \@choices}{}{%
      \ClassError{xepersian-multiplechoice}{Question \thequestion: wrong number of choices
        (\the@choice\space instead of \@choices)}{%
        Questions must all have the same number of proposed answers.%
        \MessageBreak
        Type X <return> to quit, fix your MCQ (multiple choice question) and rerun XeLaTeX.}}}}
\newenvironment{question}[1]{%
  %% \begin{question}
  \begin{minipage}{\textwidth}
    \xdef\@formanswerline{\@questionheader}%
    \xdef\@maskanswerline{\@questionheader}%
    \fbox{\parbox[c]{\linewidth}{#1}}
    \vspace\questionspace\par
    {\@answerstitlefont\@answerstitle}
\begin{multicols}{4}
    \begin{list}{\@answernumberfont\alph{@choice})~}{\usecounter{@choice}}}{%
  %% \end{question}
    \end{list}
\end{multicols}
    \@initorcheck%
    \addtocontents{frm}{\@formanswerline\protect\\\protect\hline}%
    \addtocontents{msk}{\@maskanswerline\protect\\\protect\hline}%
  \end{minipage}
  \stepcounter{question}}
\def\@truesymbol{\ding{52}~}
\def\@falsesymbol{\ding{56}~}
\newcommand\truesymbol[1]{\gdef\@truesymbol{#1}}
\newcommand\falsesymbol[1]{\gdef\@falsesymbol{#1}}
\def\@true@nocorrection{\item}
\def\@false@nocorrection{\item}
\def\@true@correction{\item[\@truesymbol\refstepcounter{@choice}]}
\def\@false@correction{\item[\@falsesymbol\refstepcounter{@choice}]}
\newcommand\true{%
  \xdef\@formanswerline{\@formanswerline&}%
  \xdef\@maskanswerline{\@maskanswerline&\@X}%
  \@true}%
\newcommand\false{%
  \xdef\@formanswerline{\@formanswerline&}%
  \xdef\@maskanswerline{\@maskanswerline&}%
  \@false}%
\def\@correctionstyle{\itshape}
\newcommand\correctionstyle[1]{\gdef\@correctionstyle{#1}}
\newenvironment{@correction}{\@correctionstyle}{}
 \def\@questionheader{سؤال \thequestion}
  \answerstitle{جوابهای ممکن:}
\DeclareOption{nocorrection}{%
  \let\@true\@true@nocorrection
  \let\@false\@false@nocorrection
  \let\correction\comment
  \let\endcorrection\endcomment
  \def\makeform{\makeform@nocorrection}
  \def\makemask{\makemask@nocorrection}}
\DeclareOption{correction}{%
  \let\@true\@true@correction
  \let\@false\@false@correction
  \let\correction\@correction
  \let\endcorrection\end@correction
  \def\makeform{\makeform@correction}
  \def\makemask{\makemask@correction}}
\ExecuteOptions{nocorrection}
\newcommand\questiontitle[1]{\gdef\@questiontitle{#1}}
\def\@questiontitlefont{\bfseries}
\newcommand\questiontitlefont[1]{\gdef\@questiontitlefont{#1}}
\newlength\questiontitlespace
\setlength\questiontitlespace{5pt}
\newlength\questionsepspace
\setlength\questionsepspace{20pt}
\gdef\@questionsepspace{0pt}
\let\old@question\question
\let\old@endquestion\endquestion
\renewenvironment{question}[1]{%
  %% \begin{question}
  \vspace\@questionsepspace
  \fbox{\parbox[c]{0.25\linewidth}{\@questiontitlefont\@questiontitle}}
  \nopagebreak\vspace\questiontitlespace\par
  \old@question{#1}}{%
  %% \end{question}
  \old@endquestion
  \gdef\@questionsepspace{\questionsepspace}}
 \questiontitle{سؤال \thequestion:}
\ProcessOptions
%    \end{macrocode}
% \iffalse
%</xepersian-multiplechoice.sty>
%<*xepersian-persiancal.sty>
% \fi
% \part{xepersian-persiancal.sty}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xepersian-persiancal}

\newif\ifXePersian@leap \newif\ifXePersian@kabiseh
\newcount\XePersian@i  \newcount\XePersian@y  \newcount\XePersian@m  \newcount\XePersian@d
\newcount\XePersian@latini    \newcount\XePersian@persiani
\newcount\XePersian@latinii   \newcount\XePersian@persianii
\newcount\XePersian@latiniii  \newcount\XePersian@persianiii
\newcount\XePersian@latiniv   \newcount\XePersian@persianiv
\newcount\XePersian@latinv    \newcount\XePersian@persianv
\newcount\XePersian@latinvi   \newcount\XePersian@persianvi
\newcount\XePersian@latinvii  \newcount\XePersian@persianvii
\newcount\XePersian@latinviii \newcount\XePersian@persianviii
\newcount\XePersian@latinix   \newcount\XePersian@persianix
\newcount\XePersian@latinx    \newcount\XePersian@persianx
\newcount\XePersian@latinxi   \newcount\XePersian@persianxi
\newcount\XePersian@latinxii  \newcount\XePersian@persianxii
                       \newcount\XePersian@persianxiii

\newcount\XePersian@temp
\newcount\XePersian@temptwo
\newcount\XePersian@tempthree
\newcount\XePersian@yModHundred
\newcount\XePersian@thirtytwo
\newcount\XePersian@dn
\newcount\XePersian@sn
\newcount\XePersian@mminusone

\def\persiantoday{%
\XePersian@y=\year \XePersian@m=\month \XePersian@d=\day
%
\XePersian@temp=\XePersian@y
\divide\XePersian@temp by 100\relax
\multiply\XePersian@temp by 100\relax
\XePersian@yModHundred=\XePersian@y
\advance\XePersian@yModHundred by -\XePersian@temp\relax
%
\ifodd\XePersian@yModHundred
   \XePersian@leapfalse
\else
   \XePersian@temp=\XePersian@yModHundred
   \divide\XePersian@temp by 2\relax
   \ifodd\XePersian@temp\XePersian@leapfalse
   \else
      \ifnum\XePersian@yModHundred=0%
         \XePersian@temp=\XePersian@y
         \divide\XePersian@temp by 400\relax
         \multiply\XePersian@temp by 400\relax
         \ifnum\XePersian@y=\XePersian@temp\XePersian@leaptrue\else\XePersian@leapfalse\fi
      \else\XePersian@leaptrue
      \fi
   \fi
\fi
%
\XePersian@latini=31\relax
\ifXePersian@leap
  \XePersian@latinii = 29\relax
\else
  \XePersian@latinii = 28\relax
\fi
\XePersian@latiniii = 31\relax
\XePersian@latiniv  = 30\relax
\XePersian@latinv = 31\relax
\XePersian@latinvi = 30\relax
\XePersian@latinvii = 31\relax
\XePersian@latinviii = 31\relax
\XePersian@latinix = 30\relax
\XePersian@latinx = 31\relax
\XePersian@latinxi = 30\relax
\XePersian@latinxii = 31\relax
%
\XePersian@thirtytwo=32\relax
%
\XePersian@temp=\XePersian@y
\advance\XePersian@temp by -17\relax
\XePersian@temptwo=\XePersian@temp
\divide\XePersian@temptwo by 33\relax
\multiply\XePersian@temptwo by 33\relax
\advance\XePersian@temp by -\XePersian@temptwo
\ifnum\XePersian@temp=\XePersian@thirtytwo\XePersian@kabisehfalse
\else
   \XePersian@temptwo=\XePersian@temp
   \divide\XePersian@temptwo by 4\relax
   \multiply\XePersian@temptwo by 4\relax
   \advance\XePersian@temp by -\XePersian@temptwo
   \ifnum\XePersian@temp=\z@\XePersian@kabisehtrue\else\XePersian@kabisehfalse\fi
\fi
%
% In fact persiani is equal to the Leap years from a fixed year to the last
% year minus the Kabise years from a fixed year to the last year plus a const.
%
\XePersian@tempthree=\XePersian@y                 % Number of Leap years
\advance\XePersian@tempthree by -1
\XePersian@temp=\XePersian@tempthree              % T := (MY-1) div 4
\divide\XePersian@temp by 4\relax
\XePersian@temptwo=\XePersian@tempthree           % T := T - ((MY-1) div 100)
\divide\XePersian@temptwo by 100\relax
\advance\XePersian@temp by -\XePersian@temptwo
\XePersian@temptwo=\XePersian@tempthree           % T := T + ((MY-1) div 400)
\divide\XePersian@temptwo by 400\relax
\advance\XePersian@temp by \XePersian@temptwo
\advance\XePersian@tempthree by -611       % Number of Kabise years
\XePersian@temptwo=\XePersian@tempthree           % T := T - ((SY+10) div 33) * 8
\divide\XePersian@temptwo by 33\relax
\multiply\XePersian@temptwo by 8\relax
\advance\XePersian@temp by -\XePersian@temptwo
\XePersian@temptwo=\XePersian@tempthree           %
\divide\XePersian@temptwo by 33\relax
\multiply\XePersian@temptwo by 33\relax
\advance\XePersian@tempthree by -\XePersian@temptwo
\ifnum\XePersian@tempthree=32\advance\XePersian@temp by 1\fi % if (SY+10) mod 33=32 then Inc(T);
\divide\XePersian@tempthree by 4\relax     % T := T - ((SY+10) mod 33) div 4
\advance\XePersian@temp by -\XePersian@tempthree
\advance\XePersian@temp by -137            % T := T - 137  Adjust the value
\XePersian@persiani=31
\advance\XePersian@persiani by -\XePersian@temp                 % now 31 - T is the persiani
%
\XePersian@persianii = 30\relax
\ifXePersian@kabiseh
  \XePersian@persianiii = 30\relax
\else
  \XePersian@persianiii = 29\relax
\fi
\XePersian@persianiv  = 31\relax
\XePersian@persianv   = 31\relax
\XePersian@persianvi  = 31\relax
\XePersian@persianvii = 31\relax
\XePersian@persianviii= 31\relax
\XePersian@persianix  = 31\relax
\XePersian@persianx   = 30\relax
\XePersian@persianxi  = 30\relax
\XePersian@persianxii = 30\relax
\XePersian@persianxiii= 30\relax
%
\XePersian@dn= 0\relax
\XePersian@sn= 0\relax
\XePersian@mminusone=\XePersian@m
\advance\XePersian@mminusone by -1\relax
%
\XePersian@i=0\relax
\ifnum\XePersian@i < \XePersian@mminusone
\loop
\advance \XePersian@i by 1\relax
\advance\XePersian@dn by \csname XePersian@latin\romannumeral\the\XePersian@i\endcsname
\ifnum\XePersian@i<\XePersian@mminusone \repeat
\fi
\advance \XePersian@dn by \XePersian@d
%
\XePersian@i=1\relax
\XePersian@sn = \XePersian@persiani
\ifnum \XePersian@sn<\XePersian@dn
\loop
\advance \XePersian@i by 1\relax
\advance\XePersian@sn by \csname XePersian@persian\romannumeral\the\XePersian@i\endcsname
\ifnum \XePersian@sn<\XePersian@dn \repeat
\fi
\ifnum \XePersian@i < 4
   \XePersian@m = 9 \advance\XePersian@m by \XePersian@i
   \advance \XePersian@y by -622\relax
\else
   \XePersian@m = \XePersian@i \advance \XePersian@m by -3\relax
   \advance \XePersian@y by -621\relax
\fi
\advance\XePersian@sn by -\csname XePersian@persian\romannumeral\the\XePersian@i%
\endcsname
\ifnum\XePersian@i = 1
  \XePersian@d = \XePersian@dn \advance \XePersian@d by 30 \advance\XePersian@d by -\XePersian@persiani
\else
  \XePersian@d = \XePersian@dn \advance \XePersian@d by -\XePersian@sn
\fi
\beginL\number\XePersian@d\endL\space%
\persianmonth{\XePersian@m}\space\beginL\number\XePersian@y\endL%
}
\def\persianmonth#1{\ifcase#1\or فروردین\or 
اردیبهشت\or 
خرداد\or تیر\or 
مرداد\or 
شهریور\or مهر\or 
آبان\or آذر\or 
دی\or بهمن\or 
اسفند\fi}
%    \end{macrocode}
% \iffalse
%</xepersian-persiancal.sty>
%<*xepersian-thesis.cls>
% \fi
% \part{xepersian-thesis.cls}
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{xepersian-thesis}
              [2009/01/05 v0.1
 Persian thesis document class in XeLaTeX]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{report}}
\ProcessOptions
\LoadClass{report}
\def\university#1{\gdef\@university{#1}}
\def\department#1{\gdef\@department{#1}}
\def\degree#1{\gdef\@degree{#1}}
\def\thesisdate#1{\gdef\@thesisdate{#1}}
\def\supervisor#1{\gdef\@supervisor{#1}}
\def\city#1{\gdef\@city{#1}}

\def\latintitle#1{\gdef\@latintitle{#1}}
\def\latinauthor#1{\gdef\@latinauthor{#1}}
\def\latindegree#1{\gdef\@latindegree{#1}}
\def\latindepartment#1{\gdef\@latindepartment{#1}}
\def\latinthesisdate#1{\gdef\@latinthesisdate{#1}}
\def\latinsupervisor#1{\gdef\@latinsupervisor{#1}}
\def\latincity#1{\gdef\@latincity{#1}}
\def\latinuniversity#1{\gdef\@latinuniversity{#1}}

\def\maketitle{\begin{titlepage}
{\includegraphics{logo}}
\vskip 1.5cm
{\Huge\bfseries \@title}\par
\vskip 1cm
{\large%
  \by}\par
{\Large\bfseries \@author}\par
\vskip 5mm
{\large\bfseries\writtenfor
\par
\@degree}
\par
\vskip 1cm
{\large
  \undersupervision\par
\Large\bfseries \@supervisor}
\par
\vskip 1cm
{\large \@thesisdate}
\par
\vskip 1cm
{\large\bfseries\departmentof\space\@department}
\par
{\large\bfseries\universityof\space\@university \par\@city}
\vfill
\end{titlepage}%
}

\def\abstractpage{\newpage
\thispagestyle{empty}
\vskip 15mm
\begin{center}{\large{\bfseries \@title} \\}
\end{center}
\par
\begin{abstract}}
\def\endabstractpage{\end{abstract}
\newpage
}

\def\latinabstract{\newpage
\thispagestyle{empty}
\vskip 15mm
\begin{center}{\Large\bfseries \@latintitle \\[5mm]}
{\bfseries Abstract}
\end{center}
\vspace{5mm}}

\def\endlatinabstract{\newpage}

\def\acknowledgementpage{\newpage
\thispagestyle{empty}
\centerline{\Large \bfseries\acknowledgementname} 
\vspace{1cm}
\par\noindent}
\def\endacknowledgementpage{\newpage}

\def\titlepage{\newpage\centering
  \thispagestyle{empty}
  \parindent 0pt \parskip 10pt plus 1fil minus 1fil
  \def\baselinestretch{1}\@normalsize\vbox to \vsize\bgroup\vbox to 9in\bgroup}
\def\endtitlepage{\par\kern 0pt\egroup\vss\egroup\newpage}

\def\signature#1#2{\par\noindent#1\dotfill\null\\*
  {\raggedright #2\par}}

\def\abstract{\subsection*{\abstractname}\small
\@normalsize}
\def\endabstract{\par}

\pagenumbering{harfi}
\let\ol@chapter\@chapter
\def\@chapter{%
  \ifnum\c@chapter=0 \pagenumbering{arabic}\setcounter{page}{1}\fi
  \ol@chapter}



\def\keywords#1{\par \vspace{5mm}
{\textbf{واژه‌های کلیدی:}} {\textit{ #1}}}

\def\latinkeywords#1{\par \vspace{5mm}
\noindent {\textbf{Keywords:}} {\textit{ #1}}}

\font\titlefont=cmssbx10 scaled 2074
\font\supervisorfont=cmbxti10
\def\makelatintitle{\begin{titlepage}
{\includegraphics{logo}}
\vskip 1.5cm
\addtolength{\baselineskip}{5mm}
{\titlefont \@latintitle} \par
\addtolength{\baselineskip}{-5mm}
\vskip 1cm
{\bfseries\latinby}\par
{\Large\bfseries \@latinauthor}\par
\vskip 5mm
{\latinwrittenfor\par
\large\@latindegree}
\par
\vskip 1cm
Under supervision of \\
{\supervisorfont\@latinsupervisor}
\par
\vskip 1cm
{\@latinthesisdate}
\par
\vskip 1cm
\large\bfseries
\@latindepartment\space Department
\par
\@latinuniversity \par\@latincity
\vfill
\end{titlepage}%
}


\def\acknowledgementname{قدردانی}
\def\by{توسط}
\def\writtenfor{  رسالهٔ ارائه شده به عنوان بخشی از ملزومات برای دریافت درجهٔ}
\def\undersupervision{زیر نظر}
\def\departmentof{دانشکدهٔ}
\def\universityof{دانشگاه}
\def\latinby{by}
\def\latinwrittenfor{Submitted in Partial Fulfillment\\ of the Requirements\\ for the Degree of}
\def\latinundersupervision{Under supervision of}
%    \end{macrocode}
% \iffalse
%</xepersian-thesis.cls>
%<*xepersian-thesis-xepersian.def>
% \fi
% \part{xepersian-thesis-xepersian.def}
%    \begin{macrocode}
\renewcommand \thepart {\@tartibi\c@part}
%to make appendix numbering persian
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \gdef\@chapapp{\appendixname}%
  \gdef\thechapter{\@harfi\c@chapter}
}%end appendix
%    \end{macrocode}
% \iffalse
%</xepersian-thesis-xepersian.def>
%<*acm-fa.bst>
% \fi
% \part{acm-fa.bst}
%    \begin{macrocode}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bib. style "acm-fa", Persian (farsi)  version of acm.bst
%%
%% by: Mahmood Amintoosi and Mostafa Vahedi
%% For XePersian, a Persian Typsetting Package in XeTeX, Developed by:
%% Vafa Khalighi, Mehdi Omidali and Mostafa Vahedi 
%% 2009/02/12
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either this version
%% of this license or (at your option) any later version.
%%
%% NOTE: Its output for English references may has a bit difference with acm.bst, for pure English texts please use acm.bst
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Original Copyright of acm.bst
% ACM Transactions bibliography style (24-Jan-88 version)
%    A lot like abbrv.bst, but names come out "Last, initials", and in \sc.
%    Some dates are parenthesized.

% History of acm-fa.bst
% 2009/02/12, The initial release was a combination of acm.bst and plain-fa.bst
%		\textsc is used here instead of \sc.
%		
	
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
	language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
	translator
    type
    volume
    year
  }
  {}
  { label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }
STRINGS {bbl.and bbl.etal bbl.editors bbl.editor bbl.edition bbl.volume bbl.of bbl.number
		 bbl.in bbl.pages bbl.page bbl.chapter bbl.series bbl.techrep bbl.mthesis bbl.phdthesis 
		 bbl.translator}% bbl.formatnames}
FUNCTION {is.print.banners.to.terminal} { #1 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FILE VERSION AND BANNER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION{bst.file.version} { "0.3" }
FUNCTION{bst.file.date} { "2009/02/12" }
FUNCTION{bst.file.website} { "http://developer.berlios.de/projects/xepersian" }
FUNCTION{bst.file.authors} {"M.Amintoosi and M.Vahedi" }

FUNCTION {banner.message}
{ is.print.banners.to.terminal
     { "-- acm-fa.bst version" " " * bst.file.version *
       " (" * bst.file.date * ") " * %"by " * bst.file.authors *
       top$
       "-- This is a BibTeX style for XePersian: " bst.file.website *
       %top$
       %"-- See the " quote$ * "xepersian_bibtex_userguide.pdf" * quote$ * " manual for usage information." *
       top$
     }
     { skip$ }
   if$
}

FUNCTION {completed.message}
{ is.print.banners.to.terminal
     { ""
       top$
       "Done."
       top$
     }
     { skip$ }
   if$
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Persian Functions	   %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {fa.isPersianLanguage}
{
  language missing$
    {#0}
    {language "l" change.case$ "persian" =}
  if$
}

FUNCTION {keywords.fa}
{
  " و " 			'bbl.and 		:=
  " و دیگران" 		'bbl.etal 		:=
  " ویراستاران " 	'bbl.editors 	:=
  " ویراسته‌ی " 		'bbl.editor 	:=
  " ویرایش " 		'bbl.edition    :=
  " جلد " 			'bbl.volume		:=
  " از " 			'bbl.of			:=
  " شماره " 			'bbl.number		:=
  " در " 			'bbl.in 		:=
  " صفحات " 		'bbl.pages 		:=
  " ص." 			'bbl.page 		:=
  " فصل " 			'bbl.chapter	:=
  " سری "				'bbl.series		:=
  " گزارش طرح تحقیقی"	'bbl.techrep	:=
  " پایان‌نامه کارشناسی‌ارشد" 'bbl.mthesis 	:=
  " پایان‌نامه دکترا" 		'bbl.phdthesis	:=   
  " ترجمه‌ی "					'bbl.translator :=  
}

FUNCTION {keywords.en}
{
  " and " 			'bbl.and 		:=
  " et~al." 		'bbl.etal 		:=
  " Eds." 			'bbl.editors 	:=
  " Ed." 			'bbl.editor 	:=
  " Ed." 			'bbl.edition    :=
  " Vol." 			'bbl.volume		:=
  " of " 			'bbl.of			:=
  " No." 			'bbl.number		:=
  " In " 			'bbl.in 		:=
  " pp." 			'bbl.pages 		:=
  " p." 			'bbl.page 		:=
  " Ch." 			'bbl.chapter	:=
  " Ser."			'bbl.series		:=
  " Tech. Rep."		'bbl.techrep	:=
  " Master's thesis" 'bbl.mthesis 	:=
  " Ph.D. thesis"  'bbl.phdthesis	:=   
  " Translator "	'bbl.translator :=
  %"{vv~}{ll}{, jj}{, f.}"   'bbl.formatnames :=
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% End of Persian Functions %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
	{ add.period$ write$
	  newline$
	  "\newblock " write$
	}
	{ output.state before.all =
	    'write$
	    { add.period$ " " * write$ }
	  if$
	}
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ 
  newline$
  fa.isPersianLanguage
    { keywords.fa
	  "\Persian" write$
      newline$ }
    { keywords.en
	  "\Latin" write$
      newline$ }
  if$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
	'skip$
	{ after.sentence 'output.state := }
      if$
    }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}


FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

FUNCTION {emphasizeic}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "\/}" * }
  if$
}

FUNCTION {scapify}
{ duplicate$ empty$
    { pop$ "" }
    { "\textsc{ " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {fa.isPersianLanguage 
        { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=}
        { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=}
      if$  
     nameptr #1 >
	{ namesleft #1 >
	    { ", " * t * }
	    { t "others" =
		{ ","  bbl.etal * * }
		{ ","  bbl.and  * * t * }
	      if$
	    }
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

% For names inside entries (e.g., editors of an "In ...");
% this is exactly ABBRV.BST's `format.names' function.
FUNCTION {format.innames}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {fa.isPersianLanguage 
        {s nameptr "{ff}{vv~}{ll}{, jj}" format.name$ 't :=}
        {s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=}
      if$
       nameptr #1 >
	{ namesleft #1 >
	    { ", " * t * }
	    { numnames #2 >
		{ "," * }
		'skip$
	      if$
	      t "others" =
		{ bbl.etal * }
		{ bbl.and * t * }
	      if$
	    }
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names  scapify}
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { fa.isPersianLanguage
	    {
		editor num.names$ #1 >
			{bbl.editors editor format.names * }
			{bbl.editor editor format.names * }
		if$
		}
		{
 		editor format.names scapify
		editor num.names$ #1 >
			{ ", " bbl.editors * *}
			{ ", " bbl.editor * *}
		if$
		}
	  if$	
    }
  if$
}

FUNCTION {format.ineditors}
{ editor empty$
    { "" }
    { editor format.innames
      editor num.names$ #1 >
	{ ", " * bbl.editors *}
	{ ", " * bbl.editor *}
      if$
    }
  if$
}

FUNCTION {format.translators}
{ translator empty$
    { "" }
    { fa.isPersianLanguage
	    {
		bbl.translator translator format.names *
		}
		{
 		translator format.names
		", " bbl.translator * *
		}
	  if$	
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ }
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
	{ t #1 #2 substring$ "--" = not
	    { "--" *
	      t #2 global.max$ substring$ 't :=
	    }
	    {   { t #1 #1 substring$ "-" = }
		{ "-" *
		  t #2 global.max$ substring$ 't :=
		}
	      while$
	    }
	  if$
	}
	{ t #1 #1 substring$ *
	  t #2 global.max$ substring$ 't :=
	}
      if$
    }
  while$
}

FUNCTION {format.date}
{ year empty$
    { month empty$
	{ "" }
	{ "there's a month but no year in " cite$ * warning$
	  month
	}
      if$
    }
    { month empty$
	'year
	{ month " " * year * }
      if$
    }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { "volume" volume tie.or.space.connect
      series empty$
	'skip$
	{ " of " * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
	{ series field.or.null }
	{ output.state mid.sentence =
	    { bbl.number }
	    { bbl.number "t" change.case$ }
	  if$
	  number tie.or.space.connect
	  series empty$
	    { "there's a number but no series in " cite$ * warning$ }
	    { bbl.in * series * }
	  if$
	}
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { fa.isPersianLanguage
	    {
		   bbl.edition edition * 
		}
		{
	      output.state mid.sentence =
	       { edition "l" change.case$ bbl.edition * }
	       { edition "t" change.case$ bbl.edition * }
          if$
		}
	  if$	
    }
  if$
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages n.dashify }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
	{ #1 'multiresult := }
	{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pp.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
	   { bbl.pages pages n.dashify tie.or.space.connect }
	   { bbl.page pages tie.or.space.connect }
      if$
    }
  if$
}

FUNCTION {format.journal.vol.num.date}
{ journal empty$
    { "empty journal in " cite$ * warning$
      ""
    }
    { journal
      volume empty$
	'skip$
	{ " " * volume * }
      if$
      number empty$
	'emphasizeic
	{ emphasize ", " * number * }
      if$
      year empty$
	{ "empty year in " cite$ * warning$ }
	{ " (" * format.date * ")" * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pp.pages
    { type empty$
	{ bbl.chapter }
	{ type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
	'skip$
	{ ", " * format.pp.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ 
  booktitle empty$
    { "" }
    {bbl.in booktitle emphasize *
      editor empty$
	'skip$
	{ ", " * format.ineditors * }
      if$
    }
  if$
}

% The proceedings title (it's on the stack) gets an (address, date) appended
FUNCTION {format.proc.date}
{ duplicate$ empty$
    { pop$ "" }
    { year empty$
	{ "empty year in " cite$ * warning$
	  address empty$
	    'emphasize
	    { emphasizeic
	      " (" * address * ")" *
	    }
	  if$
	}
	{ emphasizeic
	  " (" *
	  address empty$
	    'skip$
	    { address * ", " * }
	  if$
	  format.date *
	  ")" *
	}
      if$
    }
  if$
}

FUNCTION {format.in.proc.date}
{ booktitle empty$
    { "" }
    { bbl.in booktitle format.proc.date * }
  if$
}
FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { bbl.techrep }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
	{ "need key or journal for " cite$ * " to crossref " * crossref *
	  warning$
	  ""
	}
	{ bbl.in "{\em "  * journal * "\/}" * }
      if$
    }
    { bbl.in key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$  #2 >
    { pop$ bbl.etal * }
    { #2 < 'skip$
	    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
	      { bbl.etal * }
	      { bbl.and * editor #2 "{vv~}{ll}" format.name$ * }
	    if$
	    }			
    if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      bbl.in
    }
    { bbl.volume volume tie.or.space.connect
      bbl.of *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ series empty$
	    { "need editor, key, or series for " cite$ * " to crossref " *
	      crossref * warning$
	      "" *
	    }
	    { "{\em " * series * "\/}" * }
	  if$
	}
	{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ booktitle empty$
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
	      crossref * warning$
	      ""
	    }
	    { bbl.in " {\em " * booktitle * "\/}" * }
	  if$
	}
	{ bbl.in key * }
      if$
    }
    { bbl.in format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.journal.vol.num.date output
      format.pages output
    }
    { format.article.crossref output.nonnull
      format.pp.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  fa.isPersianLanguage
  {
	format.authors  output
    new.block
    format.btitle "title" output.check
    format.edition output
	new.block
    format.translators output
	format.editors  output
  }
  { author empty$
      { format.editors "author and editor" output.check }
      { format.authors output.nonnull
        crossref missing$
	      { "author and editor" editor either.or.check }
	      'skip$
        if$
      }
    if$
    new.block
    format.btitle "title" output.check
    format.edition output
  }  
  if$
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
	{ "author and editor" editor either.or.check }
	'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  format.edition output
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { 
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.date "year" output.check
  format.chapter.pages "chapter and pages" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.edition output
      format.bvolume output
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
    }
  if$
  format.chapter.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.proc.date "booktitle" output.check
      format.ineditors output
      format.bvolume output
      format.number.series output
	  organization output
	  publisher output
	}
    { format.incoll.inproc.crossref output.nonnull  }
  if$
  format.pp.pages output
  new.block
  note output
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization scapify output }
    { format.authors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.edition output
  author empty$
	{ address new.block.checka }
    { organization address new.block.checkb
      organization output
    }
  if$
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  bbl.mthesis
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkb
  format.title output
  howpublished new.block.checka
  howpublished output
  format.date output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle "title" output.check
  new.block
  bbl.phdthesis
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization scapify output }
    { format.editors output.nonnull }
  if$
  new.block
  title format.proc.date "title" output.check
  format.bvolume output
  format.number.series output
  editor empty$
	'skip$
	{ organization output }
  if$
  publisher output
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"Jan."}

MACRO {feb} {"Feb."}

MACRO {mar} {"Mar."}

MACRO {apr} {"Apr."}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"Aug."}

MACRO {sep} {"Sept."}

MACRO {oct} {"Oct."}

MACRO {nov} {"Nov."}

MACRO {dec} {"Dec."}

MACRO {acmcs} {"ACM Comput. Surv."}

MACRO {acta} {"Acta Inf."}

MACRO {cacm} {"Commun. ACM"}


MACRO {ibmjrd} {"IBM J. Res. Dev."}

MACRO {ibmsj} {"IBM Syst.~J."}


MACRO {ieeese} {"IEEE Trans. Softw. Eng."}

MACRO {ieeetc} {"IEEE Trans. Comput."}

MACRO {ieeetcad}
 {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}


MACRO {ipl} {"Inf. Process. Lett."}

MACRO {jacm} {"J.~ACM"}


MACRO {jcss} {"J.~Comput. Syst. Sci."}

MACRO {scp} {"Sci. Comput. Programming"}

MACRO {sicomp} {"SIAM J. Comput."}


MACRO {tocs} {"ACM Trans. Comput. Syst."}

MACRO {tods} {"ACM Trans. Database Syst."}

MACRO {tog} {"ACM Trans. Gr."}


MACRO {toms} {"ACM Trans. Math. Softw."}

MACRO {toois} {"ACM Trans. Office Inf. Syst."}


MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}

MACRO {tcs} {"Theoretical Comput. Sci."}

READ

FUNCTION {sortify}
{ 
  fa.isPersianLanguage
    { "l" change.case$}
    {purify$ "l" change.case$}
  if$  
  %duplicate$ write$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
      { nameptr #1 >
	    { "   " * }
	    'skip$
      if$
      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
	   { bbl.etal * }
	   { t sortify * }
      if$
	  nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$  
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
	    { "to sort, need author or key in " cite$ * warning$
	     ""
	    }
	    { key sortify }
      if$
    }
    { author sort.format.names }
  if$  
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
	{ key empty$
	    { "to sort, need author, editor, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
	{ key empty$
	    { "to sort, need author, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
	{ key empty$
	    { "to sort, need editor, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
	'editor.organization.sort
	{ type$ "manual" =
	    'author.organization.sort
	    'author.sort
	  if$
	}
      if$
    }
  if$
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=  
}

ITERATE {presort}

SORT

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {banner.message}
EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {begin.bib}
{ 
  "% Generated by plain-fa.bst,  version: " bst.file.version * " (" * bst.file.date * "), for XePersian Package" *
  write$ newline$
  "% Authors: " bst.file.authors *
  write$ newline$
  "\providecommand{\noopsort}[1]{}"
  write$ newline$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
  "\Persian" write$ newline$
}

EXECUTE {end.bib}
EXECUTE{completed.message}
%    \end{macrocode}
% \iffalse
%</acm-fa.bst>
%<*ieeetr-fa.bst>
% \fi
% \part{ieeetr-fa.bst}
%    \begin{macrocode}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bib. style "ieeetr-fa", Persian (farsi)  version of ieeetr.bst
%%
%% by: Mahmood Amintoosi and Mostafa Vahedi
%% For XePersian, a Persian Typsetting Package in XeTeX, Developed by:
%% Vafa Khalighi, Mehdi Omidali and Mostafa Vahedi 
%% 2009/02/12
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either this version
%% of this license or (at your option) any later version.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Original Copyright
% IEEE Transactions bibliography style (29-Jan-88 version)
%    numeric labels, order-of-reference, IEEE abbreviations,
%    quotes around article titles, commas separate all fields
%    except after book titles and before "notes".  Otherwise,
%    much like the "plain" family, from which this is adapted.
%

ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
	language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
	translator
    type
    volume
    year
  }
  {}
  { label }

INTEGERS { output.state before.all mid.sentence after.quote after.sentence
		after.quoted.block after.block }
STRINGS {bbl.and bbl.etal bbl.editors bbl.editor bbl.edition bbl.volume bbl.of bbl.number
		 bbl.in bbl.pages bbl.page bbl.chapter bbl.series bbl.techrep bbl.mthesis bbl.phdthesis 
		 bbl.translator}% bbl.formatnames}
FUNCTION {is.print.banners.to.terminal} { #1 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FILE VERSION AND BANNER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION{bst.file.version} { "0.3" }
FUNCTION{bst.file.date} { "2009/02/12" }
FUNCTION{bst.file.website} { "http://developer.berlios.de/projects/xepersian" }
FUNCTION{bst.file.authors} {"M.Amintoosi and M.Vahedi" }

FUNCTION {banner.message}
{ is.print.banners.to.terminal
     { "-- ieeetr-fa.bst version" " " * bst.file.version *
       " (" * bst.file.date * ") " * %"by " * bst.file.authors *
       top$
       "-- This is a BibTeX style for XePersian: " bst.file.website *
       %top$
       %"-- See the " quote$ * "xepersian_bibtex_userguide.pdf" * quote$ * " manual for usage information." *
       top$
     }
     { skip$ }
   if$
}

FUNCTION {completed.message}
{ is.print.banners.to.terminal
     { ""
       top$
       "Done."
       top$
     }
     { skip$ }
   if$
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Persian Functions	   %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {fa.isPersianLanguage}
{
  language missing$
    {#0}
    {language "l" change.case$ "persian" =}
  if$
}

FUNCTION {keywords.fa}
{
  " و " 			'bbl.and 		:=
  " و دیگران" 		'bbl.etal 		:=
  " ویراستاران " 	'bbl.editors 	:=
  " ویراسته‌ی " 		'bbl.editor 	:=
  " ویرایش " 		'bbl.edition    :=
  " جلد " 			'bbl.volume		:=
  " از " 			'bbl.of			:=
  " شماره " 			'bbl.number		:=
  " در " 			'bbl.in 		:=
  " صفحات " 		'bbl.pages 		:=
  " ص." 			'bbl.page 		:=
  " فصل " 			'bbl.chapter	:=
  " سری "				'bbl.series		:=
  " گزارش طرح تحقیقی"	'bbl.techrep	:=
  " پایان‌نامه کارشناسی‌ارشد" 'bbl.mthesis 	:=
  " پایان‌نامه دکترا" 		'bbl.phdthesis	:=   
  " ترجمه‌ی "					'bbl.translator :=  
}

FUNCTION {keywords.en}
{
  " and " 			'bbl.and 		:=
  " et~al." 		'bbl.etal 		:=
  " Eds." 			'bbl.editors 	:=
  " Ed." 			'bbl.editor 	:=
  " Ed." 			'bbl.edition    :=
  " Vol." 			'bbl.volume		:=
  " of " 			'bbl.of			:=
  " No." 			'bbl.number		:=
  " In " 			'bbl.in 		:=
  " pp." 			'bbl.pages 		:=
  " p." 			'bbl.page 		:=
  " Ch." 			'bbl.chapter	:=
  " Ser."			'bbl.series		:=
  " Tech. Rep."		'bbl.techrep	:=
  " Master's thesis" 'bbl.mthesis 	:=
  " Ph.D. disseration"  'bbl.phdthesis	:=   
  " Translator "	'bbl.translator :=
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% End of Persian Functions %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.quote :=
  #3 'after.sentence :=
  #4 'after.quoted.block :=
  #5 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.quote =
	{ " " * write$ }
	{ output.state after.block =
	    { add.period$ write$
	      newline$
	      "\newblock " write$
	    }
	    { output.state before.all =
		'write$
		{ output.state after.quoted.block =
		    { write$
		      newline$
		      "\newblock " write$
		    }
		    { add.period$ " " * write$ }
		  if$
		}
	      if$
	    }
	  if$
	}
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  fa.isPersianLanguage
    { keywords.fa
	  "\Persian" write$
      newline$ }
    { keywords.en
	  "\Latin" write$
      newline$ }
  if$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {blank.sep}
{ after.quote 'output.state :=
}

FUNCTION {fin.entry}
{ output.state after.quoted.block =
    'skip$
    'add.period$
  if$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { output.state after.quote =
	{ after.quoted.block 'output.state := }
	{ after.block 'output.state := }
      if$
    }
  if$
}

FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
	'skip$
	{ after.sentence 'output.state := }
      if$
    }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { %s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
      fa.isPersianLanguage 
        { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't :=}
        { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=}
      if$  
	  nameptr #1 >
	{ namesleft #1 >
	    { ", " * t * }
	    { numnames #2 >
		{ "," * }
		'skip$
	      if$
	      t "others" =
		{ " {\em" * bbl.etal * "}" * }
		{ bbl.and * t * }
	      if$
	    }
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { fa.isPersianLanguage
	    {
		editor num.names$ #1 >
			{bbl.editors editor format.names * }
			{bbl.editor editor format.names * }
		if$
		}
		{
 		editor format.names
		editor num.names$ #1 >
			{ ", " bbl.editors * *}
			{ ", " bbl.editor * *}
		if$
		}
	  if$	
    }
  if$
}

FUNCTION {format.translators}
{ translator empty$
    { "" }
    { fa.isPersianLanguage
	    {
		bbl.translator translator format.names *
		}
		{
 		translator format.names
		", " bbl.translator * *
		}
	  if$	
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
	{ fa.isPersianLanguage
        { "''" title * ",``" * }
	    { "``" title "t" change.case$ * ",''" * }
	  if$ 
	}
  if$
}

FUNCTION {format.title.p}
{ title empty$
    { "" }
	{ fa.isPersianLanguage
        { "''" title * ",``" * }
	    { "``" title "t" change.case$ * ",''" * }
	  if$ 
	}
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
	{ t #1 #2 substring$ "--" = not
	    { "--" *
	      t #2 global.max$ substring$ 't :=
	    }
	    {   { t #1 #1 substring$ "-" = }
		{ "-" *
		  t #2 global.max$ substring$ 't :=
		}
	      while$
	    }
	  if$
	}
	{ t #1 #1 substring$ *
	  t #2 global.max$ substring$ 't :=
	}
      if$
    }
  while$
}

FUNCTION {format.date}
{ year empty$
    { month empty$
	{ "" }
	{ "there's a month but no year in " cite$ * warning$
	  month
	}
      if$
    }
    { month empty$
	'year
	{ month " " * year * }
      if$
    }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { bbl.volume volume *
      series empty$
	'skip$
	{ bbl.of * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
	{ series field.or.null }
	{ output.state mid.sentence =
	    { bbl.number }
	    { bbl.number "t" change.case$ }
	  if$
	  number tie.or.space.connect
	  series empty$
	    { "there's a number but no series in " cite$ * warning$ }
	    { bbl.in * series * }
	  if$
	}
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { fa.isPersianLanguage
	    {
		   bbl.edition edition * 
		}
		{
	      output.state mid.sentence =
	       { edition "l" change.case$ bbl.edition * }
	       { edition "t" change.case$ bbl.edition * }
          if$
		}
	  if$	
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
	{ #1 'multiresult := }
	{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
	{ bbl.pages pages n.dashify * }
	{ bbl.page pages * }
      if$
    }
  if$
}

FUNCTION {format.volume}
{ volume empty$
    { "" }
    { bbl.volume volume * }%M.Amintoosi "vol.~"
  if$
}

FUNCTION {format.number}
{ number empty$
    { "" }
    { bbl.number number * }%M.Amintoosi "no.~"
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
	{ bbl.chapter }
	{ type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
	'skip$
	{ ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
    { "" }
    { bbl.in booktitle emphasize *
      editor empty$
	   'skip$
	   { " (" * format.editors * ")" * }
      if$
    }
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      output.state after.block =
	{ type "t" change.case$ }
	{ type "l" change.case$ }
      if$
    }
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { bbl.techrep }
    'type
  if$
  number empty$
    { "l" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.addr.pub}
{ publisher empty$
    { "" }
    { address empty$
	{ "" }
	{ address ": " * }
      if$
      publisher *
    }
  if$
}

FUNCTION {format.paddress}
{ address empty$
    { "" }
    { "(" address * ")" * }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
	{ "need key or journal for " cite$ * " to crossref " * crossref *
	  warning$
	  ""
	}
	{ bbl.in "{\em " * journal * "\/}" * }
      if$
    }
    { bbl.in  key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$
  #2 >
    { pop$ " {\em" * bbl.etal * "}" * }
    { #2 <
	'skip$
	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
	    { " {\em"  bbl.etal * "}" * }
	    { bbl.and * editor #2 "{vv~}{ll}" format.name$ * }
	  if$
	}
      if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      bbl.in
    }
    { bbl.volume volume tie.or.space.connect
      bbl.of  *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ series empty$
	    { "need editor, key, or series for " cite$ * " to crossref " *
	      crossref * warning$
	      "" *
	    }
	    { "{\em " * series * "\/}" * }
	  if$
	}
	{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ booktitle empty$
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
	      crossref * warning$
	      ""
	    }
	    { bbl.in "{\em " * booktitle * "\/}" * }
	  if$
	}
	{ bbl.in key * }
      if$
    }
    { bbl.in format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  crossref missing$
    { journal emphasize "journal" output.check
      format.volume output
      month empty$
	{ format.number output }
	'skip$
      if$
      format.pages output
      format.date "year" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  fa.isPersianLanguage
  {
	format.authors  output
    new.block
    format.btitle "title" output.check
	new.block
    format.translators output
	format.editors  output
  }
  { author empty$
      { format.editors "author and editor" output.check }
      { format.authors output.nonnull
        crossref missing$
	      { "author and editor" editor either.or.check }
	      'skip$
        if$
      }
    if$
    new.block
    format.btitle "title" output.check
  }  
  if$
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      format.addr.pub "publisher" output.check
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  title empty$
    { "empty title in " cite$ * warning$
      howpublished new.sentence.checka
    }
    { howpublished empty$ not
      address empty$ month empty$ year empty$ and and
      or
	{ format.title.p output.nonnull }
	{ format.title output.nonnull }
      if$
      blank.sep
    }
  if$
  howpublished output
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
	{ "author and editor" editor either.or.check }
	'skip$
      if$
    }
  if$
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      format.addr.pub "publisher" output.check
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      format.addr.pub "publisher" output.check
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.paddress output
      format.pages output
      organization output
      publisher output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
	'skip$
	{ organization output.nonnull
	  address output
	}
      if$
    }
    { format.authors output.nonnull }
  if$
  format.btitle "title" output.check
  author empty$
    { organization empty$
	{ address new.block.checka
	  address output
	}
	'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  bbl.mthesis format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title empty$
    { howpublished new.sentence.checka }
    { howpublished empty$ not
      month empty$ year empty$ and
      or
	{ format.title.p output.nonnull }
	{ format.title output.nonnull }
      if$
      blank.sep
    }
  if$
  howpublished output
  format.date output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  format.btitle "title" output.check
  new.block
  bbl.phdthesis format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  format.paddress output
  editor empty$
    'skip$
    { organization output }
  if$
  publisher output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  format.title.p "title" output.check
  blank.sep
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"Jan."}

MACRO {feb} {"Feb."}

MACRO {mar} {"Mar."}

MACRO {apr} {"Apr."}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"Aug."}

MACRO {sep} {"Sept."}

MACRO {oct} {"Oct."}

MACRO {nov} {"Nov."}

MACRO {dec} {"Dec."}

MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications ACM"}

MACRO {ibmjrd} {"IBM J. Research and Development"}

MACRO {ibmsj} {"IBM Systems~J."}

MACRO {ieeese} {"IEEE Trans. Software Engineering"}

MACRO {ieeetc} {"IEEE Trans. Computers"}

MACRO {ieeetcad}
 {"IEEE Trans. Computer-Aided Design"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"J.~ACM"}

MACRO {jcss} {"J.~Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM J. Computing"}

MACRO {tocs} {"ACM Trans. Computer Systems"}

MACRO {tods} {"ACM Trans. Database Systems"}

MACRO {tog} {"ACM Trans. Graphics"}

MACRO {toms} {"ACM Trans. Mathematical Software"}

MACRO {toois} {"ACM Trans. Office Information Systems"}

MACRO {toplas} {"ACM Trans. Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}

READ

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {banner.message}
EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}
FUNCTION {begin.bib}
{ 
  "% Generated by plain-fa.bst,  version: " bst.file.version * " (" * bst.file.date * "), for XePersian Package" *
  write$ newline$
  "% Authors: " bst.file.authors *
  write$ newline$
  "\providecommand{\noopsort}[1]{}"
  write$ newline$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
  "\Persian" write$ newline$
}

EXECUTE {end.bib}
EXECUTE{completed.message}
%    \end{macrocode}
% \iffalse
%</ieeetr-fa.bst>
%<*plain-fa.bst>
% \fi
% \part{plain-fa.bst}
%    \begin{macrocode}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bib. style "plain-fa", Persian (farsi)  version of plain.bst
%%
%% by: Mahmood Amintoosi and Mostafa Vahedi
%% For XePersian, a Persian Typsetting Package in XeTeX, Developed by:
%% Vafa Khalighi, Mehdi Omidali and Mostafa Vahedi 
%% 2009/02/09
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either this version
%% of this license or (at your option) any later version.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Original Copyright
% BibTeX standard bibliography style `plain'
	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
	% Copyright (C) 1985, all rights reserved.
	% Copying of this file is authorized only if either
	% (1) you make absolutely no changes to your copy, including name, or
	% (2) if you do make changes, you name it something other than
	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
	% This restriction helps ensure that all standard styles are identical.
	% The file btxbst.doc has the documentation for this style.

%History
% 2009/02/11, Copy and made the necessary changes from unsrt-fa.bst
%		Changing the sortify function so that it does nothing for persian entries
% 2009/02/12, Chaniging format.names so that prints last name and then first names, 
%	also it uses only one character of latin first names and whole persian first names
	
ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
	language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
	translator
    type
    volume
    year
  }
  {}
  { label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }
STRINGS {bbl.and bbl.etal bbl.editors bbl.editor bbl.edition bbl.volume bbl.of bbl.number
		 bbl.in bbl.pages bbl.page bbl.chapter bbl.series bbl.techrep bbl.mthesis bbl.phdthesis 
		 bbl.translator}% bbl.formatnames}
FUNCTION {is.print.banners.to.terminal} { #1 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FILE VERSION AND BANNER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION{bst.file.version} { "0.2" }
FUNCTION{bst.file.date} { "2009/02/09" }
FUNCTION{bst.file.website} { "http://developer.berlios.de/projects/xepersian" }
FUNCTION{bst.file.authors} {"M.Amintoosi and M.Vahedi" }

FUNCTION {banner.message}
{ is.print.banners.to.terminal
     { "-- plain-fa.bst version" " " * bst.file.version *
       " (" * bst.file.date * ") " * %"by " * bst.file.authors *
       top$
       "-- This is a BibTeX style for XePersian: " bst.file.website *
       %top$
       %"-- See the " quote$ * "xepersian_bibtex_userguide.pdf" * quote$ * " manual for usage information." *
       top$
     }
     { skip$ }
   if$
}

FUNCTION {completed.message}
{ is.print.banners.to.terminal
     { ""
       top$
       "Done."
       top$
     }
     { skip$ }
   if$
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Persian Functions	   %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {fa.isPersianLanguage}
{
  language missing$
    {#0}
    {language "l" change.case$ "persian" =}
  if$
}

FUNCTION {keywords.fa}
{
  " و " 			'bbl.and 		:=
  " و دیگران" 		'bbl.etal 		:=
  " ویراستاران " 	'bbl.editors 	:=
  " ویراسته‌ی " 		'bbl.editor 	:=
  " ویرایش " 		'bbl.edition    :=
  " جلد " 			'bbl.volume		:=
  " از " 			'bbl.of			:=
  " شماره " 			'bbl.number		:=
  " در " 			'bbl.in 		:=
  " صفحات " 		'bbl.pages 		:=
  " ص." 			'bbl.page 		:=
  " فصل " 			'bbl.chapter	:=
  " سری "				'bbl.series		:=
  " گزارش طرح تحقیقی"	'bbl.techrep	:=
  " پایان‌نامه کارشناسی‌ارشد" 'bbl.mthesis 	:=
  " پایان‌نامه دکترا" 		'bbl.phdthesis	:=   
  " ترجمه‌ی "					'bbl.translator :=  
}

FUNCTION {keywords.en}
{
  " and " 			'bbl.and 		:=
  " et~al." 		'bbl.etal 		:=
  " Eds." 			'bbl.editors 	:=
  " Ed." 			'bbl.editor 	:=
  " Ed." 			'bbl.edition    :=
  " Vol." 			'bbl.volume		:=
  " of " 			'bbl.of			:=
  " No." 			'bbl.number		:=
  " In " 			'bbl.in 		:=
  " pp." 			'bbl.pages 		:=
  " p." 			'bbl.page 		:=
  " Ch." 			'bbl.chapter	:=
  " Ser."			'bbl.series		:=
  " Tech. Rep."		'bbl.techrep	:=
  " Master's thesis" 'bbl.mthesis 	:=
  " Ph.D. disseration"  'bbl.phdthesis	:=   
  " Translator "	'bbl.translator :=
  %"{vv~}{ll}{, jj}{, f.}"   'bbl.formatnames :=
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% End of Persian Functions %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
	{ add.period$ write$
	  newline$
	  "\newblock " write$
	}
	{ output.state before.all =
	    'write$
	    { add.period$ " " * write$ }
	  if$
	}
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ 
  newline$
  fa.isPersianLanguage
    { keywords.fa
	  "\Persian" write$
      newline$ }
    { keywords.en
	  "\Latin" write$
      newline$ }
  if$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
	'skip$
	{ after.sentence 'output.state := }
      if$
    }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
 { namesleft #0 > }
    { 
      s nameptr "{vv~}{ll}{, jj}{, ff}"  format.name$ 't :=   %{ff~}{vv~}{ll}{, jj}
	  %fa.isPersianLanguage 
	  %  {s nameptr "{vv~}{ll}{, jj}{, ff}"  format.name$ 't :=   %{ff~}{vv~}{ll}{, jj}
	  %  }
	  %  {s nameptr "{vv~}{ll}{, jj}{, f.}"  format.name$ 't :=  
		%t "t" change.case$ 't := %I wrote it to lower the letters of latin last names, but it also affected the first name
		%}
	  %if$	
    nameptr #1 >
	{ namesleft #1 >
	    { ", " * t * }
	    { numnames #2 >
		   { "," * }
		   'skip$
	      if$
	      t "others" =
		    { bbl.etal * }
		    { bbl.and * t * }
	      if$
	    }
	  if$
	}
	't
    if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { fa.isPersianLanguage
	    {
		editor num.names$ #1 >
			{bbl.editors editor format.names * }
			{bbl.editor editor format.names * }
		if$
		}
		{
 		editor format.names
		editor num.names$ #1 >
			{ ", " bbl.editors * *}
			{ ", " bbl.editor * *}
		if$
		}
	  if$	
    }
  if$
}

FUNCTION {format.translators}
{ translator empty$
    { "" }
    { fa.isPersianLanguage
	    {
		bbl.translator translator format.names *
		}
		{
 		translator format.names
		", " bbl.translator * *
		}
	  if$	
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ }
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
	{ t #1 #2 substring$ "--" = not
	    { "--" *
	      t #2 global.max$ substring$ 't :=
	    }
	    {   { t #1 #1 substring$ "-" = }
		{ "-" *
		  t #2 global.max$ substring$ 't :=
		}
	      while$
	    }
	  if$
	}
	{ t #1 #1 substring$ *
	  t #2 global.max$ substring$ 't :=
	}
      if$
    }
  while$
}

FUNCTION {format.date}
{ year empty$
    { month empty$
	{ "" }
	{ "there's a month but no year in " cite$ * warning$
	  month
	}
      if$
    }
    { month empty$
	'year
	{ month " " * year * }
      if$
    }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { bbl.volume volume tie.or.space.connect
      series empty$
	'skip$
	{ bbl.of * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
	{ series field.or.null }
	{ output.state mid.sentence =
	    { bbl.number }
	    { bbl.number "t" change.case$ }
	  if$
	  number tie.or.space.connect
	  series empty$
	    { "there's a number but no series in " cite$ * warning$ }
	    { bbl.in * series * }
	  if$
	}
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { fa.isPersianLanguage
	    {
		   bbl.edition edition * 
		}
		{
	      output.state mid.sentence =
	       { edition "l" change.case$ bbl.edition * }
	       { edition "t" change.case$ bbl.edition * }
          if$
		}
	  if$	
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
	{ #1 'multiresult := }
	{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
    { pages multi.page.check
	   { bbl.pages pages n.dashify tie.or.space.connect }
	   { bbl.page pages tie.or.space.connect }
      if$
    }
  if$
}

FUNCTION {format.vol.num.pages}
{ volume field.or.null
  number empty$
    'skip$
    { "(" number * ")" * *
      volume empty$
	{ "there's a number but no volume in " cite$ * warning$ }
	'skip$
      if$
    }
  if$
  pages empty$
    'skip$
    { duplicate$ empty$
	{ pop$ format.pages }
	{ ":" * pages n.dashify * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
	{ bbl.chapter }
	{ type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
	'skip$
	{ ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ 
  booktitle empty$
    { "" }
    { editor empty$
	    { bbl.in booktitle emphasize * }
	    { bbl.in format.editors * ", " * booktitle emphasize * }
	  if$
	}  
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
  key empty$ not and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { bbl.techrep }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
	{ "need key or journal for " cite$ * " to crossref " * crossref *
	  warning$
	  ""
	}
	{ bbl.in "{\em "  * journal * "\/}" * }
      if$
    }
    { bbl.in key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$  #2 >
    { pop$ bbl.etal * }
    { #2 < 'skip$
	    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =%"{ff }{vv }{ll}{ jj}"
	      { bbl.etal * }
	      { bbl.and * editor #2 "{vv~}{ll}" format.name$ * }
	    if$
	    }			
    if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      bbl.in
    }
    { bbl.volume volume tie.or.space.connect
      bbl.of *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ series empty$
	    { "need editor, key, or series for " cite$ * " to crossref " *
	      crossref * warning$
	      "" *
	    }
	    { "{\em " * series * "\/}" * }
	  if$
	}
	{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ booktitle empty$
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
	      crossref * warning$
	      ""
	    }
	    { bbl.in " {\em " * booktitle * "\/}" * }
	  if$
	}
	{ bbl.in key * }
      if$
    }
    { bbl.in format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { journal emphasize "journal" output.check
      format.vol.num.pages output
      format.date "year" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  fa.isPersianLanguage
  {
	format.authors  output
    new.block
    format.btitle "title" output.check
	new.block
    format.translators output
	format.editors  output
  }
  { author empty$
      { format.editors "author and editor" output.check }
      { format.authors output.nonnull
        crossref missing$
	      { "author and editor" editor either.or.check }
	      'skip$
        if$
      }
    if$
    new.block
    format.btitle "title" output.check
  }  
  if$
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
	{ "author and editor" editor either.or.check }
	'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.pages output
      address empty$
	{ organization publisher new.sentence.checkb
	  organization output
	  publisher output
	  format.date "year" output.check
	}
	{ address output.nonnull
	  format.date "year" output.check
	  new.sentence
	  organization output
	  publisher output
	}
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
	'skip$
	{ organization output.nonnull
	  address output
	}
      if$
    }
    { format.authors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  author empty$
    { organization empty$
	{ address new.block.checka
	  address output
	}
	'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  bbl.mthesis
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkb
  format.title output
  howpublished new.block.checka
  howpublished output
  format.date output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle "title" output.check
  new.block
  bbl.phdthesis
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
	{ publisher new.sentence.checka }
	{ organization publisher new.sentence.checkb
	  organization output
	}
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
	'skip$
	{ organization output }
      if$
      publisher output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"January"}

MACRO {feb} {"February"}

MACRO {mar} {"March"}

MACRO {apr} {"April"}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {oct} {"October"}

MACRO {nov} {"November"}

MACRO {dec} {"December"}

MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications of the ACM"}

MACRO {ibmjrd} {"IBM Journal of Research and Development"}

MACRO {ibmsj} {"IBM Systems Journal"}

MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

MACRO {ieeetc} {"IEEE Transactions on Computers"}

MACRO {ieeetcad}
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"Journal of the ACM"}

MACRO {jcss} {"Journal of Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM Journal on Computing"}

MACRO {tocs} {"ACM Transactions on Computer Systems"}

MACRO {tods} {"ACM Transactions on Database Systems"}

MACRO {tog} {"ACM Transactions on Graphics"}

MACRO {toms} {"ACM Transactions on Mathematical Software"}

MACRO {toois} {"ACM Transactions on Office Information Systems"}

MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}

READ

FUNCTION {sortify}
{ 
  fa.isPersianLanguage
    { "l" change.case$}
    {purify$ "l" change.case$}
  if$  
  %duplicate$ write$
}

INTEGERS { len }

FUNCTION {chop.word}
{ 's :=
  'len :=
  s #1 len substring$ =
    { s len #1 + global.max$ substring$ }
    's
  if$
}

FUNCTION {sort.format.names}
{ 's :=
  #1 'nameptr :=
  ""
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
      { nameptr #1 >
	    { "   " * }
	    'skip$
      if$
      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
      nameptr numnames = t "others" = and
	   { bbl.etal * }
	   %{ t write$ t sortify * t write$	   }
	   { t sortify * }
      if$
	  nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$  
}

FUNCTION {sort.format.title}
{ 't :=
  "A " #2
    "An " #3
      "The " #4 t chop.word
    chop.word
  chop.word
  sortify
  #1 global.max$ substring$
}

FUNCTION {author.sort}
{ author empty$
    { key empty$
	    { "to sort, need author or key in " cite$ * warning$
	     ""
	    }
	    { key sortify }
      if$
    }
    { author sort.format.names }
  if$  
}

FUNCTION {author.editor.sort}
{ author empty$
    { editor empty$
	{ key empty$
	    { "to sort, need author, editor, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ editor sort.format.names }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {author.organization.sort}
{ author empty$
    { organization empty$
	{ key empty$
	    { "to sort, need author, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { author sort.format.names }
  if$
}

FUNCTION {editor.organization.sort}
{ editor empty$
    { organization empty$
	{ key empty$
	    { "to sort, need editor, organization, or key in " cite$ * warning$
	      ""
	    }
	    { key sortify }
	  if$
	}
	{ "The " #4 organization chop.word sortify }
      if$
    }
    { editor sort.format.names }
  if$
}

FUNCTION {presort}
{ type$ "book" =
  type$ "inbook" =
  or
    'author.editor.sort
    { type$ "proceedings" =
	'editor.organization.sort
	{ type$ "manual" =
	    'author.organization.sort
	    'author.sort
	  if$
	}
      if$
    }
  if$
  "    "
  *
  year field.or.null sortify
  *
  "    "
  *
  title field.or.null
  sort.format.title
  *
  #1 entry.max$ substring$
  'sort.key$ :=  
}

ITERATE {presort}

SORT

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {banner.message}
EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {begin.bib}
{ 
  "% Generated by plain-fa.bst,  version: " bst.file.version * " (" * bst.file.date * "), for XePersian Package" *
  write$ newline$
  "% Authors: " bst.file.authors *
  write$ newline$
  "\providecommand{\noopsort}[1]{}"
  write$ newline$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
  "\Persian" write$ newline$
}

EXECUTE {end.bib}
EXECUTE{completed.message}
%    \end{macrocode}
% \iffalse
%</plain-fa.bst>
%<*unsrt-fa.bst>
% \fi
% \part{unsrt-fa.bst}
%    \begin{macrocode}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Bib. style "usrt-fa", Persian (farsi)  version of unsrt.bst
%%
%% by: Mahmood Amintoosi and Mostafa Vahedi
%% For XePersian, a Persian Typsetting Package in XeTeX, Developed by:
%% Vafa Khalighi, Mehdi Omidali and Mostafa Vahedi 
%% 2009/02/09
%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either this version
%% of this license or (at your option) any later version.
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Original Copyright
% BibTeX standard bibliography style `unsrt'
	% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
	% Copyright (C) 1985, all rights reserved.
	% Copying of this file is authorized only if either
	% (1) you make absolutely no changes to your copy, including name, or
	% (2) if you do make changes, you name it something other than
	% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
	% This restriction helps ensure that all standard styles are identical.
	% The file btxbst.doc has the documentation for this style.

%%%%%%%%%%% History:
% 2009/02/07: v.1, First Release
% 2009/02/08: v.2, Some bugs fixed
% 2009/02/09: v.21, I have to check the persian language in format.edition, because in Persian, "edition" lies before the edition number. 
% 2009/02/09: v.22, I added a field Translator for translated books


ENTRY
  { address
    author
    booktitle
    chapter
    edition
    editor
    howpublished
    institution
    journal
    key
	language
    month
    note
    number
    organization
    pages
    publisher
    school
    series
    title
	translator
    type
    volume
    year
  }
  {}
  { label }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }
STRINGS {bbl.and bbl.etal bbl.editors bbl.editor bbl.edition bbl.volume bbl.of bbl.number
		 bbl.in bbl.pages bbl.page bbl.chapter bbl.series bbl.techrep bbl.mthesis bbl.phdthesis 
		 bbl.translator }
FUNCTION {is.print.banners.to.terminal} { #1 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% FILE VERSION AND BANNER %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION{bst.file.version} { "0.22" }
FUNCTION{bst.file.date} { "2009/02/09" }
FUNCTION{bst.file.website} { "http://developer.berlios.de/projects/xepersian" }
FUNCTION{bst.file.authors} {"M.Amintoosi and M.Vahedi" }

FUNCTION {banner.message}
{ is.print.banners.to.terminal
     { "-- unsrt-fa.bst version" " " * bst.file.version *
       " (" * bst.file.date * ") " * %"by " * bst.file.authors *
       top$
       "-- This is a BibTeX style for XePersian: " bst.file.website *
       %top$
       %"-- See the " quote$ * "xepersian_bibtex_userguide.pdf" * quote$ * " manual for usage information." *
       top$
     }
     { skip$ }
   if$
}

FUNCTION {completed.message}
{ is.print.banners.to.terminal
     { ""
       top$
       "Done."
       top$
     }
     { skip$ }
   if$
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Persian Functions	   %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

FUNCTION {fa.isPersianLanguage}
{
  language missing$
    {#0}
    {language "l" change.case$ "persian" =}
  if$
}

FUNCTION {keywords.fa}
{
  " و " 			'bbl.and 		:=
  " و دیگران" 		'bbl.etal 		:=
  " ویراستاران " 	'bbl.editors 	:=
  " ویراسته‌ی " 		'bbl.editor 	:=
  " ویرایش " 		'bbl.edition    :=
  " جلد " 			'bbl.volume		:=
  " از " 			'bbl.of			:=
  " شماره " 			'bbl.number		:=
  " در " 			'bbl.in 		:=
  " صفحات " 		'bbl.pages 		:=
  " ص." 			'bbl.page 		:=
  " فصل " 			'bbl.chapter	:=
  " سری "				'bbl.series		:=
  " گزارش طرح تحقیقی"	'bbl.techrep	:=
  " پایان‌نامه کارشناسی‌ارشد" 'bbl.mthesis 	:=
  " پایان‌نامه دکترا" 		'bbl.phdthesis	:=   
  " ترجمه‌ی "					'bbl.translator :=
}

FUNCTION {keywords.en}
{
  " and " 			'bbl.and 		:=
  " et~al." 		'bbl.etal 		:=
  " eds." 			'bbl.editors 	:=
  " ed." 			'bbl.editor 	:=
  " ed." 			'bbl.edition    :=
  " Vol." 			'bbl.volume		:=
  " of " 			'bbl.of			:=
  " No." 			'bbl.number		:=
  " In " 			'bbl.in 		:=
  " pp." 			'bbl.pages 		:=
  " p." 			'bbl.page 		:=
  " Ch." 			'bbl.chapter	:=
  " Ser."			'bbl.series		:=
  " Tech. Rep."		'bbl.techrep	:=
  " Master's thesis" 'bbl.mthesis 	:=
  " Ph.D. disseration"  'bbl.phdthesis	:=   
  " Translator "	'bbl.translator :=
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% End of Persian Functions %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


FUNCTION {init.state.consts}
{ #0 'before.all :=
  #1 'mid.sentence :=
  #2 'after.sentence :=
  #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
  output.state mid.sentence =
    { ", " * write$ }
    { output.state after.block =
	{ add.period$ write$
	  newline$
	  "\newblock " write$
	}
	{ output.state before.all =
	    'write$
	    { add.period$ " " * write$ }
	  if$
	}
      if$
      mid.sentence 'output.state :=
    }
  if$
  s
}

FUNCTION {output}
{ duplicate$ empty$
    'pop$
    'output.nonnull
  if$
}

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

FUNCTION {output.bibitem}
{ newline$
  fa.isPersianLanguage
    { keywords.fa
	  "\Persian" write$
      newline$ }
    { keywords.en
	  "\Latin" write$
      newline$ }
  if$
  "\bibitem{" write$
  cite$ write$
  "}" write$
  newline$
  ""
  before.all 'output.state :=
}

FUNCTION {fin.entry}
{ add.period$
  write$
  newline$
}

FUNCTION {new.block}
{ output.state before.all =
    'skip$
    { after.block 'output.state := }
  if$
}

FUNCTION {new.sentence}
{ output.state after.block =
    'skip$
    { output.state before.all =
	'skip$
	{ after.sentence 'output.state := }
      if$
    }
  if$
}

FUNCTION {not}
{   { #0 }
    { #1 }
  if$
}

FUNCTION {and}
{   'skip$
    { pop$ #0 }
  if$
}

FUNCTION {or}
{   { pop$ #1 }
    'skip$
  if$
}

FUNCTION {new.block.checka}
{ empty$
    'skip$
    'new.block
  if$
}

FUNCTION {new.block.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.block
  if$
}

FUNCTION {new.sentence.checka}
{ empty$
    'skip$
    'new.sentence
  if$
}

FUNCTION {new.sentence.checkb}
{ empty$
  swap$ empty$
  and
    'skip$
    'new.sentence
  if$
}

FUNCTION {field.or.null}
{ duplicate$ empty$
    { pop$ "" }
    'skip$
  if$
}

FUNCTION {emphasize}
{ duplicate$ empty$
    { pop$ "" }
    { "{\em " swap$ * "}" * }
  if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := %{ff}{vv~}{ll}{, jj}
      nameptr #1 >
	{ namesleft #1 >
	    { ", " * t * }
	    { numnames #2 >
		{ "," * }
		'skip$
	      if$
		  t "others" =
		     { bbl.etal * }
		     { bbl.and * t * }
	      if$
		}
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

FUNCTION {format.editors}
{ editor empty$
    { "" }
    { fa.isPersianLanguage
	    {
		editor num.names$ #1 >
			{bbl.editors editor format.names * }
			{bbl.editor editor format.names * }
		if$
		}
		{
 		editor format.names
		editor num.names$ #1 >
			{ ", " bbl.editors * *}
			{ ", " bbl.editor * *}
		if$
		}
	  if$	
    }
  if$
}

FUNCTION {format.translators}
{ translator empty$
    { "" }
    { fa.isPersianLanguage
	    {
		bbl.translator translator format.names *
		}
		{
 		translator format.names
		", " bbl.translator * *
		}
	  if$	
    }
  if$
}

FUNCTION {format.title}
{ title empty$
    { "" }
    { title "t" change.case$ }
  if$
}

FUNCTION {n.dashify}
{ 't :=
  ""
    { t empty$ not }
    { t #1 #1 substring$ "-" =
	{ t #1 #2 substring$ "--" = not
	    { "--" *
	      t #2 global.max$ substring$ 't :=
	    }
	    {   { t #1 #1 substring$ "-" = }
		{ "-" *
		  t #2 global.max$ substring$ 't :=
		}
	      while$
	    }
	  if$
	}
	{ t #1 #1 substring$ *
	  t #2 global.max$ substring$ 't :=
	}
      if$
    }
  while$
}

FUNCTION {format.date}
{ year empty$
    { month empty$
	{ "" }
	{ "there's a month but no year in " cite$ * warning$
	  month
	}
      if$
    }
    { month empty$
	'year
	{ month " " * year * }
      if$
    }
  if$
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
    { "~" }
    { " " }
  if$
  swap$ * *
}

FUNCTION {either.or.check}
{ empty$
    'pop$
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  if$
}

FUNCTION {format.bvolume}
{ volume empty$
    { "" }
    { bbl.volume volume tie.or.space.connect
      series empty$
	'skip$
	{ bbl.of * series emphasize * }
      if$
      "volume and number" number either.or.check
    }
  if$
}

FUNCTION {format.number.series}
{ volume empty$
    { number empty$
	{ series field.or.null }
	{ output.state mid.sentence =
	    { bbl.number }
	    { bbl.number "t" change.case$ }
	  if$
	  number tie.or.space.connect
	  series empty$
	    { "there's a number but no series in " cite$ * warning$ }
	    { bbl.in * series * }
	  if$
	}
      if$
    }
    { "" }
  if$
}

FUNCTION {format.edition}
{ edition empty$
    { "" }
    { fa.isPersianLanguage
	    {
		   bbl.edition edition * 
		}
		{
	      output.state mid.sentence =
	       { edition "l" change.case$ bbl.edition * }
	       { edition "t" change.case$ bbl.edition * }
          if$
		}
	  if$	
    }
  if$
}

INTEGERS { multiresult }

FUNCTION {multi.page.check}
{ 't :=
  #0 'multiresult :=
    { multiresult not
      t empty$ not
      and
    }
    { t #1 #1 substring$
      duplicate$ "-" =
      swap$ duplicate$ "," =
      swap$ "+" =
      or or
	{ #1 'multiresult := }
	{ t #2 global.max$ substring$ 't := }
      if$
    }
  while$
  multiresult
}

FUNCTION {format.pages}
{ pages empty$
    { "" }
	{  pages multi.page.check
	    { bbl.pages pages n.dashify tie.or.space.connect }
	    { bbl.page pages tie.or.space.connect }
       if$
    }
  if$
}

FUNCTION {format.vol.num.pages}
{ volume field.or.null
  number empty$
    'skip$
    { "(" number * ")" * *
      volume empty$
	{ "there's a number but no volume in " cite$ * warning$ }
	'skip$
      if$
    }
  if$
  pages empty$
    'skip$
    { duplicate$ empty$
	{ pop$ format.pages }
	{ ":" * pages n.dashify * }
      if$
    }
  if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
    'format.pages
    { type empty$
	{ bbl.chapter }
	{ type "l" change.case$ }
      if$
      chapter tie.or.space.connect
      pages empty$
	'skip$
	{ ", " * format.pages * }
      if$
    }
  if$
}

FUNCTION {format.in.ed.booktitle}
{ 
  booktitle empty$
    { "" }
    { editor empty$
	    { bbl.in booktitle emphasize * }
	    { bbl.in format.editors * ", " * booktitle emphasize * }
	  if$
	}  
  if$
}

FUNCTION {empty.misc.check}
{ author empty$ title empty$ howpublished empty$
  month empty$ year empty$ note empty$
  and and and and and
    { "all relevant fields are empty in " cite$ * warning$ }
    'skip$
  if$
}

FUNCTION {format.thesis.type}
{ type empty$
    'skip$
    { pop$
      type "t" change.case$
    }
  if$
}

FUNCTION {format.tr.number}
{ type empty$
    { bbl.techrep }
    'type
  if$
  number empty$
    { "t" change.case$ }
    { number tie.or.space.connect }
  if$
}

FUNCTION {format.article.crossref}
{ key empty$
    { journal empty$
	{ "need key or journal for " cite$ * " to crossref " * crossref *
	  warning$
	  ""
	}
	{ bbl.in "{\em " * journal * "\/}" * }
      if$
    }
    { bbl.in key * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.crossref.editor}
{ editor #1 "{vv~}{ll}" format.name$
  editor num.names$ duplicate$  #2 >
    { pop$ bbl.etal * }
    { #2 < 'skip$
	    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
	      { bbl.etal * }
	      { bbl.and * editor #2 "{vv~}{ll}" format.name$ * }
	    if$
	    }			
    if$
    }
  if$
}

FUNCTION {format.book.crossref}
{ volume empty$
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
      bbl.in
    }
    { bbl.volume volume tie.or.space.connect
      bbl.of *
    }
  if$
  editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ series empty$
	    { "need editor, key, or series for " cite$ * " to crossref " *
	      crossref * warning$
	      "" *
	    }
	    { "{\em " * series * "\/}" * }
	  if$
	}
	{ key * }
      if$
    }
    { format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
  editor field.or.null author field.or.null =
  or
    { key empty$
	{ booktitle empty$
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
	      crossref * warning$
	      ""
	    }
	    { bbl.in " {\em " * booktitle * "\/}" * }
	  if$
	}
	{ bbl.in key * }
      if$
    }
    { bbl.in format.crossref.editor * }
  if$
  " \cite{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { journal emphasize "journal" output.check
      format.vol.num.pages output
      format.date "year" output.check
    }
    { format.article.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {book}
{ output.bibitem
  fa.isPersianLanguage
  {
	format.authors  output
    new.block
    format.btitle "title" output.check
	new.block
    format.translators output
	format.editors  output
  }
  { author empty$
      { format.editors "author and editor" output.check }
      { format.authors output.nonnull
        crossref missing$
	      { "author and editor" editor either.or.check }
	      'skip$
        if$
      }
    if$
    new.block
    format.btitle "title" output.check
  }  
  if$
  crossref missing$
    { format.bvolume output
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {booklet}
{ output.bibitem
  format.authors output
  new.block
  format.title "title" output.check
  howpublished address new.block.checkb
  howpublished output
  address output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {inbook}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check }
    { format.authors output.nonnull
      crossref missing$
	{ "author and editor" editor either.or.check }
	'skip$
      if$
    }
  if$
  new.block
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.chapter.pages "chapter and pages" output.check
      new.block
      format.number.series output
      new.sentence
      publisher "publisher" output.check
      address output
    }
    { format.chapter.pages "chapter and pages" output.check
      new.block
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {incollection}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.chapter.pages output
      new.sentence
      publisher "publisher" output.check
      address output
      format.edition output
      format.date "year" output.check
    }
    { format.incoll.inproc.crossref output.nonnull
      format.chapter.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  crossref missing$
    { format.in.ed.booktitle "booktitle" output.check
      format.bvolume output
      format.number.series output
      format.pages output
      address empty$
	{ organization publisher new.sentence.checkb
	  organization output
	  publisher output
	  format.date "year" output.check
	}
	{ address output.nonnull
	  format.date "year" output.check
	  new.sentence
	  organization output
	  publisher output
	}
      if$
    }
    { format.incoll.inproc.crossref output.nonnull
      format.pages output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
  author empty$
    { organization empty$
	'skip$
	{ organization output.nonnull
	  address output
	}
      if$
    }
    { format.authors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  author empty$
    { organization empty$
	{ address new.block.checka
	  address output
	}
	'skip$
      if$
    }
    { organization address new.block.checkb
      organization output
      address output
    }
  if$
  format.edition output
  format.date output
  new.block
  note output
  fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  bbl.mthesis  
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {misc}
{ output.bibitem
  format.authors output
  title howpublished new.block.checkb
  format.title output
  howpublished new.block.checka
  howpublished output
  format.date output
  new.block
  note output
  fin.entry
  empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.btitle "title" output.check
  new.block
  bbl.phdthesis
  format.thesis.type output.nonnull
  school "school" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
  editor empty$
    { organization output }
    { format.editors output.nonnull }
  if$
  new.block
  format.btitle "title" output.check
  format.bvolume output
  format.number.series output
  address empty$
    { editor empty$
	{ publisher new.sentence.checka }
	{ organization publisher new.sentence.checkb
	  organization output
	}
      if$
      publisher output
      format.date "year" output.check
    }
    { address output.nonnull
      format.date "year" output.check
      new.sentence
      editor empty$
	'skip$
	{ organization output }
      if$
      publisher output
    }
  if$
  new.block
  note output
  fin.entry
}

FUNCTION {techreport}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  format.tr.number output.nonnull
  institution "institution" output.check
  address output
  format.date "year" output.check
  new.block
  note output
  fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  new.block
  note "note" output.check
  format.date output
  fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"January"}

MACRO {feb} {"February"}

MACRO {mar} {"March"}

MACRO {apr} {"April"}

MACRO {may} {"May"}

MACRO {jun} {"June"}

MACRO {jul} {"July"}

MACRO {aug} {"August"}

MACRO {sep} {"September"}

MACRO {oct} {"October"}

MACRO {nov} {"November"}

MACRO {dec} {"December"}

MACRO {acmcs} {"ACM Computing Surveys"}

MACRO {acta} {"Acta Informatica"}

MACRO {cacm} {"Communications of the ACM"}

MACRO {ibmjrd} {"IBM Journal of Research and Development"}

MACRO {ibmsj} {"IBM Systems Journal"}

MACRO {ieeese} {"IEEE Transactions on Software Engineering"}

MACRO {ieeetc} {"IEEE Transactions on Computers"}

MACRO {ieeetcad}
 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}

MACRO {ipl} {"Information Processing Letters"}

MACRO {jacm} {"Journal of the ACM"}

MACRO {jcss} {"Journal of Computer and System Sciences"}

MACRO {scp} {"Science of Computer Programming"}

MACRO {sicomp} {"SIAM Journal on Computing"}

MACRO {tocs} {"ACM Transactions on Computer Systems"}

MACRO {tods} {"ACM Transactions on Database Systems"}

MACRO {tog} {"ACM Transactions on Graphics"}

MACRO {toms} {"ACM Transactions on Mathematical Software"}

MACRO {toois} {"ACM Transactions on Office Information Systems"}

MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}

MACRO {tcs} {"Theoretical Computer Science"}

READ

STRINGS { longest.label }

INTEGERS { number.label longest.label.width }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
  #1 'number.label :=
  #0 'longest.label.width :=
}

FUNCTION {longest.label.pass}
{ number.label int.to.str$ 'label :=
  number.label #1 + 'number.label :=
  label width$ longest.label.width >
    { label 'longest.label :=
      label width$ 'longest.label.width :=
    }
    'skip$
  if$
}

EXECUTE {banner.message}
EXECUTE {initialize.longest.label}

ITERATE {longest.label.pass}

FUNCTION {begin.bib}
{ 
  "% Generated by unsrt-fa.bst,  version: " bst.file.version * " (" * bst.file.date * "), for XePersian Package" *
  write$ newline$
  "% Authors: " bst.file.authors *
  write$ newline$
  "\providecommand{\noopsort}[1]{}"
  write$ newline$
  preamble$ empty$
    'skip$
    { preamble$ write$ newline$ }
  if$
  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
  "\end{thebibliography}" write$ newline$
  "\Persian" write$ newline$
}

EXECUTE {end.bib}
EXECUTE{completed.message}
%    \end{macrocode}
% \iffalse
%</unsrt-fa.bst>
% \fi
% \clearpage
% \PrintChanges
% \Finale
% 
% \iffalse
%<*parsidigits.map>
; Vafa Khalighi ... 
LHSName	"Digits"
RHSName	"ParsiDigits"

pass(Unicode)
U+0030 <> U+06F0 ;
U+0031 <> U+06F1 ;
U+0032 <> U+06F2 ;
U+0033 <> U+06F3 ;
U+0034 <> U+06F4 ;
U+0035 <> U+06F5 ;
U+0036 <> U+06F6 ;
U+0037 <> U+06F7 ;
U+0038 <> U+06F8 ;
U+0039 <> U+06F9 ;

U+0644 U+0651 U+064E U+0627 <> U+0644 U+0627 U+0651 U+064E ; lam shadda fatha alif -> lam alif shadda fatha 
U+0644 U+0651 U+0627 <> U+0644 U+0627 U+0651  ; lam shadda alif -> lam alif shadda
U+0644 U+0652 U+0622 <> U+0644 U+0622 U+0652  ; lam sukun alifmadda -> lam alifmadda sukun 
U+0644 U+0652 U+0623 <> U+0644 U+0623 U+0652  ; lam sukun alifhamzaabove -> lam alifhamzaabove sukun 
U+0644 U+0652 U+0625 <> U+0644 U+0625 U+0652  ; lam sukun alifhamzabelow -> lam alifhamzabelow sukun
U+0644 U+0651 U+064B U+0627 <> U+0644 U+0627 U+0651 U+064b ; lam shadda fathatan alif -> lam alif shadda fathatan
U+0644 U+064B U+0627 <> U+0644 U+0627 U+064B ; lam fathatan alif -> lam alif fathatan

U+002C <> U+060C ; comma ­> arabic comma
U+003F <> U+061F ; question mark -> arabic qm
U+003B <> U+061B ; semicolon -> arabic semicolon

; ligatures from Knuth's original CMR fonts
U+002D U+002D			<>	U+2013	; -- -> en dash
U+002D U+002D U+002D	<>	U+2014	; --- -> em dash

U+0027			<>	U+2019	; ' -> right single quote
U+0027 U+0027	<>	U+201D	; '' -> right double quote
U+0022			 >	U+201D	; " -> right double quote

U+0060			<>	U+2018	; ` -> left single quote
U+0060 U+0060	<>	U+201C	; `` -> left double quote

U+0021 U+0060	<>	U+00A1	; !` -> inverted exclam
U+003F U+0060	<>	U+00BF	; ?` -> inverted question

; additions supported in T1 encoding
U+002C U+002C	<>	U+201E	; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C	<>	U+00AB	; << -> LEFT POINTING GUILLEMET
U+003E U+003E	<>	U+00BB	; >> -> RIGHT POINTING GUILLEMET
%</parsidigits.map>
%<*txt2maths.map>
; Vafa Khalighi ... 
LHSName	"Digits"
RHSName	"txt2maths"

Pass(Unicode)
U+002E <> U+066B ; convert dot to Persian decimal separator
U+002D <> U+2212 ; convert hyphen to minus sign
U+0030 <> U+06F0 ;
U+0031 <> U+06F1 ;
U+0032 <> U+06F2 ;
U+0033 <> U+06F3 ;
U+0034 <> U+06F4 ;
U+0035 <> U+06F5 ;
U+0036 <> U+06F6 ;
U+0037 <> U+06F7 ;
U+0038 <> U+06F8 ;
U+0039 <> U+06F9 ;

U+0644 U+0651 U+064E U+0627 <> U+0644 U+0627 U+0651 U+064E ; lam shadda fatha alif -> lam alif shadda fatha 
U+0644 U+0651 U+0627 <> U+0644 U+0627 U+0651  ; lam shadda alif -> lam alif shadda
U+0644 U+0652 U+0622 <> U+0644 U+0622 U+0652  ; lam sukun alifmadda -> lam alifmadda sukun 
U+0644 U+0652 U+0623 <> U+0644 U+0623 U+0652  ; lam sukun alifhamzaabove -> lam alifhamzaabove sukun 
U+0644 U+0652 U+0625 <> U+0644 U+0625 U+0652  ; lam sukun alifhamzabelow -> lam alifhamzabelow sukun
U+0644 U+0651 U+064B U+0627 <> U+0644 U+0627 U+0651 U+064b ; lam shadda fathatan alif -> lam alif shadda fathatan
U+0644 U+064B U+0627 <> U+0644 U+0627 U+064B ; lam fathatan alif -> lam alif fathatan

U+002C <> U+060C ; comma ­> arabic comma
U+003F <> U+061F ; question mark -> arabic qm
U+003B <> U+061B ; semicolon -> arabic semicolon

; ligatures from Knuth's original CMR fonts
U+002D U+002D			<>	U+2013	; -- -> en dash
U+002D U+002D U+002D	<>	U+2014	; --- -> em dash

U+0027			<>	U+2019	; ' -> right single quote
U+0027 U+0027	<>	U+201D	; '' -> right double quote
U+0022			 >	U+201D	; " -> right double quote

U+0060			<>	U+2018	; ` -> left single quote
U+0060 U+0060	<>	U+201C	; `` -> left double quote

U+0021 U+0060	<>	U+00A1	; !` -> inverted exclam
U+003F U+0060	<>	U+00BF	; ?` -> inverted question

; additions supported in T1 encoding
U+002C U+002C	<>	U+201E	; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C	<>	U+00AB	; << -> LEFT POINTING GUILLEMET
U+003E U+003E	<>	U+00BB	; >> -> RIGHT POINTING GUILLEMET
%</txt2maths.map>
%<*thesis-sample.tex>
\documentclass[a4paper,11pt]{xepersian-thesis}
\usepackage{graphicx}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Linux Libertine}
\setdigitfont[Scale=1]{XB Zar}




\begin{document}
\title{اعداد مرکب}
\author{وفا خلیقی}
\degree{کارشناسی ریاضیات محض}
\supervisor{محمد قدسی}
\department{ریاضی}
\university{تهران}
\city{تهران}
\thesisdate{\today}
\maketitle
\begin{acknowledgementpage}
در اینجا دوست دارم از همه تشکر کنم
\end{acknowledgementpage}
\begin{abstractpage}
اینجا هم باید مطلبی نوشت...
\keywords{ریاضی محض، هندسه و توپولوژی}
\end{abstractpage}
\tableofcontents
\listoftables
\chapter{مجموعه اعداد}
در اینجا لازم می‌دانم تا نگاهی روی مجموعهٔ اعداد اندازیم تا متوجه خصلت‌های آن شویم
\begin{equation}
(a+b)^2=a^2+2ab+b^3
\end{equation}
\newpage
این صفحهٔ جدید است که ما در این صفحه به نوشتن مقالات دیگری مشغول هستیم.
\section{مقدمه}

\newpage
این هم یک صفحهٔ جدید دیگر
\chapter{دوم}
\chapter{سوم}
\appendix
\chapter{اول}
\chapter{دوم}
\chapter{سوم}
\bibliographystyle{unsrt}
\begin{thebibliography}{99}
\end{thebibliography}
%\printindex
\begin{latin}
\latintitle{Pure Mathematics}
\latinauthor{Vafa Khalighi}
\latindegree{Bachelor of Pure Mathematics}
\latinthesisdate{\latintoday}
\latinsupervisor{Mohammad Ghodsi}
\latindepartment{Computer Science}
\latinuniversity{Iran University of Science \& Technology}
\latincity{Tehran}
\begin{latinabstract}
\noindent This is our abstract written in English and This thesis is written very very very carefully so that we can keep  an eye on the beauty of typesetting.
\latinkeywords{Mathematics, topology, geometry and category theory.}
\end{latinabstract}
\makelatintitle
\end{latin}
\end{document}
%</thesis-sample.tex>
%<*magazine-sample.tex>
\documentclass[12pt,twoside]{xepersian-magazine}
\usepackage{graphicx}
\usepackage{xepersian}
\usepackage{xunicode}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Junicode}
\setdigitfont{XB Zar}
\pagestyle{fancy}
\title{مجلهٔ زی‌پرشین}
\author{وفا خلیقی}
\edition{جلد اول}
\customlogo{مجلهٔ زی‌پرشین}
\customminilogo{مجلهٔ زی‌پرشین}
\custommagazinename{مجلهٔ زی‌پرشین}
\customwwwTxt{http://developer.berlios.de/projects/xepersian}
\begin{document}
\begin{frontpage}
\firstimage{img/ireland.jpg}{این زیرنویس تصویر اصلی در صفحهٔ اول است.}
\firstarticle{این تیتر مقالهٔ اول است.}
						{خوب این قسمت کوچکی از مقالهٔ اول است که ما در حال نوشتن آن هستم. باید یک مقدار بنویسیم تا مقداری این قسمت پر شود تا بتوانیم چیز قشنگی داشته باشیم. دقت کنیم که بصورت انتخابی حتی می‌توانیم زمان را هم درج کنیم که در سمت راست قرار می‌گیرد.}%
						{۱۲:۳۴}
\secondarticle{این هم سر تیتر مقالهٔ دوم است.}%
						{این هم زیر تیتر مقالهٔ دوم است که آن را در اینجا می‌نویسیم.}%
						{خوب این قسمت کوچکی از مقالهٔ اول است که ما در حال نوشتن آن هستم. باید یک مقدار بنویسیم تا مقداری این قسمت پر شود تا بتوانیم چیز قشنگی داشته باشیم. دقت کنیم که بصورت انتخابی حتی می‌توانیم زمان را هم درج کنیم که در سمت راست قرار می‌گیرد.}%
						{قسمت الف}%
						{۱۰:۲۳}

\thirdarticle{این سرتیتر مقالهٔ سوم است.}%
					{این هم زیرتیتر مقالهٔ سوم است که ما آن را در اینجا قرار می‌دهیم.}%
					{خوب این قسمت کوچکی از مقالهٔ اول است که ما در حال نوشتن آن هستم. باید یک مقدار بنویسیم تا مقداری این قسمت پر شود تا بتوانیم چیز قشنگی داشته باشیم. دقت کنیم که بصورت انتخابی حتی می‌توانیم زمان را هم درج کنیم که در سمت راست قرار می‌گیرد. و همانطور که می‌بینید من مطلبی برای گفتن ندارم فقط متن علکی می‌نویسم تا کمی صفحه را پر کرده باشم. اما در قسمتهای بعدی مقداری از سهراب سپهری خواهم نوشت.}%
					
					{قسمت ب}%
					{۱۰:۰۲}

\begin{indexblock}{نمایه (فهرست مطالب) اصلی}
\indexitem{۱- مقاله اول}{1}

\indexitem{۲- مقاله دوم}{3}

\indexitem{۳- مقاله سوم}{3}

\indexitem{۴- مقاله چهارم}{5}
\end{indexblock}

\begin{weatherblock}{وضع آب و هوا}
\weatheritem{img/weather/rain.jpg}{امروز}{13}{9}{}
\weatheritem{img/weather/sun.jpg}{فردا}{15}{1}{}
\weatheritem{img/weather/clouds.jpg}{جمعه}{12}{6}{}
\end{weatherblock}


\begin{authorblock}
\textbf{ویرایشگران}

وفا خلیقی، مهدی امیدعلی و مصطفی واحدی

\texttt{vafa@users.berlios.de\\[5pt]
http://developer.berlios.de/projects/xepersian}\\
\end{authorblock}
\end{frontpage}
\newsection{قسمت الف}
\begin{article}{2}
	{این تیتر این مقاله است.}
	{این هم زیرتیتر این مقاله هست.}
	{قسمت الف}
	{1}
\authorandplace{نام نویسنده}{مکان}



		
\noindent\timestamp{۸:۲۵}
ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.
\footnote{این یک زیرنویس فارسی است.}\LTRfootnote{This is an English footnote.}
\begin{equation}
(a+b)^3=a^3+3a^2b+3ab^2+b^3\label{eq-1}
\end{equation}
این معادلهٔ \eqref{eq-1} است.
\columntitle{lines}{این را برای مهم یا نشان دادن حرفی مهم در این مجله انجام می‌دهیم.}

ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.
\end{article}

\articlesep

\begin{article}{2}
	{این تیتر این مقاله است.}
	{این هم زیرتیتر این مقاله هست.}
	{قسمت الف}
	{1}
\authorandplace{نام نویسنده}{مکان}

\noindent\timestamp{08:25}
ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.
\LTRfootnote{This is an English footnote.}\footnote{این یک زیرنویس فارسی است.}
اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  

ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  

\expandedtitle{doublebox}{این هم مطلی است مهم یا چیزی که از خلاصهٔ این مقاله ما متوجه شده‌ایم و این برای ما و خوانندگان خیلی مهم است.}

ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  
\end{article}

\articlesep

\newsection{قسمت ب}


\begin{article}{2}
	{این یک تیتر کوتاه است.وفا خلیقی}
	{این هم مثل همیشه زیرتیتر است که ما آن را در اینجا قرار می‌دهیم.}
	{قسمت ب}
	{3}

\authorandplace{نام نویسنده}{مکان}



\noindent\timestamp{08:25}  et ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  

ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  

\expandedtitle{lines}{این هم دوباره مطلب مهمی است که ما آن را از لابلای این مقاله برای خواننده درست کرده‌ایم.}

ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.  
\end{article}

\articlesep


\begin{editorial}{1}{این یک مثال از مقاله‌ای از طرف ویرایشگر است.}{نام و نام خانوادگی}{4}
يژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.

اما معماری همتابه‌همتا ويژگی‌های ديگری نيز دارد که آن را هم برای فراهم‌کنندگان کاربردها و هم برای استفاده‌کنندگان جذاب‌تر می‌کند.  از آن‌جا که شبکه‌های همتابه‌همتا از همان زيرساخت‌های اينترنت استفاده می‌کنند ونيازی به راه‌اندازی سرورها ندارند، ساخت اين شبكه‌ها بسيار ارزان‌تر از ايجاد زير ساخت‌های لازم برای راه‌اندازی شبكه‌های مشتری/خدمت‌گزار است.  هم‌چنين با زياد شدن تعداد کاربران چون درعمل تعداد گره‌های ارائه کننده‌ی خدمات هم بالا می‌رود، نه تنها عملكرد شبكه افت پيدا نمی‌كند بلكه انتظار بهبود عملکرد نيز می‌رود. گذشته از اين موارد، مالكيت اين شبكه‌ها به صورت اشتراكی بين تمام کاربران پخش شده و هيچ شخص يا شركتی نمی‌تواند سياست‌های دلخواه خود را در اين نوع شبكه‌ها اعمال کند.

اماهيچ چيزی بی‌ بها به دست نمی‌آید. نبود سرور مرکزی اگر چه  ويژگی‌های جذابی به شبکه‌های همتابه‌همتا می‌بخشد اما از طرف ديگر آن‌ها را با دشواری‌هايی نيز روبه‌رو می‌کند.  عدم وجود يك هماهنگ كننده مركزی در شبكه، انجام بسياری از امور و ارائه خدمات را  دچار مشكل می‌کند.  از يک طرف، تغيير و رفت‌وآمد زیاد کاربران از ويژگی‌های ذاتی اين شبکه‌ها است و از طرف ديگر در اين شبكه‌ها، ديگر اين گره‌های معمولی  هستند كه  عهده‌دار تمامی وظايف هستند. به همين دلیل يکی از مشکلات اصلی فراروی اين شبكه‌ها، مقابله با  تغييرات لحظه‌ای و فراهم آوردن ثبات در ارائه  خدمات در بستری از بی‌ثباتی است.
\end{editorial}

\articlesep


\begin{shortarticle}{4}{محیط مقالهٔ کوتاه}{محیط مقالهٔ کوتاه داخل مجلهٔ زی‌پرشین}{5}
\shortarticleitem{این یک تیتر کوتاه است}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\shortarticleitem{یک تیتر کوتاه دیگر}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\shortarticleitem{یک تیتر کوتاه دیگر}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\shortarticleitem{یک تیتر کوتاه دیگر}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\shortarticleitem{یک تیتر کوتاه دیگر}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\shortarticleitem{یک تیتر کوتاه دیگر}{ويژگی اصلی که اين معماری را متمايز کرده و در دنيای اينترنت آن‌ها در مقابل معماری قبلی شبكه‌ها قرار داده است، امكان ايجاد ارتباط مستقيم  بين كامپيوترهای مختلف بدون نياز به دخالت سرورهای قدرتمند در بين راه است.  نام‌ اين نوع معماری هم در واقع بر گرفته شده از همین  ارتباط مستقیم بين گره‌ها است.  در واقع در اين نوع شبكه‌ها اثری از سرورها نيست و تمامی گره‌های معمولی موجود در شبكه، بايد وظايفی را که قبلا بر عهده‌ی سرورها بود، خود انجام دهند. بنابراين در اين نوع معماری گره‌های معمولی در ضمن اين‌که از خدمات شبکه بهره‌مند می‌شود بايد نقش خدمت‌گزار را هم ايفا کنند . در اين نوع شبکه‌ها گره‌های معمولی به كمك روش‌ها و پروتكل‌های توزيع شده، تمامی وظايف  مسير يابی در شبكه، جستجوی منابع، امنيت شبكه و شناسايی هويت استفاده كننده‌ها و هم‌چنين مقابله با حملات احتمالی مهاجمان را بر عهده دارند.}
\end{shortarticle}

\articlesep

\end{document}
%</magazine-sample.tex>
%<*test-correction.tex>
\documentclass{article}
\usepackage[correction]{xepersian-multiplechoice}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Linux Libertine}
\setdigitfont[Scale=1]{Parsi Digits}
\begin{document}
\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\false $\{(3,2),(3,3)\} $
\true $\{(2,2),(2,3)\} $
\false $\{(2,3),(3,3)\} $
\false $\{(2,2),(3,2)\} $
\end{question}

\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\true $x$
\false $y$
\false $z$
\false $t$
\end{question}

\begin{question}{مجموعه‎ $(B-A^{'})^{'}$ ‎برابر است با:}
\false $B^{'}\bigcap A$
\false $B'\bigcup A' $
\true $A$
\false هیچکدام.
\end{question}

\begin{question}{صورت متعارفی عدد مختلط ‎$\frac{7+i}{1-i}$‎ کدام است.}
\false $4+4i$
\false $4-3i$
\false $3+4i$
\true $3-3i$
\end{question}
\begin{correction}
جواب درست یکی از اینها است.
\end{correction}


\end{document}
%</test-correction.tex>
%<*test-empty-form.tex>
\documentclass{article}
\usepackage{xepersian-multiplechoice}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Linux Libertine}
\setdigitfont[Scale=1]{Parsi Digits}
\begin{document}
\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\false $\{(3,2),(3,3)\} $
\true $\{(2,2),(2,3)\} $
\false $\{(2,3),(3,3)\} $
\false $\{(2,2),(3,2)\} $
\end{question}

\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\true $x$
\false $y$
\false $z$
\false $t$
\end{question}

\begin{question}{مجموعه‎ $(B-A^{'})^{'}$ ‎برابر است با:}
\false $B^{'}\bigcap A$
\false $B'\bigcup A' $
\true $A$
\false هیچکدام.
\end{question}

\begin{question}{صورت متعارفی عدد مختلط ‎$\frac{7+i}{1-i}$‎ کدام است.}
\false $4+4i$
\false $4-3i$
\false $3+4i$
\true $3-3i$
\end{question}
\begin{correction}
جواب درست یکی از اینها است.
\end{correction}
\bigskip 

\begin{center}
\makeform
\end{center}
\end{document}
%</test-empty-form.tex>
%<*test-question-only.tex>
\documentclass{article}
\usepackage{xepersian-multiplechoice}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Linux Libertine}
\setdigitfont[Scale=1]{Parsi Digits}
\begin{document}
\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\false $\{(3,2),(3,3)\} $
\true $\{(2,2),(2,3)\} $
\false $\{(2,3),(3,3)\} $
\false $\{(2,2),(3,2)\} $
\end{question}

\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\true $x$
\false $y$
\false $z$
\false $t$
\end{question}

\begin{question}{مجموعه‎ $(B-A^{'})^{'}$ ‎برابر است با:}
\false $B^{'}\bigcap A$
\false $B'\bigcup A' $
\true $A$
\false هیچکدام.
\end{question}

\begin{question}{صورت متعارفی عدد مختلط ‎$\frac{7+i}{1-i}$‎ کدام است.}
\false $4+4i$
\false $4-3i$
\false $3+4i$
\true $3-3i$
\end{question}
\begin{correction}
جواب درست یکی از اینها است.
\end{correction}


\end{document}
%</test-question-only.tex>
%<*test-solution-form.tex>
\documentclass{article}
\usepackage{xepersian-multiplechoice}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=1]{Linux Libertine}
\setdigitfont[Scale=1]{Parsi Digits}
\begin{document}
\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\false $\{(3,2),(3,3)\} $
\true $\{(2,2),(2,3)\} $
\false $\{(2,3),(3,3)\} $
\false $\{(2,2),(3,2)\} $
\end{question}

\begin{question}{اگر ‎$A=\{ 1,2\} $‎ و ‎$B=\{ 2,3\} $‎ آنگاه حاصل $B^2-A\times B$ کدام است.}
\true $x$
\false $y$
\false $z$
\false $t$
\end{question}

\begin{question}{مجموعه‎ $(B-A^{'})^{'}$ ‎برابر است با:}
\false $B^{'}\bigcap A$
\false $B'\bigcup A' $
\true $A$
\false هیچکدام.
\end{question}

\begin{question}{صورت متعارفی عدد مختلط ‎$\frac{7+i}{1-i}$‎ کدام است.}
\false $4+4i$
\false $4-3i$
\false $3+4i$
\true $3-3i$
\end{question}
\begin{correction}
جواب درست یکی از اینها است.
\end{correction}

\bigskip
\begin{center}
\makemask
\end{center}
\end{document}
%</test-solution-form.tex>
%<*acm-fa-output.tex>
\documentclass[11pt,a4paper]{article} 


\usepackage{verbatim}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}%{XB Zar}
\setlatintextfont[Scale=.95]{Linux Libertine}%{Arial}%
\setdigitfont{Parsi Digits}

\title{نمونه خروجی با سبک فارسی \lr{acm-fa} در زی‌پرشین}
\author{}\date{}
\begin{document}
\maketitle
\nocite{*}
\bibliographystyle{acm-fa}%{ieeetr-fa}%{persia}%
\bibliography{MyReferences}


\end{document}
%</acm-fa-output.tex>
%<*bibtex-example.tex>
\documentclass[11pt,a4paper]{article} 
% محمود امین‌طوسی، http://webpages.iust.ac.ir/mamintoosi
% فایل حاضر مثالی برای استفاده از سبک‌های فارسی در زی‌پرشین می‌باشد.
% توجه نمایید که برای استفاده از این مثال باید به صورت زیر عمل نمایید:
% xelatex filename  (در نوت‌پد++ F6 یا Ctrl+F6) - با توجه به راهنمای زی‌پرشین
% bibtex  filename  (تایپ دستور در خط فرمان نوت‌پد++)
% xelatex filename  (در نوت‌پد++ F6)
% xelatex filename  (در نوت‌پد++ F6 یا Ctrl+F6)
% در این مثال به جای filename باید bibtex_example قرار دهید.
% برای ویرایش مدخل‌ها فایل MyReferences.bib را باز کنید. در صورت تغییر این فایل بایستی دو مرحله‌ی میانی را پس از ذخیره‌ی آن اجرا نمایید.
% در صورت تغییر در ارجاعات در این فایل باید هر چهار مرحله انجام شوند.

% به جای unsrt می‌توانید سایر سبک‌ها را قرار داده و نتیجه را مشاهده نمایید. (plain-fa, acm-fa, ieeetr-fa, persia)

\usepackage{verbatim}
\usepackage{backref}
\def\backrefpagesname{}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}
\setlatintextfont[Scale=.95]{Linux Libertine}%{Times New latin}
\setdigitfont{Parsi Digits}

\title{نمونه خروجی با استیل فارسی \lr{unsrt-fa} برای \lr{BibTeX} در زی‌پرشین}
\author{}\date{}
\begin{document}
\maketitle

مرجع \cite{امیدعلی82دکترا} یک نمونه پروژه دکترا و مرجع\cite{واحدی87} یک نمونه مقاله مجله فارسی است.
مرجع \cite{Baker02limits} یک نمونه مقاله انگلیسی است که در بین مراجع فارسی قرار گرفته است، مرجع \cite{Amintoosi87using}  یک نمونه  مقاله کنفرانس فارسی و
مرجع \cite{استالینگ۸۰کتاب} یک نمونه کتاب فارسی با ذکر مترجمان و ویراستاران فارسی است. مرجع \cite{Khalighi07MscThesis} یک نمونه پروژه کارشناسی ارشد انگلیسی و
\cite{خلیقی۸۷زی‌پرشین} هم یک نمونه متفرقه  می‌باشند.

%\nocite{*}
{\small
\bibliographystyle{unsrt-fa}%{plain-fa}%{ieeetr-fa}%{persia}%
\bibliography{MyReferences}
}

\end{document}
%</bibtex-example.tex>
%<*ieeetr-fa-output.tex>
\documentclass[11pt,a4paper]{article} 
% محمود امین‌طوسی، http://webpages.iust.ac.ir/mamintoosi

\usepackage{verbatim}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}%{XB Zar}
\setlatintextfont[Scale=.95]{Linux Libertine}%{Arial}%
\setdigitfont{Parsi Digits}

\title{نمونه خروجی با سبک فارسی \lr{ieeetr-fa} در زی‌پرشین}
\author{}\date{}
\begin{document}
\maketitle

\nocite{*}

\bibliographystyle{ieeetr-fa}%{persia}%
\bibliography{MyReferences}


\end{document}
%</ieeetr-fa-output.tex>
%<*MyReferences.bib>
﻿@article{Baker02limits,
 author = {Baker,, Simon and Kanade,, Takeo},
 title = {Limits on Super-Resolution and How to Break Them},
 journal = {IEEE Trans. Pattern Anal. Mach. Intell.},
 volume = {24},
 number = {9},
 year = {2002},
 issn = {0162-8828},
 pages = {1167--1183},
 publisher = {IEEE Computer Society},
 address = {Washington, DC, USA}
 }

@CONFERENCE{Amintoosi87using,
  AUTHOR =       {\noopsort{امین‌طوسی,محمود}{امین‌طوسی,محمود} and others},
  TITLE =        {استفاده از تجزیه ماتریس در وضوح برتر},
  BOOKTITLE =    {پنجمین کنفرانس بینائی ماشین},
  YEAR =         {1387},
  ORGANIZATION = {دانشگاه تبریز},
  ADDRESS =      {تبریز، ایران},
  PAGES = 		 {172-178},
  LANGUAGE =     {Persian}
}

@MASTERSTHESIS{پورموسی۸۸ارشد,
  AUTHOR =       {\noopsort{بپورموسی, امیرمسعود}{پورموسی, امیرمسعود}},
  TITLE =        {یک موضوع فیزیک},
  SCHOOL =       {دانشکده فیزیک، دانشگاه صنعتی‌شریف},
  YEAR =         {۱۳۸۸},
  MONTH =        {مرداد},
  NOTE = 		 {(در حال انجام)},
  LANGUAGE =     {Persian}
}

@MASTERSTHESIS{Khalighi07MscThesis,
  AUTHOR =       {Vafa Khalighi},
  TITLE =        {Category Theory},
  SCHOOL =       {Sydny Univ.},
  YEAR =         {2007},
  MONTH =        {April}
}

@PHDTHESIS{امیدعلی82دکترا,
  AUTHOR =       {\noopsort{امیدعلی, مهدی}{امیدعلی, مهدی}},
  TITLE =        {تابع هیلبرت},
  SCHOOL =       {دانشکده ریاضی، دانشگاه امیرکبیر},
  YEAR =         {1382},
  MONTH =        {تیر},
  LANGUAGE =     {Persian}
}

@MISC{خلیقی۸۷زی‌پرشین,
  AUTHOR =       {\noopsort{خلیقی,وفا}{خلیقی,وفا}  and امیدعلی, مهدی and  واحدی,مصطفی.},
  TITLE =        {زی‌پرشین (\lr{\XePersian}): بسته فارسی برای حروف‌چینی در \lr{\LaTeX2e}},
  HOWPUBLISHED =    {\lr{http://developer.berlios.de/projects/xepersian}},
  YEAR =         {۱۳۸۷},  
  LANGUAGE =     {Persian}
  }

@BOOK{استالینگ۸۰کتاب,
  AUTHOR =       {\noopsort{استالینگ, ویلیام}{استالینگ, ویلیام}},
  EDITOR =       {برنجکوب, محمود},
  translator =   { صدیقی‌ مشکنانی, محسن and پدرام,حسین },
  TITLE =        {اصول طراحی و ویژگیهای داخلی سیستم‌های عامل},
  PUBLISHER =    {نشر شیخ بهایی},
  YEAR =         {۱۳۸۰},
  ADDRESS =      {اصفهان},
  edition =      {سوم},
  MONTH =        {بهار},
  LANGUAGE =     {Persian}
}
  
@ARTICLE{واحدی87,
  AUTHOR = 		{\noopsort{واحدی, مصطفی}{واحدی, مصطفی}},
  TITLE = 		{موضوعی جدید در هندسه محاسباتی},
  JOURNAL = 	{مجله فارسی نمونه},
  VOLUME = 		{1},
  YEAR = 		{1387},
  NUMBER = 		{2},
  MONTH = 		{آبان},
  PAGES = 		{22-30},
  LANGUAGE =  	{Persian}
}

@CONFERENCE{Amintoosi09regional,
  author =       {Mahmood Amintoosi and Mahmood Fathy and Nasser Mozayani},
  title =        {Regional Varying Image Super-Resolution},
  booktitle =    {(CSO 2009) The 2009 IEEE International Joint Conference on Computational Sciences and Optimization},
  year =         {2009},
  month =        {24-26 April},
  organization = {City University},
  address =      {Sanya, Hainan, China},
  pages =        {101-105}
}

@PHDTHESIS{Farsiu05thesis,
  AUTHOR =       {Sina Farsiu},
  TITLE =        {A Fast and Robust Framework for Image Fusion and Enhancement},
  SCHOOL =       {Electrical Engineeting},
  YEAR =         {2005},
  ADDRESS =      {UC Santa Cruz},
  MONTH =        {December}
}


@BOOK{Gonzalez02book,
  AUTHOR =      {Gonzalez,, Rafael C. and Woods,, Richard E.},
  TITLE =       {Digital Image Processing},
  PUBLISHER =   {Prentice-Hall, Inc.},
  YEAR =        {2006},
  ISBN = 		{013168728X},
  EDITION = 	{3rd},
  ADDRESS = {Upper Saddle River, NJ, USA},
}
%</MyReferences.bib>
%<*plain-fa-output.tex>
\documentclass[11pt,a4paper]{article} 
% محمود امین‌طوسی، http://webpages.iust.ac.ir/mamintoosi

\usepackage{verbatim}
\usepackage{xepersian}
\settextfont[Scale=1]{XB Zar}%{XB Zar}
\setlatintextfont[Scale=.95]{Linux Libertine}%{Arial}%
\setdigitfont{XB Zar}

\title{نمونه خروجی با سبک فارسی \lr{plain-fa} در زی‌پرشین}
\author{}\date{}
\begin{document}
\maketitle

\nocite{*}

\bibliographystyle{plain-fa}%{ieeetr-fa}%{persia}%
\bibliography{MyReferences1}


\end{document}
%</plain-fa-output.tex>
% \fi
% 
% \typeout{*************************************************************}
% \typeout{*}
% \typeout{* To finish the installation you have to move the following}
% \typeout{* file into a directory searched by TeX:}
% \typeout{*}
% \typeout{* \space\space\space all *.cls, *.sty and *.def  files}
% \typeout{* You also need to compile the *.map files with teckit_compile}
% \typeout{* and place the resulting *.tec files under}
% \typeout{* .../fonts/misc/xetex/fontmapping/xepersian}
% \typeout{*}
% \typeout{*************************************************************}
\endinput
