summaryrefslogtreecommitdiff
path: root/biblio/bibtex/contrib/persian-bib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /biblio/bibtex/contrib/persian-bib
Initial commit
Diffstat (limited to 'biblio/bibtex/contrib/persian-bib')
-rw-r--r--biblio/bibtex/contrib/persian-bib/MyReferences.bib147
-rw-r--r--biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.pdfbin0 -> 174160 bytes
-rw-r--r--biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.tex370
-rw-r--r--biblio/bibtex/contrib/persian-bib/README58
-rw-r--r--biblio/bibtex/contrib/persian-bib/acm-fa.bst1435
-rw-r--r--biblio/bibtex/contrib/persian-bib/asa-fa.bst1774
-rw-r--r--biblio/bibtex/contrib/persian-bib/bibtex-example.tex30
-rw-r--r--biblio/bibtex/contrib/persian-bib/chicago-fa.bst2223
-rw-r--r--biblio/bibtex/contrib/persian-bib/cp1256fa.csf262
-rw-r--r--biblio/bibtex/contrib/persian-bib/gen_pdf.pl55
-rw-r--r--biblio/bibtex/contrib/persian-bib/ieeetr-fa.bst1257
-rw-r--r--biblio/bibtex/contrib/persian-bib/plain-fa-inLTR-beamer.bst1404
-rw-r--r--biblio/bibtex/contrib/persian-bib/plain-fa-inLTR.bst1401
-rw-r--r--biblio/bibtex/contrib/persian-bib/plain-fa.bst1390
-rw-r--r--biblio/bibtex/contrib/persian-bib/plainnat-fa.bst1917
-rw-r--r--biblio/bibtex/contrib/persian-bib/unsrt-fa.bst1225
16 files changed, 14948 insertions, 0 deletions
diff --git a/biblio/bibtex/contrib/persian-bib/MyReferences.bib b/biblio/bibtex/contrib/persian-bib/MyReferences.bib
new file mode 100644
index 0000000000..08dd679392
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/MyReferences.bib
@@ -0,0 +1,147 @@
+@ARTICLE{Vahedi87,
+ AUTHOR = {واحدی, مصطفی},
+ TITLE = {درختان پوشای کمینه دورنگی مسطح},
+ JOURNAL = {مجله فارسی نمونه},
+ VOLUME = {1},
+ YEAR = {1387},
+ NUMBER = {2},
+ MONTH = {آبان},
+ PAGES = {22-30},
+ LANGUAGE = {Persian}
+}
+
+@CONFERENCE{Amintoosi09regional,
+ author = {M. Amintoosi and M. Fathy and N. Mozayani},
+ authorfa = {م. امین‌طوسی and م. فتحی and م.مزینی},
+ title = {Regional Varying Image Super-Resolution},
+ booktitle = {IEEE International Joint Conference on Computational Sciences and Optimization},
+ year = {2009},
+ month = {April 23-26},
+ address = {Sanya, China},
+ volume = {1},
+ pages = {913-917}
+}
+
+@CONFERENCE{Amintoosi09video,
+ author = {M. Amintoosi and M. Fathy },
+ authorfa = {م. امین‌طوسی and م. فتحی },
+ title = {Video Resolution Enhancement in the Presence of Moving Objects},
+ booktitle = {International Conference on Image Processing, Computer Vision, and Pattern Recognition},
+ year = {2009},
+ address = {Las Vegas, USA},
+ month = {July}
+}
+
+@ARTICLE{Amintoosi09precise,
+ AUTHOR = {M. Amintoosi and M. Fathy and N. Mozayani},
+ authorfa = {م. امین‌طوسی and م. فتحی and م.مزینی},
+ TITLE = {Precise Image Registration with Structural Similarity Error Measurement Applied to Super-Resolution},
+ JOURNAL = {{EURASIP} {J}ournal on {A}dvances in {S}ignal {P}rocessing},
+ Volume = {2009},
+ YEAR = {2009},
+ pages = {7 pages},
+ note = {{A}rticle ID 305479},
+ url = {http://www.hindawi.com/journals/asp/2009/305479.html}
+}
+
+@CONFERENCE{Amintoosi87afzayesh,
+ AUTHOR = {امین‌طوسی,محمود and مزینی,ناصر and فتحی,محمود},
+ TITLE = {افزایش وضوح ناحیه‌ای},
+ BOOKTITLE = {چهاردهمین کنفرانس ملی سالانه انجمن کامپیوتر ایران},
+ YEAR = {1387},
+ ORGANIZATION = {دانشگاه امیرکبیر},
+ ADDRESS = {تهران، ایران},
+ month = {اسفند},
+ pages = {101--108},
+ LANGUAGE = {Persian}
+}
+
+@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}
+ }
+
+@BOOK{Gonzalez02book,
+ AUTHOR = {Gonzalez,, Rafael C. and Woods,, Richard E.},
+ authorfa = {ر. گنزالس and ر. وودس },
+ TITLE = {Digital Image Processing},
+ PUBLISHER = {Prentice-Hall, Inc.},
+ YEAR = {2006},
+ ISBN = {013168728X},
+ EDITION = {3rd},
+ ADDRESS = {Upper Saddle River, NJ, USA},
+}
+
+@MASTERSTHESIS{Khalighi07MscThesis,
+ AUTHOR = {Vafa Khalighi},
+ AUTHORFA = {خلیقی,وفا},
+ TITLE = {Category Theory},
+ SCHOOL = {Sydny Univ.},
+ YEAR = {2007},
+ MONTH = {April}
+}
+
+@MISC{Khalighi87xepersian,
+ AUTHOR = {خلیقی,وفا},
+ TITLE = {زی‌پرشین (\lr{\XePersian}): بسته فارسی برای حروف‌چینی در \lr{\LaTeXe}},
+ HOWPUBLISHED = {\lr{\href{http://ctan.org/pkg/xepersian}{http://ctan.org/pkg/xepersian}}},
+ YEAR = {۱۳۸۷},
+ LANGUAGE = {Persian}
+ }
+
+@PHDTHESIS{Omidali82phdThesis,
+ AUTHOR = {امیدعلی, مهدی},
+ TITLE = {خم‌های تک‌جمله‌ای تعریف شده توسط دنباله‌های تقریباً حسابی},
+ SCHOOL = {دانشکده ریاضی، دانشگاه امیرکبیر},
+ YEAR = {1385},
+ MONTH = {تیر},
+ LANGUAGE = {Persian}
+}
+
+@BOOK{Pedram80osool,
+ AUTHOR = {استالینگ, ویلیام},
+ EDITOR = {برنجکوب, محمود},
+ translator = { صدیقی‌ مشکنانی, محسن and پدرام,حسین },
+ TITLE = {اصول طراحی و ویژگیهای داخلی سیستم‌های عامل},
+ PUBLISHER = {نشر شیخ بهایی},
+ YEAR = {۱۳۸۰},
+ ADDRESS = {اصفهان},
+ edition = {سوم},
+ MONTH = {بهار},
+ LANGUAGE = {Persian}
+}
+
+@MASTERSTHESIS{Pourmousa88mscThesis,
+ AUTHOR = {پورموسی , امیرمسعود},
+ TITLE = {بررسی رویدادهای ریزهمگرایی گرانشی تکراری در راستای مرکز کهکشان و ابرهای ماژلانی},
+ SCHOOL = {دانشکده فیزیک، دانشگاه صنعتی‌شریف},
+ YEAR = {۱۳۸۸},
+ LANGUAGE = {Persian}
+}
+
+@PhdThesis{Borman04thesis,
+ author = {Sean Borman},
+ authorfa = {بورمن,سین},
+ title = {Topics in Multiframe Superresolution Restoration},
+ school = {University of Notre Dame},
+ year = {2004},
+ address = {Notre Dame, IN},
+ month = may,
+}
+
+@PROCEEDINGS {conference06,
+ editor = {Farhad Shokoohi},
+ authorfa = {فرهاد شکوهی},
+ title = {Proceedings of the Xth Conference on XYZ},
+ booktitle = {Proceedings of the Xth Conference on XYZ},
+ year = {2006},
+ month = {October}
+} \ No newline at end of file
diff --git a/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.pdf b/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.pdf
new file mode 100644
index 0000000000..21fa1539a6
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.pdf
Binary files differ
diff --git a/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.tex b/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.tex
new file mode 100644
index 0000000000..356e4b72be
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/Persian-bib-userguide.tex
@@ -0,0 +1,370 @@
+\documentclass[a4paper]{article}
+% محمود امین‌طوسی، http://profs.hsu.ac.ir/mamintoosi
+% To do
+
+%\versionnumber{0.9}
+
+\usepackage{verbatim}
+\usepackage{color}
+\usepackage{amsthm}
+\usepackage[linktocpage=true,colorlinks,citecolor=blue,pagebackref=true]{hyperref}%
+\usepackage[nonamebreak,square]{natbib}%nonamebreak,numbers,
+\usepackage[top=30mm, bottom=30mm, left=30mm, right=30mm]{geometry}
+\usepackage{listings}
+
+\usepackage{xepersian}
+\settextfont[Scale=1]{XB Zar}%{XB Niloofar}
+\setlatintextfont[Scale=1]{Linux Libertine}
+%\setdigitfont[Scale=1]{XB Zar}
+\defpersianfont\Sayeh[Scale=1]{XB Kayhan Sayeh}
+
+\theoremstyle{plain}\newtheorem{question}{پرسش}
+\newcommand{\answer}{{\noindent \Sayeh پاسخ: }}
+\newcommand\SLASH{\char`\\}
+
+
+\title{\vspace{-2cm}
+{\small بسم الله الرحمن الرحيم\\}
+\vspace{2cm}
+ راهنمای استفاده از سبک‌های فارسی برای \textcolor{red}{\lr{\textsc{Bib}\TeX}}\\
+ در \textcolor{blue}{زی‌پرشین}\\
+\lr{(Persian-bib User Guide)}
+}
+\author{محمود امین‌طوسی\\
+\href{http://profs.hsu.ac.ir/mamintoosi}{دانشگاه حکیم سبزواری}
+\href{http://www.parsilatex.com}{گروه پارسی‌لاتک}
+%\lr{m.amintoosi at gmail.com}
+}
+%\date{}
+
+\begin{document}
+\maketitle
+%\vspace{2cm}
+\tableofcontents
+
+\section{مقدمه}
+
+یکی از روش‌های قدرتمند و انعطاف‌پذیر برای نوشتن مراجع مقالات و مدیریت مراجع در لاتک، استفاده از بسته‌ی \lr{BibTeX} است.
+اگر این بسته را به کار نبریم (و از ویژگی‌های پیش‌فرض لاتک برای مدیریت مراجع استفاده کنیم)، باید مراجع هر مقاله را در پایان همان مقاله بنویسیم
+و در متن نوشته به آن‌ها ارجاع دهیم. ولی روش کار با بسته‌ی \lr{BibTeX} به این صورت است که مجموعه‌ی همه‌ی مراجعی را که در نوشتن مقاله‌هایمان به کارمان می‌آید،
+در پرونده‌ی جداگانه‌ای نوشته و از آن در مقالات مختلف‌مان استفاده می‌کنیم. این روش ممکن است در آغاز کمی کار بیشتری بخواهد، ولی در پایان به سرعت کار می‌افزاید.
+گذشته از این، اگر کنفرانس‌ها یا مجله‌های گوناگون برای نوشتن مراجع، قالب‌ها یا قراردادهای متفاوتی داشته باشند
+ (مثلاً در ترتیب مراجع، ترتیب نام نویسنده‌های هر مرجع، بزرگی و کوچکی حروف و نحوه‌ی چینش اجزاء مرجع) و شما می‌خواهید مقالاتی در یک موضوع را آماده نمایید،
+ لازم نیست قالب مراجع را در هر سند خود به صورت جداگانه تغییر دهید.
+ در این حالت به کمک سبک‌های \lr{BibTeX} خواهید توانست تنها با تغییر یک پارامتر در پرونده‌ی ورودی خود، مراجع را مطابق قالب موردنظر تنظیم کنید.
+ بیشتر مجلات و کنفرانس‌های معتبر یک پرونده‌ی سبک (\lr{BibTeX Style}) با پسوند \lr{bst} در وب‌گاه خود می‌گذارند که برای همین منظور طراحی شده است.
+
+به جز نوشتن مقالات این سبک‌ها کمک بسیار خوبی برای تهیه‌ی مستندات علمی همچون پایان‌نامه‌هاست که فرد می‌تواند هر قسمت از کارش را که نوشت مراجع مربوطه
+را به بانک مراجع خود اضافه نماید. با داشتن چنین بانکی از مراجع، وی خواهد توانست به راحتی یک یا چند ارجاع به مراجع و یا یک یا چند بخش را حذف یا اضافه ‌نماید؛
+مراجع به صورت خودکار مرتب شده و فقط مراجع ارجاع داده شده در قسمت کتاب‌نامه خواهندآمد. قالب مراجع به صورت یکدست مطابق سبک داده شده بوده و نیازی نیست
+که کاربر درگیر قالب‌دهی به مراجع باشد.
+در این جا مجموعه‌ای از سبک‌های \lr{BibTeX} که برای بسته‌ی زی‌پرشین تنظیم شده‌اند معرفی شده و روش کار با آن‌ها گفته می‌شود.
+
+
+\section{سبک‌های فعلی قابل استفاده در زی‌پرشین}
+در حال حاضر فایلهای سبک زیر برای استفاده در زی‌پرشین آماده شده‌اند\footnote{برای دیدن و مقایسه‌ی خروجی سبک‌های مورد استفاده در اسناد فارسی، کافیست برنامه‌ی پرل \lr{gen\_pdf} را -- که همراه با بسته‌ی \lr{Persian-bib} است -- اجرا کنید تا به صورت خودکار نمونه خروجی‌هایی با تمام این سبک‌ها تولید نماید و یا به ویکی پارسی‌لاتک
+ (\url{http://wiki.parsilatex.com})
+ مراجعه فرمایید.}:
+\begin{description}
+\item [unsrt-fa.bst] این سبک متناظر با \lr{unsrt.bst} می‌باشد. مراجع به ترتیب ارجاع در متن ظاهر می‌شوند.
+\item [plain-fa.bst] این سبک متناظر با \lr{plain.bst} می‌باشد. مراجع بر اساس نام‌خانوادگی نویسندگان، به ترتیب صعودی مرتب می‌شوند.
+ همچنین ابتدا مراجع فارسی و سپس مراجع انگلیسی خواهند آمد.
+\item [acm-fa.bst] این سبک متناظر با \lr{acm.bst} می‌باشد. شبیه \lr{plain-fa.bst} است. قالب مراجع کمی متفاوت است. اسامی نویسندگان انگلیسی با حروف بزرگ انگلیسی نمایش داده می‌شوند. (مراجع مرتب می‌شوند)
+\item [ieeetr-fa.bst] این سبک متناظر با \lr{ieeetr.bst} می‌باشد. (مراجع مرتب نمی‌شوند)
+%\item [persia-unsorted.bst] این سبک شبیه \lr{ieeetr-fa.bst} می‌باشد با این تفاوت که برخی نامها با حروف توپر نوشته شده‌اند.
+\item [plainnat-fa.bst] این سبک متناظر با \lr{plainnat.bst} می‌باشد. نیاز به بستهٔ \lr{natbib} دارد. (مراجع مرتب می‌شوند)
+\item [chicago-fa.bst] این سبک متناظر با \lr{chicago.bst} می‌باشد. نیاز به بستهٔ \lr{natbib} دارد. (مراجع مرتب می‌شوند)
+\item [asa-fa.bst] این سبک متناظر با \lr{asa.bst} می‌باشد. نیاز به بستهٔ \lr{natbib} دارد. (مراجع مرتب می‌شوند)
+\item[plain-fa-inLTR]
+این سبک همان سبک
+\lr{plain-fa}
+می‌باشد ولی برای اسناد چپ به راست می‌تواند مورد استفاده قرار گیرد. منظور حالتی است که به عنوان مثال کل سند لاتین است و مایلیم یک یا چند مرجع فارسی هم داشته باشیم.
+\item[plain-fa-inLTR-beamer]
+این سبک مشابه سبک
+\lr{plain-fa-inLTR}
+است با این تفاوت که شامل اصلاحاتی جزیی برای استفاده در اسناد چپ به راست طبقه نوشتاری
+\lr{beamer}
+می‌باشد.
+\end{description}
+
+
+\section{ نحوه استفاده از سبک‌های فارسی}
+ %با مطالعه و اجرای مثال ارائه شده با زی‌پرشین (فایل \lr{bibtex\_example.tex}) با نحوه‌ی استفاده از سبک‌های فارسی آشنا خواهید شد.
+ مراحل اصلی برای استفاده از این سبک‌ها در ذیل آمده است:
+\begin{enumerate}
+\item در ابتدا باید یک بانک از مراجع خود همانند فایل \lr{MyReferences.bib} تهیه نمایید. اغلب انواع مراجع معمول مورد استفاده در آن آمده است. این فایل را در هر زمان می‌توانید ویرایش نموده، مراجعی را حذف یا اضافه نمایید.
+\item برای هر مدخل فارسی بایستی فیلدی با نام \lr{language} و با مقدار \lr{persian} داشته باشید.
+\item اگر مرجع شما دارای مترجم است، فیلدی به نام \lr{translator} حاوی نام(های) مترجم ایجاد کنید.
+\item در محلی از سورس زی‌پرشین خود که می‌خواهید لیست مراجع قرار بگیرد (معمولاً آخر سند) دستورات زیر را قرار دهید:
+\begin{LTR}
+\begin{verbatim}
+\bibliographystyle{style-file-name}% such as plain-fa
+\bibliography{bib-file-name} %such as MyReferences
+\end{verbatim}
+\end{LTR}
+\item فرض کنید نام فایل شما \lr{`myfile.tex'} باشد. دنباله پردازشهای زیر را برای حصول به نتیجه نهایی انجام دهید:
+
+\begin{LTR}
+\begin{verbatim}
+xelatex myfile
+bibtex myfile
+xelatex myfile
+xelatex myfile
+\end{verbatim}
+\end{LTR}
+\end{enumerate}
+نکته: در روش فوق مراجع فارسی در استیل‌هایی که مراجع را به صورت مرتب شده چاپ می‌کنند، ترتیب کاملاً درستی نخواهند داشت. برای توضیحات بیشتر بخش‌ \ref{Sec:sorting} را ببینید.
+
+\section{یک فایل \texorpdfstring{\lr{bib}}{bib} شامل چیست؟}
+یک فایل \lr{bib} در واقع یک پایگاه داده از مراجع\LTRfootnote{Bibliography Database} شماست که هر مرجع در آن به عنوان یک رکورد از این پایگاه داده
+با قالبی خاص ذخیره می‌شود. به هر رکورد یک مدخل\LTRfootnote{Entry} گفته می‌شود. یک نمونه مدخل برای معرفی کتاب \lr{Digital Image Processing} در ادامه آمده است:
+\begin{LTR}
+\begin{verbatim}
+@BOOK{Gonzalez02book,
+ AUTHOR = {Rafael Gonzalez and Richard Woods},
+ TITLE = {Digital Image Processing},
+ PUBLISHER = {Prentice-Hall, Inc.},
+ YEAR = {2006},
+ EDITION = {3rd},
+ ADDRESS = {Upper Saddle River, NJ, USA}
+}
+\end{verbatim}
+\end{LTR}
+در مثال فوق، \lr{@BOOK} مشخصه‌ی شروع یک مدخل مربوط به یک کتاب و \lr{Gonzalez02book} برچسبی است که به این مرجع منتسب شده است.
+ این برچسب بایستی یکتا باشد. برای آنکه فرد به راحتی بتواند برچسب
+مراجع خود را به خاطر بسپارد و حتی‌الامکان برچسب‌ها متفاوت با هم باشند معمولاً از قوانین خاصی به این منظور استفاده می‌شود. یک قانون می‌تواند فامیل نویسنده‌ی
+اول+دورقم سال نشر+اولین کلمه‌ی عنوان اثر باشد. به \lr{AUTHOR} و $\dots$ و \lr{ADDRESS} فیلدهای این مدخل گفته می‌شود؛ که هر یک با مقادیر مربوط
+به مرجع مقدار گرفته‌اند. ترتیب فیلدها مهم نیست.
+
+انواع متنوعی از مدخل‌ها برای اقسام مختلف مراجع همچون کتاب، مقاله‌ی کنفرانس و مقاله‌ی ژورنال وجود دارد که برخی فیلدهای آنها با هم متفاوت است.
+نام فیلدها بیانگر نوع اطلاعات آن می‌باشد. مثالهای ذکر شده در فایل \lr{MyReferences.bib} کمک خوبی به شما خواهد بود.
+این فایل یک فایل متنی بوده و با ویرایشگرهای معمول همچون \lr{Notepad++} قابل ویرایش می‌باشد. برنامه‌هایی همچون
+\lr{TeXMaker} امکاناتی برای نوشتن این مدخل‌ها دارند و به صورت خودکار فیلدهای مربوطه را در فایل \lr{bib} شما قرار می‌دهند.
+با استفاده از سبک‌های فارسی آماده شده، محتویات هر فیلد می‌تواند به فارسی نوشته شود، ترتیب مراجع و نحوه‌ی چینش فیلدهای هر مرجع را سبک مورد استفاده
+مشخص خواهد کرد.
+
+
+\section{استفاده از \texorpdfstring{\lr{natbib}}{natbib}}\label{Sec:natbib}
+برخی مایلند که مراجع خود را با قالب نویسنده-سال داشته باشند. برای لاتین استیلهایی نظیر \lr{plainnat} وجود دارند که خروجی آنها به اینگونه است؛ ولی برای فارسی چنین استیلهایی نداریم.
+بعلاوه معمولاً در مستندات فارسی خواسته می‌شود که نام‌های لاتین مؤلفین در متن به صورت فارسی نوشته شود ولی در لیست مراجع به صورت انگلیسی ظاهر شوند.
+%اگر از استیلهای \lr{plainnat} یا \lr{chicago} در مستندات زی‌پرشین استفاده کنیم با مشکلاتی مواجه هستیم.
+با استفاده از استیل‌های جدید \lr{plainnat-fa.bst}، \lr{asa-fa.bst} و \lr{chicago-fa.bst} می‌توانید در زمانیکه متن شما فارسی و مراجعتان لاتین است از قالب مراجع به صورت «نویسنده-سال» استفاده کنید. به این منظور باید در هر مدخل مراجع خود یک فیلد جدید به نام \lr{AUTHORFA} تعریف نموده و معادل فارسی نام مؤلفین را در آن قید کنید.
+دنباله عملیات لازم برای تولید خروجی در بخش \ref{Sec:sorting} آمده است.
+
+تا آنجا که بررسی شده است، سه استیل آماده شده با فرامین معمول بستهٔ \lr{natbib} که در راهنمای آن آمده است (مانند \lr{cite,citet,citep}) به خوبی کار می‌کند. در ادامه مثالهای متنوعی از انواع مختلف مراجع و برخی دستورات ارجاع‌دهی در \lr{natbib} آمده است. دقت داشته باشید که برای استفاده از فایل‌های استیل فارسی فوق‌الذکر باید بستهٔ \lr{natbib} نصب شده باشد و آنرا فراخوانی نموده باشید. در این بسته به صورت پیش‌فرض در ارجاع به مراجع، از پرانتز استفاده می‌شود، لیکن از آنجا که در این سند این بسته با گزینه‌ی \lr{square} فراخوانی شده است، مراجع با کروشه مشخص شده‌اند.
+
+\subsection{مثالها}\label{Sec:examples}
+
+\citet{Borman04thesis}\LTRfootnote{\citeauthor*{Borman04thesis}} در پایان‌نامهٔ دکترای خود به موضوع وضوح برتر پرداخته است.
+\citet{Amintoosi09precise}\LTRfootnote{\citeauthor*{Amintoosi09precise}} یک روش افزایش وضوح تصویر ارائه دادند. این روش توسط \citet{Amintoosi09video} برای ویدئو بکار گرفته شد.همانگونه که می‌بینید در این مرجع که دو مؤلف داریم فامیل هر دو آمده است. ضمناً هر دو مرجع لاتین هستند که در فیلد \lr{authorfa} معادل فارسی آنها ذکر شده بوده است.
+
+خوب حالا ببینیم با مرجع \citep{Amintoosi09regional} چکار می‌کند. از آنجا که مؤلفین این مقاله و مقاله اول و سال نشر هر دو یکی است در کنار سال، \lr{a,b,c,...} قرار می‌گیرد. این یکی را تبدیل به الف و ب نمی‌کنیم چرا که در لیست مراجع به همین صورت ظاهر می‌شوند.
+
+و حالا چند مرجع از انواع مختلف را با هم ببینیم: \citet{Omidali82phdThesis} یک نمونه پروژه دکترا و مرجع \citep{Vahedi87} یک نمونه مقاله مجله فارسی است که با \lr{citep} به آن ارجاع داده شده و لذا کلاً داخل کروشه قرار گرفته است.
+
+مرجع \citep{Pedram80osool} یک نمونه کتاب فارسی با ذکر مترجمان و ویراستاران فارسی است. مرجع \citep{Khalighi07MscThesis} یک نمونه پروژه کارشناسی ارشد انگلیسی و \citet{Khalighi87xepersian} هم یک نمونه متفرقه می‌باشند.\citet{Gonzalez02book} یک کتاب لاتین است.
+
+ مرجع \citet[فصل ۲]{Pourmousa88mscThesis} یک نمونه پروژه کارشناسی ارشد فارسی است که به فصل دوم آن ارجاع داده شده و مرجع \citep[قضیه‌ی ۲،][]{Amintoosi87afzayesh} یک نمونه مقاله کنفرانس فارسی با ارجاع به یک قضیه به آن است که قضیه‌ی مربوطه قبل از نام مرجع آمده است (برخلاف مثال پیشین).
+
+ اگر به مرجع قبل با استفاده از \lr{citealp*} ارجاع دهیم به صورت \citealp*{Amintoosi87afzayesh} نشان داده می‌شود که همانگونه که مشاهده می‌کنید نام تمام مؤلفین نشان داده شده است؛ برخلاف مورد قبلی که مؤلفین دوم به بعد با «ودیگران» جایگزین می‌شد. البته در حال حاضر این مورد فقط برای مراجع فارسی بدرستی عمل می‌نماید.
+%همانگونه که دیده می‌شود، مراجع فارسی و لاتین هم در متن و هم در لیست مراجع به صورت درست نمایش داده شده اند.
+%تست چندمرجعی زیرنویس \LTRfootnote{\citeauthor*{Amintoosi09precise,Gonzalez02book}}\citet{Amintoosi09precise,Gonzalez02book}
+
+اگر اسامی مؤلفان چند مرجع یکسان باشد (فارسی یا معادل فارسی آنها) و به آنها پشت سرهم ارجاع دهیم، اسامی فقط یک بار ظاهر خواهند شد. مثلاً \citet{Amintoosi09precise,Amintoosi87afzayesh} دو مقاله از نویسندگان یکسان ولی اولی به لاتین و دومی به فارسی است که سال نشر آنها مؤید این مطلب است.
+ البته یک نقطه ضعف کوچک هم دارد و آن این است که برای تست یکسان بودن مراجع همین برچسب مورد عمل قرار می‌گیرد. به عنوان مثال از آنجا که برای هر دو مقاله «امین‌طوسی و دیگران» آمده است، بدون توجه به اینکه سایر همکاران ممکن است متفاوت باشند در یک دسته قرار می‌گیرند.
+
+%مثالی از کنفرانس بدون نویسنده: \citep{conference06}
+
+\section{مرتب‌سازی مراجع بر اساس نام نویسنده}\label{Sec:sorting}
+اگر در نام خانوادگی نویسنده‌ یکی از حروف 'گچپژ` و یا کاف فارسی باشد مرتب‌سازی با مشکل مواجه خواهد شد. برای مشخص کردن ترتیب درست حروف، فایلی با نام \lr{`cp1256fa.csf'} آماده شده است که باید آنرا به همراه \lr{bibtex8} بکار ببرید. همچنین از آنجا که در بسیاری از قوانین مربوط به درج مراجع در ایران خواسته می‌شود که ابتدا مراجع فارسی و سپس مراجع لاتین قید شوند، در فایل مذکور حروف فارسی قبل از حروف لاتین آمده‌اند.
+فرض کنید نام فایل شما \lr{`myfile.tex'} و نام فایل حاوی مراجع شما \lr{ `SomeReferences.bib'} باشد. این فایل و فایل \lr{`cp1256fa.csf'} باید در همان شاخه فایل اصلی شما یا در مسیر سیستم باشند.
+%برای آشنایی با ساختار فایل \lr{`SomeReferences.bib'} به همین فایل که همراه این فایل است مراجعه قرمایید.
+دنباله کارهای زیر را برای حصول به نتیجه باید انجام دهید:
+\begin{LTR}
+\begin{verbatim}
+xelatex myfile
+bibtex8 -W -c cp1256fa myfile
+xelatex myfile
+xelatex myfile
+\end{verbatim}
+\end{LTR}
+می‌توانید به جای \lr{bibtex8} از {\lr{bibtex}} و بدون هیچ گزینهٔ اضافه‌ای استفاده کنید ولی در این حالت مراجع فارسی شما مرتب نخواهند بود، مگر آنکه به نحو مناسبی از \lr{noopsort} استفاده کنید.
+
+
+
+\section{چند نکته در مورد استفاده از سبک‌های فارسی}
+\begin{itemize}
+\item همانگونه که مشاهده کردید با استفاده از فیلد \lr{AUTHORFA} می‌توان معادل فارسی نام نویسندگان مقالات لاتین را در متن داشت. معمولاً در اسناد فارسی خواسته می‌شود که پس از ذکر معادل فارسی نام نویسنده، نام لاتین نویسنده(ها) به عنوان پاورقی درج شود. به این منظور کافیست پس از ارجاع به مرجع، در دستور زیر نویس از فرم ارجاع نویسنده-سال استفاده کنید، مثلاً به صورت زیر:
+\begin{latin}
+\begin{verbatim}
+\citep{referenceTag}\LTRfootnote{\citeauthor*{referenceTag}}
+\end{verbatim}
+\end{latin}
+ نام مؤلفینِ اولین دو نمونه ارجاعِ بخش مثالها (بخش \ref{Sec:examples}) به همین‌ صورت در پاورقی ظاهر شده است.
+
+\item همانگونه که مشاهده می‌کنید با بستهٔ \lr{hyperref} مشکلی وجود ندارد، البته به شرط داشتن بستهٔ \lr{bidi}نسخهٔ ۱.۰.۴ (\lr{revision} ۱۹۰ به بعد) . فقط یک استثناءوجود دارد و آن هم رنگ مرجع در هنگامی است که قسمتی از اسامی مؤلفین یک مرجع درانتهای یک خط و قسمتی دیگر در ابتدای خط بعد قرار گیرد. در این حالت کل دو خط رنگی می‌شوند. راه حلی نسبی برای آن با گزینه \lr{nonamebreak} از بستهٔ \lr{natbib} و گزینه کشیده \lr{(Kashida)} از بستهٔ زی‌پرشین وجود دارد.
+%در \lr{LuaPersian} که سبک فارسی در حال گسترشی توسط آقای خلیقی است این مشکل وجود ندارد.
+
+%یک مثال را ببینیم:در اینجا چند مرجع پشت سر هم داریم که از یک خط بیشتر شده‌اند: \citet{Omidali82phdThesis} و \citealp*{Khalighi87xepersian} و \citet{Amintoosi09precise,Amintoosi87afzayesh} اگر گزینه \lr{nonamebreak} را استفاده نکنید هر دو خط آبی خواهند شد. با استفاده از گزینهٔ مذکور که مربوط به بستهٔ \lr{natbib} است، این مشکل رنگی شدن دو خط برطرف می‌شود ولی ممکن است تنظیم خط به هم بخورد،‌ کمتر از طول خط شود و یا از حد خارج شود. این مشکل بسیاری از اوقات توسط گزینهٔ کشیده \lr{(Kashida)} در بستهٔ زی‌پرشین قابل حل است.
+
+\item متاسفانه \lr{bibtex} قادر به جداسازی حرف اول نامهای فارسی نیست، لذا در استیل‌‌هایی که حرف اول نامهای لاتین ظاهر می‌شوند، نامهای فارسی به صورت کامل نشان داده می‌شوند. اگر نیاز به این حالت دارید، باید خودتان به صورت دستی نامها را در مراجع فارسی اصلاح نمایید.
+
+\item رمزینه فایل \lr{.bib} شما باید یونیکد یا \lr{UTF-8} باشد، در غیراینصورت (مثلاً اگر \lr{UTF-8 without BOM} باشد) در لینوکس با مشکل مواجه خواهید شد. به جای ایجاد فایل \lr{bib} جدید برای خود، فایل \lr{MyReferences.bib} که با رمزینه‌ی \lr{UTF-8} ذخیره شده است را تغییر داده در صورت نیاز با نامی دیگر ذخیره نمایید.
+\item برای فونت فارسی از فونت‌های سری \lr{XB} یا قلم مناسب دیگری که حروف لاتین را هم داشته باشد استفاده نمایید.
+\item برچسب‌ هر مرجع می‌تواند به فارسی نوشته شود، اما در آن نباید فاصله بکار برده شده باشد.
+به عنوان مثال به جای 'امین طوسی` بایستی از نیم فاصله استفاده نمود و آنرا به صورت 'امین‌طوسی` نوشت. دقت داشته باشید که در این حالت با بستهٔ \lr{hyperref} مشکل خواهید داشت.
+\item مراجع فارسی نیازی به فیلد \lr{authorfa} ندارند.
+\item دقت داشته باشید که اگر اول فامیل و سپس اسم را می‌نویسید، اسم و فامیل را با کامای انگلیسی از هم جدا کنید. اگر حروف اول اسم را می‌نویسید، پس از آن نقطه و بعد حتماً یک فاصله و سپس فامیل را بنویسید.
+%\item اگر مایلید که همچون این مثال، خط دوم هر مرجع کمی جلوتر برده شود فایل \lr{mybib.sty} را با دستور \lr{usepackage} پس از زی‌پرشین فراخوانی نمایید.
+\item در مرجع \cite{Baker02limits}، فیلد \lr{authorfa} را نداریم، اسامی به صورت لاتین و برعکس نوشته شده‌اند و سال هم به فارسی نوشته شده است. اگر آنرا به صورت لاتین می‌خواهید، در نسخه‌های جدید زی‌پرشین و \lr{bidi} می‌توانید به راحتی از دستور \lr{Latincite} استفاده کنید.
+حالا مرجع \Latincite{Baker02limits} درست نمایش داده می‌شود. از دستور فوق‌الذکر برای درج شماره مراجع به صورت لاتین در متن نیز می‌توان استفاده نمود. اگر مایل باشید از دیگر دستورات ارجاع مانند citealp استفاده کنید باید آنرا به صورت زیربکار ببرید:
+\begin{latin} \LRE{\verb+\LRE{\lr{\citealp{referenceTag}}}+} \end{latin}
+%\newcommand\LRcite[1]{\LRE{\lr{\cite{#1}}}}
+
+\item
+در طبقه نوشتاری
+\lr{biditufte-book}
+ از سبک‌های
+\lr{plainnat-fa}، \lr{chicago-fa} و \lr{asa-fa}
+و دستورات
+\verb!\LTRcite{}!
+\verb!\RTLcite{}!
+ استفاده فرمایید.
+
+\item برای گزارش مشکل به سایت پرسش و پاسخ پارسی‌لاتک
+ (\url{http://qa.parsilatex.com})
+ مراجعه فرمایید.
+
+\end{itemize}
+
+\section{مراجع فارسی در اسناد لاتین}
+برای داشتن مراجع فارسی در اسناد لاتین می‌توانید از سبک‌های
+\lr{plain-fa-inLTR}
+\lr{plain-fa-inLTR-beamer}
+استفاده فرمایید. از آنجا که به احتمال زیاد کاربران این بخش با زبان انگلیسی راحت‌تر هستند، نحوه استفاده از آن به انگلیسی بیان می‌شود.
+\begin{latin}
+Suppose that you want to have Persian or Arabic references in your Left-to-Right document. In this case plain-fa-inLTR.bst in Persian-bib package is the right solution.
+You should insert the following codes in the premable of your document and use a the aforementioned style in your documnet:
+
+\begin{lstlisting}[language=tex,breaklines=true, basicstyle=\ttfamily, numberstyle=\footnotesize, numbersep=10pt, captionpos=b, frame=single, breakatwhitespace=false]
+\usepackage{fontspec}
+\newfontfamily\Persianfont[Script=Arabic,Scale=1]{A font with Persian glifs such az XB Zar}
+\makeatletter
+\TeXXeTstate=1
+\def\Persiantext#1{\begingroup\beginR\Persianfont#1\endR\endgroup}
+\makeatother
+\end{lstlisting}
+
+Note that the encoding of your .bib file should be UTF-8. As you know, your bibliography section should be as follow:
+\begin{verbatim}
+\bibliographystyle{plain-fa-inLTR}
+\bibliography{SomeReferences}
+\end{verbatim}
+
+If you have Persian references in your beamer presentation, please use `plain-fa-inLTR-beamer' and insert the following code in the premable of your document:
+
+\begin{lstlisting}[language=tex,breaklines=true, basicstyle=\ttfamily, numberstyle=\footnotesize, numbersep=10pt, captionpos=b, frame=single, breakatwhitespace=false]
+\usepackage{fontspec}
+\newfontfamily\Persianfont[Script=Arabic,Scale=1]{A font with Persian glifs such az XB Zar}
+\makeatletter
+\TeXXeTstate=1
+\def\Persiantext#1{\begingroup\beginR\Persianfont#1\hfill\endR\endgroup}
+\def\newRAblock#1{#1\hfill}
+\makeatother\end{lstlisting}
+%
+
+\end{latin}
+
+\section{پرسش و پاسخ}
+\begin{question}
+ آیا برای داشتن مراجع، استفاده از استیلهای فارسی الزامی است؟
+\end{question}
+\answer
+هم بله و هم خیر. استیلهای فارسی کارهای مختلفی انجام می‌دهند؛ به جز استفاده از معادل فارسی برخی اصطلاحات، دستورات موردنیاز را در جای مناسب خود درج می‌کنند. در \lr{bidi} دستورات خاصی برای مراجع در محیطهای راست به چپ و چپ به راست وجود دارند که برای آشنایی با آنها باید به راهنمای این سبک مراجعه شود. از جمله این موارد، محیط \lr{LTRbibitems} است که برای درج مراجع لاتین در یک محیط راست به چپ استفاده می‌شود و در استیلهای فارسی از آن استفاده شده است. اگر از استیلهای فارسی استفاده نکنید، وظیفه درج این دستورات به عهده خود شما خواهد بود.
+
+\begin{question} آیا می‌توان شماره صفحات ارجاعی به هر مرجع را در انتهای هر مرجع داشت؟ این حالت مخصوصاً هنگام‌ داوری یک مقاله یا پروژه
+خیلی مفید است.
+\end{question}
+\answer
+بله، با دو روش:
+\begin{enumerate}
+\item
+اگر از بستهٔ \lr{hyperref} استفاده می‌کنید کافیست آنرا با گزینهٔ \lr{pagebackref=true} فراخوانی نمایید.
+\item
+با استفاده از بسته‌ی \lr{backref} نیز می‌توان این کار را انجام داد.
+\end{enumerate}
+
+\begin{question} گاهی اوقات اخطار \lr{Underfull \SLASH hbox} را دریافت می‌کنیم. مشکل از چیست؟ \end{question}
+\answer در برخی حالات به دلیل عدم توانایی تک در تنظیم بهینه‌ی محل شکستن خطوط این اخطار داده می‌شود که مهم نیست.
+
+\begin{question} چرا به جای خط فاصله در بین شماره صفحات مراجع فارسی یک مربع چاپ می‌شود؟ \end{question}
+\answer شما از فونت‌ مناسبی برای فارسی استفاده نکرده‌اید. از فونت‌های مانند فونت‌های سری \lr{XB} استفاده نمایید.
+
+\begin{question} چرا در سبک \lr{ieeetr-fa} شماره‌ی مجله (\lr{number}) در مراجع از نوع \lr{article} نمایش داده نمی‌شود؟ \end{question}
+\answer در سبک اصلی \lr{ieeetr} اگر ماه نشر مجله مشخص باشد، شماره‌ی آن نمایش داده نخواهد شد.
+ همچنین دقت داشته باشید که این سبک کاملاً مطابق با سبک جدید \lr{IEEEtran} نیست.
+
+\begin{question} حروف فارسی در لیست مراجع من به‌هم ریخته و ناخوانا است. مشکل از چیست؟ \end{question}
+\answer همان‌گونه که قبلاً اشاره شد فایل \lr{bib} بایستی با رمزینه‌ی \lr{UTF-8} ذخیره شده باشد. به جای ایجاد فایل \lr{bib} جدید برای خود،
+فایل \lr{MyReferences.bib} را که با رمزینه‌ی \lr{UTF-8} ذخیره شده است را تغییر داده در صورت نیاز با نامی دیگر ذخیره نمایید.
+
+\begin{question} عبارت \lr{OPT} که در \lr{TeXMaker} در ابتدای نام برخی از فیلدها گذاشته می‌شود چیست؟ \end{question}
+\answer این عبارت به منزله‌ٔ اختیاری بودن آن فیلد است. اگر از آن فیلد استفاده می‌کنید باید \lr{OPT} را حذف کنید.
+
+\begin{question} چرا در هنگام استفاده از دستورات \lr{\SLASH Persian} و \lr{\SLASH Latin} با خطا مواجه می‌شوم؟ \end{question}
+\answer این دستورات منسوخ شده و در نسخه‌‌ی فعلی زی‌پرشین پشتیبانی نمی‌شوند. محیط پیش فرض مراجع، فارسی است و برای درج مراجع لاتین باید آنرا داخل محیط \lr{LTRbibitems} قرار دهید.
+
+\begin{question} اگر خواسته باشیم شماره مراجع لاتین در بخش مراجع، فارسی باشد چکار کنیم؟ \end{question}
+\answer برای این منظور کافیست دستور \lr{\SLASH resetlatinfont} را به پس از \lr{\SLASH bibitem} منتقل کنید.
+ استیلهای فارسی فعلی به نحوی آماده شده‌اند که شماره مراجع لاتین به انگلیسی و شماره مراجع فارسی به فارسی ظاهر می‌شود و اگر خواسته باشید این کار را انجام دهید باید تغییر فوق‌الذکر را به صورت دستی در فایل \lr{bbl} خود اعمال نمایید (که البته با اجرای \lr{bibtex} بعدی از بین خواهند رفت).
+\begin{question} اگر خواسته باشیم شماره مراجع لاتین در داخل متن، انگلیسی باشد چکار کنیم؟ \end{question}
+\answer به جای دستور \lr{\SLASH cite} از دستور \lr{\SLASH Latincite} استفاده کنید.
+
+\begin{question} اگر هنگامی‌که به چندین مرجع پشت سر هم ارجاع می‌دهیم خواسته باشیم به صورت خودکار شماره مراجع اولی و آخری با یک خط تیره از هم جدا شوند چه کنیم؟
+(به عبارت دیگر مایلیم [۲و۳و۴و۵و۶] به صورت [۲-۶] نمایش داده شود).
+ \end{question}
+\answer اگر از بسته‌ی \lr{natbib} استفاده می‌کنید، آنرا به همراه گزینه‌ی \lr{sort\&compress} بکار ببرید. درغیر این‌صورت از بسته‌ی \lr{cite} استفاده کنید.
+
+\begin{question} آیا ابزاری برای مدیریت مراجع وجود دارد که از قالب نوشتن مراجع در \lr{Bib\TeX} پشتیبانی کند؟ \end{question}
+\answer بله، بسیاری از نرم‌افزارهای مدیریت مراجع قادر به \lr{import} و \lr{export} کردن مراجع به فرم مورد نیاز \lr{Bib\TeX} هستند. یک نمونه نرم‌افزار مجانی مدیریت مراجع \lr{Mendeley\LTRfootnote{\url{http://www.Mendeley.com}}} است که امکانات بسیار خوبی برای مدیریت مراجع دارد.
+
+\begin{question} وقتی از یکی از چهار استیل \lr{usrt-fa}،\lr{plain-fa}، \lr{acm-fa} و یا \lr{ieeetr-fa} را با همین سند بکار می‌برم خطا دریافت می‌کنم. علت چیست؟
+ \end{question}
+\answer استیل استفاده شده در این فایل راهنما، \lr{asa-fa} است که نیاز به بسته‌ی \lr{natbib} دارد، درحالیکه برای استفاده از چهار استیل مذکور نباید این بسته را فراخوانی نمود.
+
+\begin{question} چگونه می‌توانم هنگامی‌که از بسته‌ی \lr{natbib} استفاده می‌کنم مراجع را نیز شماره‌گذاری نمایم؟
+ \end{question}
+\answer بسته‌ی \lr{natbib} را با گزینه‌ی \lr{numbers} فراخوانی نمایید.
+
+
+
+\begin{question}اگر سند من فارسی و مراجع من انگلیسی باشد و قصد از استیلهای انگلیسی استفاده داشته باشم چگونه عمل کنم؟
+ \end{question}
+\answer
+\begin{LTR}
+\begin{verbatim}
+ \setLTRbibitems
+ \makeatletter
+ \bidi@AtBeginEnvironment{thebibliography}{\latinfont}
+ \makeatother
+ \bibliographystyle{STYLE_FILE_NAME} % such as plain
+ \bibliography{BIB_FILE_NAME} %such as MyReferences
+\end{verbatim}
+\end{LTR}
+
+\begin{question} آخرین نسخه‌های استیلهای فارسی را از کجا تهیه کنیم؟
+ \end{question}
+\answer آخرین نسخه‌ی پایدار استیلهای فارسی با دانلود بسته‌ی \lr{Persian-bib} از آدرس:\\
+\lr{\url{http://mirror.ctan.org/biblio/bibtex/contrib/persian-bib.zip}\hfill}\\
+ قابل استفاده است. آخرین نسخه‌ی در دست توسعه‌ی این استیلها نیز از سایت زیر قابل برداشت است:\\ \lr{\url{https://bitbucket.org/mamintoosi/persian-bib/}\hfill}
+
+\section*{قدردانی}
+در اینجا لازم است از آقای \textcolor{blue}{وفا خلیقی} به خاطر زحمات بسیار ایشان در تولید بستهٔ \XePersian، نگهداری از بستهٔ \lr{bidi} و پاسخگویی به سؤالات بسیار کاربران و آقایان دکتر مهدی امیدعلی و مصطفی واحدی که با تلاشهای خود روحی تازه در کالبد لاتک فارسی دمیدند تشکر نمایم. همچنین از سایر دوستانمان مخصوصاً آقایان وحید دامن‌افشان، فرشاد ترابی، هادی صفی‌اقدم، سیداحمد موسوی، ابوالفضل دیانت، امیرمسعود پورموسی و سیدرضی علوی‌زاده، که زحمات زیادی در سایت پارسی‌لاتک و در جهت توسعه‌ی زی‌پرشین کشیدند قدردانی می‌نمایم. از جناب عینیان نیز برای نکته مربوط به زیرنویس نام لاتین نویسندگان سپاس‌گزاری می‌کنم.
+
+\bibliographystyle{asa-fa}%{chicago-fa}%{plainnat-fa}%
+\bibliography{MyReferences}
+
+\end{document} \ No newline at end of file
diff --git a/biblio/bibtex/contrib/persian-bib/README b/biblio/bibtex/contrib/persian-bib/README
new file mode 100644
index 0000000000..3c581fca81
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/README
@@ -0,0 +1,58 @@
+Persian-bib, V0.9 2015/05/09
+Persian translations of some BibTeX styles
+Author: Mahmood Amintoosi, http://profs.hsu.ac.ir/mamintoosi
+Copyright 20092016
+It may be distributed and/or modified 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 author-maintained (as per LPPL maintenance status)
+by Mahmood Amintoosi
+------------------------------------------------------------------------------
+
+These files are Persian translations of some of the classical BibTeX style files.
+Unlike bib-fr package which can be used only for French references, the Persian
+.bst files simultaneously handle both Latin and Persian references.
+
+File 'cp1256fa.csf' is prepared for correct sorting of Persian references and
+three fields named 'LANGUAGE', 'TRANSLATOR' and 'AUTHORFA' are defined. This
+file has a bit modification with respect to its previous version (0.6) according
+to PersianAcademy: http://www.persianacademy.ir
+
+Setting 'LNAGUAGE' to 'Persian' makes the reference direction Left-to-Right and
+makes BibTeX to use Persian translations of keywords such as 'et al.'.
+Also some other modifications has been done. for example in Persian references,
+instead of Latin references, the book edition appears before the edition number.
+If this field is omitted or contains a word other than 'Persian', the reference
+considered as Left-to-Right reference.
+
+'TRANSLATOR' field is used when a reference is translated by someone.
+His or her name appears in the reference in the proper location.
+
+'AUTHORFA' is used with Asa-fa.bst, chicago-fa.bst and plainnat-fa.bst.
+The user should mention the Persian equivalent of the author(s) name(S),
+for proper referencing in the text. If this field is omitted, the original
+author name, in 'AUTHOR' will be used.
+
+Currently 7 files unsrt-fa.bst, acm-fa.bst, ieeetr-fa.bst, plain-fa.bst,
+Asa-fa.bst, chicago-fa.bst and plainnat-fa.bst are modified for Persian
+documents prepared with XePersian (a Persian typesetting package over XeTeX).
+Hence this package is dependent to XePersian Package.
+
+Current Persian bst files work fine with hyperref and natbib packages.
+
+Persian translations of key-words such as 'et al.' can be changed with other
+translations.
+If you modify anything, however, please change the name of the file.
+
+Change Log:
+Version 0.8 : two other styles 'plain-fa-inLTR' and 'plain-fa-inLTR-beamer'
+are added to the package. These styles are prepared for inserting Persian
+references in LTR documents which are dependent to bidi package.
+
+Version 0.9: Debug plain*.bst styles: change "ed. " -> "edition",
+"vol" -> "volume" or "Volume, "p."->"page", "pp."->"pages" and some others.
+
+Mahmood Amintoosi <m.amintoosi@gmail.com>
+http://profs.hsu.ac.ir/mamintoosi
+http://www.parsilatex.com/ \ No newline at end of file
diff --git a/biblio/bibtex/contrib/persian-bib/acm-fa.bst b/biblio/bibtex/contrib/persian-bib/acm-fa.bst
new file mode 100644
index 0000000000..6b6a799d46
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/acm-fa.bst
@@ -0,0 +1,1435 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "acm-fa", Persian (farsi) version of acm.bst
+%%
+%% by: Mahmood Amintoosi and Mostafa Vahedi, m.amintoosi@gmail.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright of acm.bst
+
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" eds. "}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { " vol."}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.nr}
+{
+fa.isPersianLanguage
+ {" شماره "}
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { " pp." }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" ص." }
+ { " p." }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {" chap." }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { " Tech. Rep." }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " Ph.D. thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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$
+}
+
+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$
+}
+
+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 acm-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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
diff --git a/biblio/bibtex/contrib/persian-bib/asa-fa.bst b/biblio/bibtex/contrib/persian-bib/asa-fa.bst
new file mode 100644
index 0000000000..d52f9be82b
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/asa-fa.bst
@@ -0,0 +1,1774 @@
+%% This is file `asa-fa.bst',
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "asa-fa", Persian (farsi) version of asa.bst
+%%
+%% by: Mahmood Amintoosi, m.amintoosi@gmail.com, www.parsilatex.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Original Copyright
+
+%% ----------------------------------------
+%% *** BibTeX Style for ASA Journals ***
+%% (Brett Presnell, 24 August 1998)
+%%
+ %-------------------------------------------------------------------
+ % The original source file contains the following version information:
+ % \ProvidesFile{merlin.mbs}[1998/02/25 3.85a (PWD)]
+ %
+ % NOTICE:
+ % This file may be used for non-profit purposes.
+ % It may not be distributed in exchange for money,
+ % other than distribution costs.
+ %
+ % The author provides it `as is' and does not guarantee it in any way.
+ %
+ % Copyright (C) 1994-98 Patrick W. Daly
+ %-------------------------------------------------------------------
+ % For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is an author-year citation style bibliography. As such, it is
+ % non-standard LaTeX, and requires a special package file to function properly.
+ % Such a package is natbib.sty by Patrick W. Daly
+ % The form of the \bibitem entries is
+ % \bibitem[Jones et al.(1990)]{key}...
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
+ % The essential feature is that the label (the part in brackets) consists
+ % of the author names, as they should appear in the citation, with the year
+ % in parentheses following. There must be no space before the opening
+ % parenthesis!
+ % With natbib v5.3, a full list of authors may also follow the year.
+ % In natbib.sty, it is possible to define the type of enclosures that is
+ % really wanted (brackets or parentheses), but in either case, there must
+ % be parentheses in the label.
+ % The \cite command functions as follows:
+ % \citet{key} ==>> Jones et al. (1990)
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
+ % \citep{key} ==>> (Jones et al., 1990)
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32)
+ % \citeauthor{key} ==>> Jones et al.
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
+ % \citeyear{key} ==>> 1990
+ %---------------------------------------------------------------------
+
+ENTRY
+ { address
+ author
+ authorfa
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ translator
+ type
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block fa.isInLabel}
+% fa.isInLabel is set in format.lab.names
+
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+FUNCTION{bst.file.authors} {"M.Amintoosi" }
+
+FUNCTION {banner.message}
+{ is.print.banners.to.terminal
+ { "-- asa-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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+fa.isInLabel
+{" و "}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { "ویراستاران"}
+ { "eds."}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { "ویراستار"}
+ { "ed." }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { " vol."}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.nr}
+{
+fa.isPersianLanguage
+ {" شماره "}
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { " pp." }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" ص." }
+ { " p." }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {" chap." }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { " Tech. Rep." }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " Ph.D. thesis" }
+if$
+}
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+% Added by M.Amintoosi
+FUNCTION {bbl.etal}
+{
+fa.isInLabel
+{" و دیگران"}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+if$
+}
+
+FUNCTION {bbl.translator}
+{
+fa.isPersianLanguage
+ { " ترجمه‌ی "}
+ {" Translated by "}
+if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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 {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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 {add.blank}
+{ " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+ skip$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {non.stop}
+{ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "\textit{" swap$ * "}" * }
+ if$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+
+
+MACRO {jan} {"Jan."}
+
+MACRO {feb} {"Feb."}
+
+MACRO {mar} {"Mar."}
+
+MACRO {apr} {"Apr."}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"Jun."}
+
+MACRO {jul} {"Jul."}
+
+MACRO {aug} {"Aug."}
+
+MACRO {sep} {"Sep."}
+
+MACRO {oct} {"Oct."}
+
+MACRO {nov} {"Nov."}
+
+MACRO {dec} {"Dec."}
+
+FUNCTION {eng.ord}
+{ duplicate$ "1" swap$ *
+ #-2 #1 substring$ "1" =
+ { bbl.th * }
+ { duplicate$ #-1 #1 substring$
+ duplicate$ "1" =
+ { pop$ bbl.st * }
+ { duplicate$ "2" =
+ { pop$ bbl.nd * }
+ { "3" =
+ { bbl.rd * }
+ { bbl.th * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+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"}
+
+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 * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ bbl.etal *
+ }
+ { bbl.and space.word * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+FUNCTION {format.names.ed}
+{ format.names }
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+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.in.editors}
+{ editor empty$
+ { "" }
+ { editor format.names.ed
+ }
+ if$
+}
+
+FUNCTION {format.note}
+{ note empty$
+ { "" }
+ { note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ { output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ *
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title
+ fa.isPersianLanguage
+ {"\faquote{" swap$ *}
+ {"\enquote{" swap$ *}
+ if$
+ non.stop
+ { ",} " * }
+ { "} " * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {end.quote.title}
+{ title empty$
+ 'skip$
+ { before.all 'output.state := }
+ if$
+}
+
+FUNCTION {format.full.names}
+{'s :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ { ", " * t * }
+ {
+ numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ bbl.etal *
+ }
+ { bbl.and space.word * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {author.editor.key.full}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.key.full}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.key.full}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.full
+ { type$ "proceedings" =
+ 'editor.key.full
+ 'author.key.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{
+ #0 'fa.isInLabel := %Initialize fa.isInLabel
+ newline$
+ fa.isPersianLanguage
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+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 {word.in}
+{ bbl.in
+ " " * }
+
+FUNCTION {format.date}
+{ year duplicate$ empty$
+ { "empty year in " cite$ * "; set to ????" * warning$
+ pop$ "????" }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ " (" swap$ * ")" *
+}
+
+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 space.word * 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 capitalize }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in space.word * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {is.num}
+{ chr.to.int$
+ duplicate$ "0" chr.to.int$ < not
+ swap$ "9" chr.to.int$ > not and
+}
+
+FUNCTION {extract.num}
+{ duplicate$ 't :=
+ "" 's :=
+ { t empty$ not }
+ { t #1 #1 substring$
+ t #2 global.max$ substring$ 't :=
+ duplicate$ is.num
+ { s swap$ * 's := }
+ { pop$ "" 't := }
+ if$
+ }
+ while$
+ s empty$
+ 'skip$
+ { pop$ s }
+ if$
+}
+
+FUNCTION {convert.edition}
+{ edition extract.num "l" change.case$ 's :=
+ s "first" = s "1" = or
+ { bbl.first 't := }
+ { s "second" = s "2" = or
+ { bbl.second 't := }
+ { s "third" = s "3" = or
+ { bbl.third 't := }
+ { s "fourth" = s "4" = or
+ { bbl.fourth 't := }
+ { s "fifth" = s "5" = or
+ { bbl.fifth 't := }
+ { s #1 #1 substring$ is.num
+ { s eng.ord 't := }
+ { edition 't := }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ t
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ {
+ fa.isPersianLanguage
+ {
+ bbl.edition edition *
+ }
+ {
+ output.state mid.sentence =
+ { convert.edition "l" change.case$ " " * bbl.edition * }
+ { convert.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.journal.pages}
+{ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ {
+ ", " *
+ pages n.dashify *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ { "" }
+ { type empty$
+ { bbl.chapter }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { word.in booktitle emphasize * }
+ { word.in booktitle emphasize *
+ ", " *
+ editor num.names$ #1 >
+ { bbl.editors }
+ { bbl.editor }
+ if$
+ * " " *
+ format.in.editors *
+ }
+ if$
+ }
+ 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}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ word.in
+ }
+ { bbl.volume volume tie.or.space.connect
+ bbl.of space.word *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.publisher}
+{ publisher empty$
+ { "empty publisher in " cite$ * warning$ }
+ 'skip$
+ if$
+ ""
+ address empty$ publisher empty$ and
+ 'skip$
+ {
+ address empty$
+ 'skip$
+ { address * }
+ if$
+ publisher empty$
+ 'skip$
+ { address empty$
+ 'skip$
+ { ": " * }
+ if$
+ publisher *
+ }
+ if$
+ }
+ if$
+ output
+}
+
+STRINGS {oldname}
+
+FUNCTION {name.or.dash}
+{ 's :=
+ oldname empty$
+ { s 'oldname := s }
+ { s oldname =
+ { "---" }
+ { s 'oldname := s }
+ if$
+ }
+ if$
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { journal
+ emphasize
+ "journal" output.check
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.journal.pages
+ format.note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ fa.isPersianLanguage
+ {
+ format.authors output.nonnull
+ format.date "year" output.check
+ date.block
+ %new.block
+ format.btitle
+ "title" output.check
+ %format.edition output
+ new.block
+ format.translators output
+ format.editors "author and editor" output.check%output
+ }
+ {
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ name.or.dash
+ }
+ { format.authors output.nonnull
+ name.or.dash
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ }
+if$
+
+ crossref missing$
+ { format.bvolume output
+ format.number.series output
+ format.publisher
+ }
+ {
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ howpublished output
+ address output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ name.or.dash
+ }
+ { format.authors output.nonnull
+ name.or.dash
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ crossref missing$
+ {
+ format.publisher
+ format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ format.number.series output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.pages "pages" output.check
+ format.note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.publisher
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ format.edition output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.pages "pages" output.check
+ format.note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ publisher empty$
+ { organization output
+ address output
+ }
+ { organization output
+ format.publisher
+ }
+ if$
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization output
+ address output
+ format.edition output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title output
+ end.quote.title
+ howpublished output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ format.editors output
+ editor format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address output
+ organization output
+ publisher output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ end.quote.title
+ format.note "note" output.check
+ fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+FUNCTION {format.lab.names}
+{
+ 's :=
+ authorfa empty$
+ {
+ %skip$
+ #0 'fa.isInLabel :=
+ }
+ {% If authorfa exists
+ authorfa 's :=
+ #1 'fa.isInLabel :=
+ }
+ if$
+
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$
+ bbl.etal *
+ }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ bbl.etal *
+ }
+ { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
+ * }
+ if$
+ }
+ if$
+ }
+ if$
+ #0 'fa.isInLabel := %reset fa.isInLabel
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.label}
+{ editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.label
+ 'author.key.label
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ { pop$ "????" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}"
+ format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { t sortify * }
+ if$
+ }
+ { 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 {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ label sortify
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.sort
+ 'author.sort
+ if$
+ }
+ if$
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { last.label next.extra }
+
+INTEGERS { last.extra.num number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT
+
+FUNCTION {begin.bib}
+{
+ "% Generated by asa-fa.bst, version: " bst.file.version * " (" * bst.file.date * "), for XePersian" *
+ write$ newline$
+ "% Author: " bst.file.authors *
+ write$ newline$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\newcommand{\faquote}[1]{''#1``}"
+ write$ newline$
+ "\newcommand{\enquote}[1]{``#1''}"
+ write$ newline$
+ "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi"
+ write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
+%% End of file `asa-fa.bst'.
diff --git a/biblio/bibtex/contrib/persian-bib/bibtex-example.tex b/biblio/bibtex/contrib/persian-bib/bibtex-example.tex
new file mode 100644
index 0000000000..c09c93b229
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/bibtex-example.tex
@@ -0,0 +1,30 @@
+\documentclass[11pt,a4paper]{article}
+
+% استفاده از بسته‌ی زیر الزامی نیست ولی با استفاده از آن می‌توانید لینکهای رنگی به مراجع خود داشته باشید.
+\usepackage[colorlinks,citecolor=blue]{hyperref}
+
+\usepackage{xepersian}
+\settextfont{XB Zar}
+\setlatintextfont[Scale=1]{Linux Libertine}
+
+\title{نمونه خروجی با استیل فارسی \lr{acm-fa} برای \lr{BibTeX} در زی‌پرشین}
+\author{محمود امین‌طوسی}\date{}
+\begin{document}
+\maketitle
+
+مرجع \cite{Omidali82phdThesis} یک نمونه پروژه دکترا و مرجع \cite{Vahedi87} یک نمونه مقاله مجله فارسی است.
+مرجع \cite{Amintoosi87afzayesh} یک نمونه مقاله کنفرانس فارسی و
+مرجع \cite{Pedram80osool} یک نمونه کتاب فارسی با ذکر مترجمان و ویراستاران فارسی است. مرجع \cite{Khalighi07MscThesis} یک نمونه پروژه کارشناسی ارشد انگلیسی و
+\cite{Khalighi87xepersian} هم یک نمونه متفرقه می‌باشند.
+
+مرجع \cite{Gonzalez02book} یک نمونه کتاب لاتین است که از آنجا که دارای فیلد \lr{authorfa} است، نام نویسندگان آن در استیلهای \lr{asa-fa}، \lr{plainnat-fa} و \lr{chicago-fa} به فارسی دیده می‌شود. مرجع \cite{Baker02limits} مقاله انگلیسی است که معادل فارسی نام نویسندگان آن ذکر نشده بوده است.
+
+
+{\small
+% در اینجا می‌توانید سبک‌های مختلف را گذاشته و تفاوت خروجی را ببینید
+\bibliographystyle{acm-fa}
+
+\bibliography{MyReferences}
+}
+
+\end{document}
diff --git a/biblio/bibtex/contrib/persian-bib/chicago-fa.bst b/biblio/bibtex/contrib/persian-bib/chicago-fa.bst
new file mode 100644
index 0000000000..211da261dc
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/chicago-fa.bst
@@ -0,0 +1,2223 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "chicago-fa", Persian (farsi) version of chicago.bst
+%%
+%% by: Mahmood Amintoosi, m.amintoosi@gmail.com, www.parsilatex.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Original Copyright
+
+%%% ====================================================================
+%%% @BibTeX-style-file{
+%%% author = "Glenn Paulley",
+%%% version = "4",
+%%% date = "28 August 1992",
+%%% time = "10:23:39 199",
+%%% filename = "chicago.bst",
+%%% address = "Data Structuring Group
+%%% Department of Computer Science
+%%% University of Waterloo
+%%% Waterloo, Ontario, Canada
+%%% N2L 3G1",
+%%% telephone = "(519) 885-1211",
+%%% FAX = "(519) 885-1208",
+%%% checksum = "26323 1654 5143 37417",
+%%% email = "gnpaulle@bluebox.uwaterloo.ca",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "",
+%%% supported = "yes",
+%%% abstract = "A BibTeX bibliography style that follows the
+%%% `B' reference style of the 13th Edition of
+%%% the Chicago Manual of Style. A detailed
+%%% feature list is given below.",
+%%% docstring = "The checksum field above contains a CRC-16
+%%% checksum as the first value, followed by the
+%%% equivalent of the standard UNIX wc (word
+%%% count) utility output of lines, words, and
+%%% characters. This is produced by Robert
+%%% Solovay's checksum utility.",
+%%% }
+%%% ====================================================================
+%
+% "Chicago" BibTeX style, chicago.bst
+% ===================================
+%
+% BibTeX `chicago' style file for BibTeX version 0.99c, LaTeX version 2.09
+% Place it in a file called chicago.bst in the BibTeX search path.
+% You need to include chicago.sty as a \documentstyle option.
+% (Placing it in the same directory as the LaTeX document should also work.)
+% This "chicago" style is based on newapa.bst (American Psych. Assoc.)
+% found at ymir.claremont.edu.
+%
+% Citation format: (author-last-name year)
+% (author-last-name and author-last-name year)
+% (author-last-name, author-last-name, and author-last-name year)
+% (author-last-name et al. year)
+% (author-last-name)
+% author-last-name (year)
+% (author-last-name and author-last-name)
+% (author-last-name et al.)
+% (year) or (year,year)
+% year or year,year
+%
+% Reference list ordering: alphabetical by author or whatever passes
+% for author in the absence of one.
+%
+% This BibTeX style has support for abbreviated author lists and for
+% year-only citations. This is done by having the citations
+% actually look like
+%
+% \citeauthoryear{full-author-info}{abbrev-author-info}{year}
+%
+% The LaTeX style has to have the following (or similar)
+%
+% \let\@internalcite\cite
+% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
+% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
+% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
+% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
+% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
+%
+% These TeX macro definitions are found in chicago.sty. Additional
+% commands to manipulate different components of a citation can be defined
+% so that, for example, you can list author's names without parentheses
+% if using a citation as a noun or object in a sentence.
+%
+% This file was originally copied from newapa.bst at ymir.claremont.edu.
+%
+% Features of chicago.bst:
+% =======================
+%
+% - full names used in citations, but abbreviated citations are available
+% (see above)
+% - if an entry has a "month", then the month and year are also printed
+% as part of that bibitem.
+% - all conjunctions use "and" instead of "\&"
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries.
+% - book, inbook, and manual use "location: publisher" (or organization)
+% for address and publisher. All other types list publishers separately.
+% - "pp." are used to identify page numbers for all entry types except
+% articles.
+% - organization is used as a citation label if neither author nor editor
+% is present (for manuals).
+% - "et al." is used for long author and editor lists, or when "others"
+% is used.
+%
+% Modifications and bug fixes from newapa.bst:
+% ===========================================
+%
+% - added month, year to bib entries if month is present
+% - fixed bug with In proceedings, added necessary comma after title
+% - all conjunctions changed to "and" from "\&"
+% - fixed bug with author labels in my.full.label: "et al." now is
+% generated when "others" is an author name
+% - major modification from Chicago Manual of Style (13th ed.) is that
+% only the first author in a reference appears last name first-
+% additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+% article entries. Unnecessary (IMHO) "()" around page numbers
+% were removed, and page numbers now don't end with a period.
+% - created chicago.sty for use with this bibstyle (required).
+% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
+% number, and /or pages. Renamed to format.jour.vol.
+% - fixed bug in formatting booktitles: additional period an error if
+% book has a volume.
+% - fixed bug: editors usually given redundant period before next clause
+% (format.editors.dot) removed.
+% - added label support for organizations, if both author and editor
+% are missing (from alpha.bst). If organization is too long, then
+% the key field is used for abbreviated citations.
+% - In proceedings or books of several volumes, no comma was written
+% between the "Volume x" and the page numbers (this was intentional
+% in newapa.bst). Fixed.
+% - Some journals may not have volumes/numbers, only month/year (eg.
+% IEEE Computer). Fixed bug in article style that assumed volume/number
+% was always present.
+%
+% Original documentation for newapa.sty:
+% =====================================
+%
+% This version was made by modifying the master file made by
+% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
+% style of Peter F. Patel-Schneider.
+%
+% 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 'newapa.bst'.
+% There are undoubtably bugs in this style. If you make bug fixes,
+% improvements, etc. please let me know. My e-mail address is:
+% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
+%
+% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+
+ENTRY
+ { address
+ author
+ authorfa
+ booktitle
+ chapter
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ translator
+ type
+ volume
+ year
+ }
+ {}
+ { label.year extra.label sort.year sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block fa.isInLabel}
+
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+FUNCTION{bst.file.authors} {"M.Amintoosi" }
+
+FUNCTION {banner.message}
+{ is.print.banners.to.terminal
+ { "-- chicago-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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+fa.isInLabel
+{" و "}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" eds. "}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" ed." }
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { " Volume "}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { " Number " }
+if$
+}
+
+% FUNCTION {bbl.nr}
+% {
+% fa.isPersianLanguage
+ % {" شماره "}
+ % { " no." }
+% if$
+% }
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " In " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { " pp." }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" ص." }
+ { " p." }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {" chap." }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { " Tech. Rep." }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " Ph.D. thesis" }
+if$
+}
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+% Added by M.Amintoosi
+FUNCTION {bbl.etal}
+{
+fa.isInLabel
+{" و دیگران"}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% End of Persian Functions %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t u }
+
+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
+}
+
+% Use a colon to separate output. Used only for address/publisher
+% combination in book/inbook types, address/institution for manuals,
+% and organization:publisher for proceedings (inproceedings).
+%
+FUNCTION {output.nonnull.colon}
+{ '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.colon}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+
+FUNCTION {output.check.colon}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull.colon
+ if$
+}
+
+FUNCTION {output.year.check}
+{ year empty$
+ { "empty year in " cite$ * warning$ }
+ { write$
+ " (" year * extra.label *
+ month empty$
+ { ")" * }
+ { ", " * month * ")" * }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+}
+
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ {newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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$
+}
+
+%
+% Emphasize the top string on the stack.
+%
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "}" * }
+ if$
+}
+
+
+%
+% Emphasize the top string on the stack, but add a trailing space.
+%
+FUNCTION {emphasize.space}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "{\em " swap$ * "\/}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+%
+% Format bibliographical entries with the first author last name first,
+% and subsequent authors with initials followed by last name.
+% All names are formatted in this routine.
+%
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 =
+ {
+ fa.isPersianLanguage
+ {s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := }
+ {s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := }
+ if$
+ }
+ {
+ fa.isPersianLanguage
+ {s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := }
+ {s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := }
+ if$
+ }
+ if$
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { bbl.etal * }
+ { bbl.and * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {my.full.label}
+{ 's :=
+
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+ { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { bbl.etal * }
+ { bbl.and * t * } % from Chicago Manual of Style
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+
+}
+
+FUNCTION {format.names.fml}
+%
+% Format names in "familiar" format, with first initial followed by
+% last name. Like format.names, ALL names are formatted.
+%
+{ 's :=
+ #1 'nameptr := % nameptr = 1;
+ s num.names$ 'numnames := % numnames = num.name$(s);
+ 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 * }
+% { " \& " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr := % nameptr += 1;
+ namesleft #1 - 'namesleft := % namesleft =- 1;
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names }
+ if$
+}
+
+
+
+FUNCTION {format.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+%
+% Format editor names for use in the "in" types: inbook, incollection,
+% inproceedings: first initial, then last names. When editors are the
+% LABEL for an entry, then format.editor is used which lists editors
+% by last name first.
+%
+FUNCTION {format.editors.fml}
+{ editor empty$
+ { "" }
+ {
+ fa.isPersianLanguage
+ {
+ editor num.names$ #1 >
+ {bbl.editors editor format.names.fml * }
+ {bbl.editor editor format.names.fml * }
+ if$
+ }
+ { editor format.names.fml
+ editor num.names$ #1 >
+ { " (Eds.)" * }
+ { " (Ed.)" * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+
+%
+% Format editor names for use in labels, last names first.
+%
+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
+ {
+ " ترجمه‌ی " translator format.names *
+ }
+ {
+ translator format.names
+ ", translated by: " *
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+% Note that the APA style requres case changes
+% in article titles. The following does not
+% change cases. If you perfer it, uncomment the
+% following and comment out the above.
+
+%FUNCTION {format.title}
+%{ title empty$
+% { "" }
+% { title }
+% 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.btitle}
+{ edition empty$
+ { title emphasize }
+ { title empty$
+ { title emphasize }
+ { volume empty$ % gnp - check for volume, then don't need period
+ {
+ fa.isPersianLanguage
+ { "{\em " title * "\/} (" * bbl.edition * edition * ")" * "." * }
+ { "{\em " title * "\/} (" * edition * bbl.edition * ")" * "." * }
+ if$
+ }
+ {
+ fa.isPersianLanguage
+ { "{\em " title * "\/} (" * bbl.edition * edition * ")" * }
+ { "{\em " title * "\/} (" * edition * bbl.edition * ")" * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.emphasize.booktitle}
+{ edition empty$
+ { booktitle emphasize }
+ { booktitle empty$
+ { booktitle emphasize }
+ { volume empty$ % gnp - extra period an error if book has a volume
+ {
+ fa.isPersianLanguage
+ { "{\em " booktitle * "\/} (" * bbl.edition * edition * ")" * "." * }
+ { "{\em " booktitle * "\/} (" * edition * bbl.edition * ")" * "." * }
+ if$
+ }
+ {
+ fa.isPersianLanguage
+ { "{\em " booktitle * "\/} (" * bbl.edition * edition * ")" * }
+ { "{\em " booktitle * "\/} (" * edition * bbl.edition * ")" * }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+
+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 % gnp - changed to mixed case
+ 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 } % gnp - changed to mixed case always
+ { bbl.number }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { bbl.in * series * }
+ 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 } % gnp - removed ()
+ { bbl.page pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+% By Young (and Spencer)
+% GNP - fixed bugs with missing volume, number, and/or pages
+%
+% Format journal, volume, number, pages for article types.
+%
+FUNCTION {format.jour.vol}
+
+{ journal empty$
+ { "no journal in " cite$ * warning$
+ "" }
+ { journal emphasize.space }
+ if$
+ number empty$
+ { volume empty$
+ { "no number and no volume in " cite$ * warning$
+
+ "" * }
+ { "~{\em " * Volume * "}" * }
+ if$
+ }
+ { volume empty$
+ {"no volume for " cite$ * warning$
+ "~(" * number * ")" * }
+ { "~" *
+ volume %emphasize.space
+ "(" * number * ")" * * }
+ if$
+ }
+ if$
+ pages empty$
+
+ {"page numbers missing in " cite$ * warning$
+ "" * } % gnp - place a null string on the stack for output
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ", " * pages n.dashify * } % gnp - removed pp. for articles
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+
+ { bbl.chapter } % gnp - changed to mixed case
+ { type "t" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+
+ {"page numbers missing in " cite$ * warning$} % gnp - added check
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+
+ { bbl.in format.emphasize.booktitle * }
+ { bbl.in format.editors.fml * ", " * format.emphasize.booktitle * }
+ if$
+ }
+ 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}
+{ "See"
+ "\citeN{" * 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 % gnp - changed to mixed case
+
+ 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$
+ " \citeN{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ "See"
+ " \citeN{" * crossref * "}" *
+}
+
+% format.lab.names:
+%
+% determines "short" names for the abbreviated author information.
+% "Long" labels are created in calc.label, using the routine my.full.label
+% to format author and editor fields.
+%
+% There are 4 cases for labels. (n=3 in the example)
+% a) one author Foo
+% b) one to n Foo, Bar and Baz
+% c) use of "and others" Foo, Bar et al.
+% d) more than n Foo et al.
+%
+FUNCTION {format.lab.names}
+{ 's :=
+ authorfa empty$
+ {
+ %skip$
+ #0 'fa.isInLabel :=
+ }
+ {% If authorfa exists
+ authorfa 's :=
+ #1 'fa.isInLabel :=
+ }
+ if$
+
+ s num.names$ 'numnames :=
+ numnames #2 > % change number to number of others allowed before
+ % forcing "et al".
+ { s #1 "{vv~}{ll}" format.name$ bbl.etal * }
+ {
+ numnames #1 - 'namesleft :=
+ #2 'nameptr :=
+ s #1 "{vv~}{ll}" format.name$
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { bbl.etal * }
+ { bbl.and * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ { ", " * s nameptr "{vv~}{ll}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ }
+ if$
+ #0 'fa.isInLabel := %reset fa.isInLabel
+}
+
+FUNCTION {author.key.label}
+{
+ author empty$
+ { key empty$
+ {
+ "no key, author in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+%
+% % Push the two variables onto the stack
+% bbl.etal
+% bbl.and
+% authorfa empty$
+% {
+% fa.isPersianLanguage
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% }
+% {
+% bbl.etal 'bbl.etal :=
+% " and " 'bbl.and :=
+% }
+% if$
+%
+% author empty$
+% { key empty$
+% {
+% "no key, author in " cite$ * warning$
+% cite$ #1 #3 substring$ }
+% 'key
+% if$
+% }
+% { author format.lab.names }
+% if$
+% }
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% authorfa format.lab.names
+% }
+% if$
+%
+% % Pop the function result and store it on s
+% 's :=
+% % Push the two variables onto the stack
+% 'bbl.and :=
+% 'bbl.etal :=
+% % push the result into stack
+% s
+}
+
+FUNCTION {editor.key.label}
+{
+ editor empty$
+ { key empty$
+ { "no key, editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+% % Push the two variables onto the stack
+% bbl.etal
+% bbl.and
+% authorfa empty$
+% {
+% fa.isPersianLanguage
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% }
+% {
+% bbl.etal 'bbl.etal :=
+% " and " 'bbl.and :=
+% }
+% if$
+%
+%
+% editor empty$
+% { key empty$
+% { "no key, editor in " cite$ * warning$
+% cite$ #1 #3 substring$ }
+% 'key
+% if$
+% }
+% { editor format.lab.names }
+% if$
+%
+% }
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% authorfa format.lab.names
+% }
+% if$
+%
+% % Pop the function result and store it on s
+% 's :=
+% % Push the two variables onto the stack
+% 'bbl.and :=
+% 'bbl.etal :=
+% % push the result into stack
+% s
+}
+
+FUNCTION {author.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if author is null.
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "no key, author or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+
+ { author format.lab.names }
+ if$
+}
+
+
+FUNCTION {editor.key.organization.label}
+%
+% added - gnp. Provide label formatting by organization if editor is null.
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "no key, editor or organization in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { organization }
+ if$
+ }
+
+ { editor format.lab.names }
+ if$
+
+}
+
+FUNCTION {author.editor.key.label}
+{
+ author empty$
+ { editor empty$
+ { key empty$
+ { "no key, author, or editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+
+%
+% % Push the two variables onto the stack
+% bbl.etal
+% bbl.and
+% authorfa empty$
+% {
+% fa.isPersianLanguage
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% }
+% {
+% bbl.etal 'bbl.etal :=
+% " and " 'bbl.and :=
+% }
+% if$
+%
+% author empty$
+% { editor empty$
+% { key empty$
+% { "no key, author, or editor in " cite$ * warning$
+% cite$ #1 #3 substring$ }
+% 'key
+% if$
+% }
+% { editor format.lab.names }
+% if$
+% }
+% { author format.lab.names }
+% if$
+%
+% }
+% {
+% " و دیگران" 'bbl.etal :=
+% " و " 'bbl.and :=
+% authorfa format.lab.names
+% }
+% if$
+%
+% % Pop the function result and store it on s
+% 's :=
+% % Push the two variables onto the stack
+% 'bbl.and :=
+% 'bbl.etal :=
+% % push the result into stack
+% s
+}
+
+FUNCTION {calc.label}
+%
+% Changed - GNP. See also author.organization.sort, editor.organization.sort
+% Form label for BibTeX entry. The classification of which fields are used
+% for which type of entry (book, inbook, etc.) are taken from alpha.bst.
+% The change here from newapa is to also include organization as a
+% citation label if author or editor is missing.
+%
+{
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+
+ author empty$ % generate the full label citation information.
+ { editor empty$
+ { organization empty$
+ { "no author, editor, or organization in " cite$ * warning$
+ "??" }
+ { organization }
+ if$
+ }
+ { editor my.full.label }
+ if$
+ }
+ { author my.full.label }
+ if$
+
+% leave label on the stack, to be popped when required.
+
+ "}{" * swap$ * "}{" *
+% year field.or.null purify$ #-1 #4 substring$ *
+%
+% save the year for sort processing afterwards (adding a, b, c, etc.)
+%
+ year field.or.null purify$ #-1 #4 substring$
+ 'label.year :=
+}
+
+FUNCTION {output.bibitem}
+{
+ #0 'fa.isInLabel := %Initialize fa.isInLabel
+ newline$
+ fa.isPersianLanguage
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+
+ "\bibitem[\protect\citeauthoryear{" write$
+ calc.label write$
+ sort.year write$
+ "}]{" write$
+
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ crossref missing$
+ { format.jour.vol output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+ fa.isPersianLanguage
+ {
+ format.authors output.nonnull
+ output.year.check
+ new.block
+ format.btitle
+ "title" output.check
+ %format.edition output
+ new.block
+ format.translators output
+ format.editors "author and editor" output.check%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$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ }
+ if$
+
+
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ address output
+ publisher "publisher" output.check.colon
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+
+ new.block
+ howpublished output
+ address 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$
+ output.year.check % added
+ 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
+
+ address output
+ publisher
+ "publisher" output.check.colon
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ 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 % gnp - was special.output.nonnull
+% left out comma before page numbers
+ new.sentence
+ address output
+ publisher "publisher" output.check.colon
+
+ }
+ { 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
+ author format.key output % added
+ output.year.check % added
+ 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
+ address output
+ format.pages output
+ new.sentence
+ organization output
+ publisher output.colon
+ }
+ { 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$
+ { editor empty$
+ { organization "organization" output.check
+ organization format.key output } % if all else fails, use key
+ { format.editors "author and editor" output.check }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+
+ organization address new.block.checkb
+
+% Reversed the order of "address" and "organization", added the ":".
+ address output
+ organization "organization" output.check.colon
+% address output
+% ":" output
+% organization output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد" format.thesis.type output.nonnull}
+ {" Master's thesis" format.thesis.type output.nonnull}
+ if$
+ school "school" output.check
+ address output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output % added
+ output.year.check % added
+ title howpublished new.block.checkb
+ format.title output
+
+ new.block
+ howpublished output
+
+ new.block
+ note output
+ fin.entry
+
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.btitle
+ "title" output.check
+ new.block
+ fa.isPersianLanguage
+ {" پایان‌نامه دکترا" format.thesis.type output.nonnull}
+ {" Ph.D. disseration " format.thesis.type output.nonnull}
+ if$
+ school "school" output.check
+ address output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+
+ { organization output
+ organization format.key output } % gnp - changed from author format.key
+ { format.editors output.nonnull }
+ if$
+% author format.key output % gnp - removed (should be either
+% editor or organization
+ output.year.check % added (newapa)
+ new.block
+ format.btitle
+ "title" output.check
+ format.bvolume output
+ format.number.series output
+ address output
+ new.sentence
+ organization output
+ publisher output.colon
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution
+ "institution" output.check
+ address output
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors
+ "author" output.check
+ author format.key output % added
+ output.year.check % added
+ new.block
+ format.title
+ "title" output.check
+ new.block
+ note "note" output.check
+ 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 {ai} {"Artificial Intelligence"}
+
+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}
+
+
+
+{ purify$
+ "l" change.case$
+
+
+}
+
+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{ }}{ f{ }}{ 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 {editor.sort}
+{ editor empty$
+ { key empty$
+ { "to sort, need editor or key in " cite$ * warning$
+
+ ""
+ }
+ { key sortify }
+ if$
+ }
+
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { "missing author in " cite$ * warning$
+ 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}
+%
+% added - GNP. Stack author or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+
+
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+%
+% added - GNP. Stack editor or organization for sorting (from alpha.bst).
+% Unlike alpha.bst, we need entire names, not abbreviations
+%
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+
+
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { organization sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+
+%
+% Presort creates the bibentry's label via a call to calc.label, and then
+% sorts the entries based on entry type. Chicago.bst adds support for
+% including organizations as the sort key; the following is stolen from
+% alpha.bst.
+%
+{ calc.label sortify % recalculate bibitem label
+ year field.or.null purify$ #-1 #4 substring$ * % add year
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+
+ #1 entry.max$ substring$ % added for newapa
+ 'sort.label := % added for newapa
+ sort.label % added for newapa
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT % by label, year, author/editor, title
+
+STRINGS { last.label next.extra }
+
+
+INTEGERS { last.extra.num }
+
+FUNCTION {initialize.extra.label.stuff}
+{ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+%
+% Pass through all entries, comparing current entry to last one.
+% Need to concatenate year to the stack (done by calc.label) to determine
+% if two entries are the same (see presort)
+%
+{ last.label
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ = % are they equal?
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+ #1 entry.max$ substring$ 'last.label := % assign to last.label
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label.year extra.label * 'sort.year :=
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT % by sort.label, year, title --- giving final bib. order.
+
+FUNCTION {begin.bib}
+{
+ "% Generated by chicago-fa.bst, version: " bst.file.version * " (" * bst.file.date * "), for XePersian" *
+ write$ newline$
+ "% Author: " bst.file.authors *
+ write$ newline$
+% "\providecommand{\noopsort}[1]{}"
+% write$ newline$
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{}" write$ newline$
+}
+
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
diff --git a/biblio/bibtex/contrib/persian-bib/cp1256fa.csf b/biblio/bibtex/contrib/persian-bib/cp1256fa.csf
new file mode 100644
index 0000000000..56a9dce97a
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/cp1256fa.csf
@@ -0,0 +1,262 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% FILE: $RCSfile: cp1256fa.csf,v $
+%%
+%% Date: 2015/05/09
+%% Author:-) Mahmood Amintoosi, m.amintoosi@gmail.com
+%%
+%% CHARACTER SET: Farsi (Persian) (CP 1256)
+%%
+%% SORTING ORDER: Farsi
+%%
+%% WARNING
+%%
+%% This is a BibTeX Codepage and Sort definition file (CSF). It is
+%% used to define the 8-bit character set used by BibTeX and the
+%% order in which those characters should be sorted. The file
+%% format is documented below this header section.
+%%
+%% This file will only work with the 8-bit implementation of BibTeX
+%% written by Niel Kempson and Alejandro Aguilar-Sierra. It is
+%% available by anonymous FTP from these Comprehensive TeX Archive
+%% Network (CTAN) sites:
+%%
+%% http://mirror.ctan.org/biblio/bibtex/8-bit
+%%
+%% CHANGE LOG
+%%
+%% $Log: cp1256fa.csf,v $
+%% Initial Version 2009/12/17
+%%
+%% Version 0.9 2015/05/09
+%% Reorder همزه (Move Up), adding ة and separating آ from ا
+%% http://www.persianacademy.ir/UserFiles/File/D_Final.zip
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% FILE FORMAT
+%%
+%% The codepage and sorting order (CS) file defines how BibTeX will treat an
+%% 8-bit character set, specifically which characters are to be treated as
+%% letters, the upper/lower case relationships between characters, and the
+%% sorting order of characters.
+%%
+%% The CS file may contain a number of sections, each presented in the
+%% form of a TeX macro:
+%%
+%% \section-name{
+%% <section definitions>
+%% }
+%%
+%% Four sections are currently supported: \lowupcase, \lowercase, \uppercase
+%% and \order. The syntax of the four supported sections is summarised below.
+%%
+%% 8-bit characters may be entered naturally, but to avoid problems with
+%% character set translation or corruption, they can also be entered using
+%% the TeX-style portable notation for character codes, i.e. ^^XX, where XX
+%% is the hexadecimal value ofthe character code.
+%%
+%% Reading of the sections ends when the first '}' character is reached, so
+%% '}' can't be included in a section. You can't use ^^7d either.
+%%
+%% The percent sign ('%') is used to introduce a trailing comment - it and
+%% all remaining characters on a line are ignored. ^^25 has the same effect.
+%%
+%%
+%% \lowupcase section
+%%
+%% The \lowupcase section of the CS file is used to define the lower
+%% /upper and upper/lower case relationship of pairs of specified
+%% characters. It is only used if the relationship is symmetrical - use
+%% \lowercase or \upcase if it isn't.
+%%
+%% The syntax of the \lowupcase section is:
+%%
+%% \lowupcase{
+%% <LC-1> <UC-1> % Comment begins with a percent sign
+%% <LC-2> <UC-2>
+%% ...
+%% <LC-N> <UC-N>
+%% }
+%%
+%% Each <LC-n> <UC-n> pair of characters defines that the upper case
+%% equivalent of <LC-n> is <UC-n> *and* the lower case equivalent of
+%% <UC-n> is <LC-n>.
+%%
+%% You cannot redefine the lower or upper case equivalent of an ASCII
+%% character (code < 128), so all instances of <LC-n> and <UC-n>
+%% (i.e. both sides of the relationship) must have codes > 127.
+%%
+%%
+%% \lowercase section
+%%
+%% The \lowercase section of the CS file is used to define the lower case
+%% equivalent of specified characters. It should normally only be used
+%% if the relationship isn't symmetrical - use \lowupcase if it is.
+%%
+%% The syntax of the \lowercase section is:
+%%
+%% \lowercase{
+%% <UC-1> <LC-1> % Comment begins with a percent sign
+%% <UC-2> <LC-2>
+%% ...
+%% <UC-N> <LC-N>
+%% }
+%%
+%% Each <LC-n> <UC-n> pair of characters defines that the lower case
+%% equivalent of <UC-n> is <LC-n>.
+%%
+%% You cannot redefine the lower case equivalent of an ASCII character
+%% (code < 128), so all instances of <UC-n> (i.e. the left hand side
+%% of the relationship) must have codes > 127.
+%%
+%%
+%% \uppercase section
+%%
+%% The \uppercase section of the CS file is used to define the upper case
+%% equivalent of specified characters. It should normally only be used
+%% if the relationship isn't symmetrical - use \lowupcase if it is.
+%%
+%% The syntax of the \uppercase section is:
+%%
+%% \uppercase{
+%% <LC-1> <UC-1> % Comment begins with a percent sign
+%% <LC-2> <UC-2>
+%% ...
+%% <LC-N> <UC-N>
+%% }
+%%
+%% Each <LC-n> <UC-n> pair of characters defines that the upper case
+%% case equivalent of <LC-n> is <UC-n>.
+%%
+%% You cannot redefine the upper case equivalent of an ASCII character
+%% (code < 128), so all instances of <LC-n> (i.e. the left hand side
+%% of the relationship) must have codes > 127.
+%%
+%%
+%% \order section
+%%
+%% The \order section of the CS file is used to define the order in which
+%% characters are sorted.
+%%
+%% The syntax of the \order section is:
+%%
+%% \order{
+%% <char-1> % Comment begins with a percent sign
+%% <char-2> <char-3> % whitespace between the chars
+%% <char-4> - <char-5> % a hyphen between the chars
+%% <char-4> _ <char-5> % an underscore between the chars
+%% ...
+%% <char-n>
+%% }
+%%
+%% All characters on the same line are given the same sorting weight.
+%%
+%% The construct <char-1> <underscore> <char-2> is used to denote that
+%% all characters in the range <char-1> to <char-2> should be given the
+%% same sorting weight. For example, "A _ Z" would cause all ASCII
+%% upper case alphabetical characters to have the same sorting weight
+%% and would be equivalent to placing all 26 characters on the same line.
+%%
+%% The construct <char-1> <hyphen> <char-2> is used to denote that all
+%% characters in the range <char-1> to <char-2> should be given an
+%% ascending set of sorting weights, starting with <char-1> and ending
+%% with <char-2>. For example, "A - Z" would cause all upper case ASCII
+%% alphabetical characters to be sorted in ascending order and would be
+%% equivalent to placing 'A' on the first line, 'B' on the second,
+%% through to 'Z' on the 26th line.
+%%
+%% The characters at the beginning of the order section are given a lower
+%% sorting weight than characters occuring later. When sorting
+%% alphabetically, characters with the lowest weight come first.
+%%
+%% All characters not in the \order section (including ASCII characters)
+%% are given the same very high sorting weight to ensure that they come
+%% last when sorting alphabetically.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%
+%% CHARACTER SET
+%%
+
+
+
+%%
+%% SORTING ORDER
+%%
+%%
+\order{
+۰-۹
+ أ إ ؤ ئ ء
+ آ
+ ا
+ ب
+ پ
+ ت ة
+ ث
+ ج
+ چ
+ ح
+ خ
+ د
+ ذ
+ ر
+ ز
+ ژ
+ س
+ ش
+ ص
+ ض
+ ط
+ ظ
+ ع
+ غ
+ ف
+ ق
+ ک ك
+ گ
+ ل
+ م
+ ن
+ و
+ ه
+ ی ي
+ 0-9
+ A a
+ B b
+ C c
+ D d
+ E e
+ F f
+ G g
+ H h
+ I i
+ J j
+ K k
+ L l
+ M m
+ N n
+ O o
+ P p
+ Q q
+ R r
+ S s
+ T t
+ U u
+ V v
+ W w
+ X x
+ Y y
+ Z z
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% END OF FILE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/biblio/bibtex/contrib/persian-bib/gen_pdf.pl b/biblio/bibtex/contrib/persian-bib/gen_pdf.pl
new file mode 100644
index 0000000000..5e2e56a944
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/gen_pdf.pl
@@ -0,0 +1,55 @@
+##########################################################
+# Author: Mahmood Amintoosi #
+# Date: 10 Feb 2011 #
+# Version: .10 #
+# Application: Produce pdf files of Persian-bib styles #
+##########################################################
+
+use File::Copy;
+
+open(INFILE,"bibtex-example.tex");
+
+@styleList = ("acm-fa","plain-fa","unsrt-fa","ieeetr-fa","asa-fa","chicago-fa","plainnat-fa");
+@natbibStyles = ("asa-fa","chicago-fa","plainnat-fa");
+
+@lines = <INFILE>;
+foreach $style (@styleList)
+{
+ $fileName = $style.".pdf";
+ $tmpFile = "tmp";
+ open(OUTFILE,">".$tmpFile.".tex");
+ print $fileName;
+ foreach $line(@lines)
+ {
+
+ $a = $line;
+ #Checking wether natbib package is required or not
+ $natbibRequired = 0;
+ foreach $natbibStyle(@natbibStyles)
+ {
+ if($style eq $natbibStyle)
+ {
+ $natbibRequired = 1;
+ #last;
+ }
+ }
+# print $natbibRequired;
+ if ($natbibRequired==1 && $a =~ /usepackage{xepersian}/)
+ {
+ print OUTFILE "\\usepackage{natbib}\n";
+ }
+ $a =~ s/acm-fa/$style/;
+ print OUTFILE $a;
+ }
+
+ close (OUTFILE);
+ system("xelatex",$tmpFile);
+ system("bibtex8","-W","-c","cp1256fa",$tmpFile);
+ system("xelatex",$tmpFile);
+ system("xelatex",$tmpFile);
+ copy($tmpFile.".pdf",$fileName) or die "Copy failed: $!";
+ unlink <tmp.*>;
+ #seek(INFILE,0,SEEK_SET);
+ }
+ close (INFILE);
+
diff --git a/biblio/bibtex/contrib/persian-bib/ieeetr-fa.bst b/biblio/bibtex/contrib/persian-bib/ieeetr-fa.bst
new file mode 100644
index 0000000000..bbb6efa18d
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/ieeetr-fa.bst
@@ -0,0 +1,1257 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "ieeetr-fa", Persian (farsi) version of ieeetr.bst
+%%
+%% by: Mahmood Amintoosi and Mostafa Vahedi, m.amintoosi@gmail.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" eds. "}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { " vol."}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.nr}
+{
+fa.isPersianLanguage
+ {" شماره "}
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { " pp." }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" ص." }
+ { " p." }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {" chap." }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { " Tech. Rep." }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " Ph.D. thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\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$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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 "{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" =
+{ " {\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 ieeetr-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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
diff --git a/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR-beamer.bst b/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR-beamer.bst
new file mode 100644
index 0000000000..51c9e42cb6
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR-beamer.bst
@@ -0,0 +1,1404 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "plain-fa-inLTR-beamer", Persian (farsi) version of plain.bst
+%%
+%% by: Mahmood Amintoosi, m.amintoosi@gmail.com, www.parsilatex.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+FUNCTION{bst.file.authors} {"M.Amintoosi" }
+
+FUNCTION {banner.message}
+{ is.print.banners.to.terminal
+ { "-- plain-fa-inLTR-beamer.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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" editors"}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" editor" }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" edition" }
+if$
+}
+
+FUNCTION {bbl.bvolume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "volume"}
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "Volume"}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { "number" }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { "In " }
+if$
+}
+
+FUNCTION {bbl.inInMid}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { "pages" }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" صفحه " }
+ { "page" }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {"chapter" }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { "Technical Report" }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { "PhD thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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$
+ fa.isPersianLanguage
+ {"\newRAblock {}" write$ }
+ {"\newblock " write$}
+ if$
+}
+{ 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
+ {
+ "\begin{RTLbibitems}" write$
+ newline$
+ }
+ { skip$ }
+ if$
+ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ fa.isPersianLanguage
+ {
+ "\Persiantext{" write$
+ newline$
+ }
+ {
+ skip$
+ }
+ if$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {
+ "}" write$
+ newline$
+ newline$
+ "\end{RTLbibitems}" write$
+ newline$
+ }
+ {skip$}
+ if$
+}
+
+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 :=
+ %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.bvolume 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.inInMid * 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-inLTR-beamer.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
+ 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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
+%% End of file `plain-fa-inLTR-beamer.bst'.
diff --git a/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR.bst b/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR.bst
new file mode 100644
index 0000000000..2afb5a4d96
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/plain-fa-inLTR.bst
@@ -0,0 +1,1401 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "plain-fa-inLTR", Persian (farsi) version of plain.bst
+%%
+%% by: Mahmood Amintoosi, m.amintoosi@gmail.com, www.parsilatex.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+FUNCTION{bst.file.authors} {"M.Amintoosi" }
+
+FUNCTION {banner.message}
+{ is.print.banners.to.terminal
+ { "-- plain-fa-inLTR.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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" editors"}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" editor" }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" edition" }
+if$
+}
+
+FUNCTION {bbl.bvolume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "volume"}
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "Volume"}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { "number" }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { "In " }
+if$
+}
+
+FUNCTION {bbl.inInMid}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { "pages" }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" صفحه " }
+ { "page" }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {"chapter" }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { "Technical Report" }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { "PhD thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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
+ {
+ "\begin{RTLbibitems}" write$
+ newline$
+ }
+ { skip$ }
+ if$
+ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ fa.isPersianLanguage
+ {
+ "\Persiantext{" write$
+ newline$
+ }
+ {
+ skip$
+ }
+ if$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {
+ "}" write$
+ newline$
+ newline$
+ "\end{RTLbibitems}" write$
+ newline$
+ }
+ {skip$}
+ if$
+}
+
+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 :=
+ %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.bvolume 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.inInMid * 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-inLTR.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
+ 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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
+%% End of file `plain-fa-inLTR.bst'.
diff --git a/biblio/bibtex/contrib/persian-bib/plain-fa.bst b/biblio/bibtex/contrib/persian-bib/plain-fa.bst
new file mode 100644
index 0000000000..79e2f09d84
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/plain-fa.bst
@@ -0,0 +1,1390 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "plain-fa", Persian (farsi) version of plain.bst
+%%
+%% by: Mahmood Amintoosi and Mostafa Vahedi
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" editors"}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" editor" }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" edition" }
+if$
+}
+
+FUNCTION {bbl.bvolume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "volume"}
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "Volume"}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { "number" }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { "In " }
+if$
+}
+
+FUNCTION {bbl.inInMid}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { "pages" }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" صفحه " }
+ { "page" }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {"chapter" }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { "Technical Report" }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { "Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { "PhD thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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 :=
+ %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.bvolume 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.inInMid * 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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
+%% End of file `plain-fa.bst'.
diff --git a/biblio/bibtex/contrib/persian-bib/plainnat-fa.bst b/biblio/bibtex/contrib/persian-bib/plainnat-fa.bst
new file mode 100644
index 0000000000..115a67fa47
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/plainnat-fa.bst
@@ -0,0 +1,1917 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "plainnat-fa", Persian (farsi) version of plainnat.bst
+%%
+%% by: Mahmood Amintoosi, m.amintoosi@gmail.com, www.parsilatex.com
+
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Original Copyright
+%% File: `plainnat.bst'
+%% A modification of `plain.bst' for use with natbib package
+%%
+%% Copyright 1993-2007 Patrick W Daly
+%% Max-Planck-Institut f\"ur Sonnensystemforschung
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly@mps.mpg.de
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%%
+ % Version and source file information:
+ % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)]
+ %
+ % BibTeX `plainnat' family
+ % version 0.99b for BibTeX versions 0.99a or later,
+ % for LaTeX versions 2.09 and 2e.
+ %
+ % For use with the `natbib.sty' package; emulates the corresponding
+ % member of the `plain' family, but with author-year citations.
+ %
+ % With version 6.0 of `natbib.sty', it may also be used for numerical
+ % citations, while retaining the commands \citeauthor, \citefullauthor,
+ % and \citeyear to print the corresponding information.
+ %
+ % For version 7.0 of `natbib.sty', the KEY field replaces missing
+ % authors/editors, and the date is left blank in \bibitem.
+ %
+ % Includes field EID for the sequence/citation number of electronic journals
+ % which is used instead of page numbers.
+ %
+ % Includes fields ISBN and ISSN.
+ %
+ % Includes field URL for Internet addresses.
+ %
+ % Includes field DOI for Digital Object Idenfifiers.
+ %
+ % Works best with the url.sty package of Donald Arseneau.
+ %
+ % Works with identical authors and year are further sorted by
+ % citation key, to preserve any natural sequence.
+ %
+
+ENTRY
+ { address
+ author
+ authorfa
+ booktitle
+ chapter
+ doi
+ eid
+ edition
+ editor
+ howpublished
+ institution
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ organization
+ pages
+ publisher
+ school
+ series
+ title
+ translator
+ type
+ url
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label short.list }
+
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block fa.isInLabel}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Persian Functions %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION {fa.isPersianLanguage}
+{
+ language missing$
+ {#0}
+ {language "l" change.case$ "persian" =}
+ if$
+}
+
+% Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+fa.isInLabel
+{" و "}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ { " editors"}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { "ویراستار "}
+ { " editor" }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" edition" }
+if$
+}
+
+FUNCTION {bbl.bvolume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "volume"}
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { "Volume"}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { "number" }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+
+if$
+}
+
+FUNCTION {bbl.inInMid}
+{
+fa.isPersianLanguage
+ {" در "}
+ { "In " }
+
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { "pages" }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" صفحه " }
+ { "page" }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {"chapter" }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { "Technical Report" }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " PhD thesis" }
+if$
+}
+
+FUNCTION {bbl.first}
+{ "1st" }
+
+FUNCTION {bbl.second}
+{ "2nd" }
+
+FUNCTION {bbl.third}
+{ "3rd" }
+
+FUNCTION {bbl.fourth}
+{ "4th" }
+
+FUNCTION {bbl.fifth}
+{ "5th" }
+
+FUNCTION {bbl.st}
+{ "st" }
+
+FUNCTION {bbl.nd}
+{ "nd" }
+
+FUNCTION {bbl.rd}
+{ "rd" }
+
+FUNCTION {bbl.th}
+{ "th" }
+
+% Added by M.Amintoosi
+FUNCTION {bbl.etal}
+{
+fa.isInLabel
+{" و دیگران"}% If authorfa exists
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+if$
+}
+
+FUNCTION {bbl.translator}
+{
+fa.isPersianLanguage
+ { " ترجمه‌ی "}
+ {" Translated by "}
+
+if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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 {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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$ "" }
+ { "\emph{" swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+
+
+
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+
+
+
+ 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.key}
+{ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+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.isbn}
+{ isbn empty$
+ { "" }
+ { new.block "ISBN " isbn * }
+ if$
+}
+
+FUNCTION {format.issn}
+{ issn empty$
+ { "" }
+ { new.block "ISSN " issn * }
+ if$
+}
+
+FUNCTION {format.url}
+{ url empty$
+ { "" }
+ {
+ fa.isPersianLanguage
+ {new.block "\url{" url * "}" * }
+ {new.block "URL \url{" url * "}" * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.doi}
+{ doi empty$
+ { "" }
+ { new.block "\doi{" doi * "}" * }
+ if$
+}
+
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ }
+ if$
+}
+
+FUNCTION {format.full.names}
+{'s :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr
+ "{vv~}{ll}" format.name$ 't :=
+ 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 {author.editor.full}
+{ author empty$
+ { editor empty$
+ { "" }
+ { editor format.full.names }
+ if$
+ }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {author.full}
+{ author empty$
+ { "" }
+ { author format.full.names }
+ if$
+}
+
+FUNCTION {editor.full}
+{ editor empty$
+ { "" }
+ { editor format.full.names }
+ if$
+}
+
+FUNCTION {make.full.names}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.full
+ { type$ "proceedings" =
+ 'editor.full
+ 'author.full
+ if$
+ }
+ if$
+}
+
+FUNCTION {output.bibitem}
+{
+ #0 'fa.isInLabel := %Initialize fa.isInLabel
+ newline$
+ fa.isPersianLanguage
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\bibitem[" write$
+ label write$
+ ")" make.full.names duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+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 duplicate$ empty$
+
+
+
+ { "empty year in " cite$ * warning$
+ pop$ "" }
+ 'skip$
+
+
+ if$
+ month empty$
+ 'skip$
+ { month
+ " " * swap$ *
+ }
+
+
+
+ if$
+ extra.label *
+}
+
+
+
+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.bvolume 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.inInMid * 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.eid}
+{ eid empty$
+ { "" }
+ { "art." eid tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "\penalty0 (" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":\penalty0 " * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.eid}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "\penalty0 (" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ eid empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.eid }
+ { ":\penalty0 " * eid * }
+ 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 "\emph{" * journal * "}" * }
+ if$
+ }
+ { bbl.in }
+ if$
+ " \citet{" * crossref * "}" *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+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$
+ "" *
+ }
+ { "\emph{" * series * "}" * }
+
+ if$
+ }
+ 'skip$
+
+ if$
+ }
+ 'skip$
+
+ if$
+ " \citet{" * 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 "\emph{" * booktitle * "}" * }
+ if$
+ }
+ { bbl.in }
+ if$
+ }
+ { bbl.in }
+ if$
+ " \citet{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ eid empty$
+ { format.vol.num.pages output }
+ { format.vol.num.eid output }
+ if$
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ eid empty$
+ { format.pages output }
+ { format.eid output }
+ if$
+ }
+ if$
+ format.issn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {book}
+{ output.bibitem
+
+fa.isPersianLanguage
+ {
+ format.authors output
+ author format.key 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
+ editor format.key output
+ }
+
+ { 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
+ format.isbn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ format.isbn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check
+ editor format.key output
+ }
+
+ { 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
+ format.isbn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ 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$
+ format.isbn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ 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$
+ format.isbn output
+ format.doi output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ format.authors output
+
+
+
+
+
+
+
+
+ author format.key output
+
+ new.block
+ format.btitle "title" output.check
+
+
+
+
+
+
+
+
+ organization address new.block.checkb
+ organization output
+ address output
+
+
+ format.edition output
+ format.date output
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ 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
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ author format.key output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ format.issn output
+ format.url output
+ new.block
+ note output
+ fin.entry
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ 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
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+
+
+ format.editors output
+ editor format.key output
+
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address output
+
+
+
+
+
+
+
+ format.date "year" output.check
+
+
+
+ new.sentence
+ organization output
+
+
+
+
+ publisher output
+ format.isbn output
+ format.doi output
+ format.url output
+
+
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ 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
+ format.url output
+ new.block
+ note output
+ fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ author format.key output
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ format.url 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 {format.lab.names}
+{ 's :=
+ authorfa empty$
+ {
+ %skip$
+ #0 'fa.isInLabel :=
+ }
+ {% If authorfa exists
+ authorfa 's :=
+ #1 'fa.isInLabel :=
+ }
+ if$
+
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ duplicate$
+ #2 >
+ { pop$ bbl.etal * }
+ { #2 <
+ 'skip$
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { bbl.etal * }
+ { bbl.and * s #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+ #0 'fa.isInLabel := %reset fa.isInLabel
+}
+
+FUNCTION {author.key.label}
+{
+ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{
+ author empty$
+ { editor empty$
+ { key empty$
+ { "no key, author, or editor in " cite$ * warning$
+ cite$ #1 #3 substring$ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ 'key
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ 'key
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.short.authors}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ 'short.list :=
+}
+
+FUNCTION {calc.label}
+{ calc.short.authors
+ short.list
+ "("
+ *
+ year duplicate$ empty$
+ short.list key field.or.null = or
+ { pop$ "" }
+ 'skip$
+ if$
+ *
+ 'label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ {
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr #1 >
+ {
+ " " *
+ namesleft #1 = t "others" = and
+ { "zzzzz" * }
+ { numnames #2 > nameptr #2 = and
+ { "zz" * year field.or.null * " " * }
+
+ 'skip$
+ if$
+ t sortify *
+ }
+ if$
+ }
+
+
+
+
+ { 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}
+{ calc.label
+ label sortify
+ " "
+ *
+ 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
+ *
+ " "
+ *
+ cite$
+
+
+ *
+ #1 entry.max$ substring$
+ 'sort.label :=
+ sort.label *
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num number.label }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+ #0 'number.label :=
+}
+
+FUNCTION {forward.pass}
+{ last.label label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ label 'last.label :=
+ }
+ if$
+ number.label #1 + 'number.label :=
+
+
+
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+ extra.label
+ duplicate$ empty$
+ 'skip$
+ { "{\natexlab{" swap$ * "}}" * }
+ if$
+ 'extra.label :=
+ label extra.label * 'label :=
+}
+
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION {bib.sort.order}
+{ sort.label 'sort.key$ :=
+}
+
+ITERATE {bib.sort.order}
+
+SORT
+
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
+ write$ newline$
+ "\providecommand{\natexlab}[1]{#1}"
+ write$ newline$
+ "\providecommand{\url}[1]{\texttt{#1}}"
+ write$ newline$
+ "\expandafter\ifx\csname urlstyle\endcsname\relax"
+
+
+ write$ newline$
+ " \providecommand{\doi}[1]{doi: #1}\else"
+
+ write$ newline$
+ " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi"
+
+ write$ newline$
+
+
+
+
+
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+ "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
diff --git a/biblio/bibtex/contrib/persian-bib/unsrt-fa.bst b/biblio/bibtex/contrib/persian-bib/unsrt-fa.bst
new file mode 100644
index 0000000000..167a333665
--- /dev/null
+++ b/biblio/bibtex/contrib/persian-bib/unsrt-fa.bst
@@ -0,0 +1,1225 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bib. style "usrt-fa", Persian (farsi) version of unsrt.bst
+%%
+%% by: Mahmood Amintoosi and Mostafa Vahedi, m.amintoosi@gmail.com
+%% For XePersian, a Persian Typesetting Package in XeTeX
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (version 1.3c),
+%% either this version of this license or (at your option) any later version.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Original Copyright
+
+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 }
+FUNCTION {is.print.banners.to.terminal} { #1 }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FILE VERSION AND BANNER %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FUNCTION{bst.file.version} { "0.9" }
+FUNCTION{bst.file.date} { "2015/05/09" }
+FUNCTION{bst.file.website} { "http://www.parsilatex.com" }
+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$ * "Persian-bib-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$
+}
+
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The languages selected here is ENGLISH and Farsi
+FUNCTION {bbl.and}
+{
+ fa.isPersianLanguage
+ {" و "}
+ {" and "}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+fa.isPersianLanguage
+ { " ویراستاران "}
+ {" eds. "}
+if$
+}
+
+FUNCTION {bbl.editor}
+{
+fa.isPersianLanguage
+ { " ویراستار "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.edby}
+{
+fa.isPersianLanguage
+ { " ویراسته‌ی "}
+ { " edited by " }
+if$
+}
+
+FUNCTION {bbl.edition}
+{
+fa.isPersianLanguage
+ {" ویرایش "}
+ {" ed. " }
+if$
+}
+
+FUNCTION {bbl.volume}
+{
+fa.isPersianLanguage
+ {" جلد "}
+ { " vol."}
+if$
+}
+
+FUNCTION {bbl.of}
+{
+fa.isPersianLanguage
+ { " از "}
+ { " of " }
+if$
+}
+
+FUNCTION {bbl.number}
+{
+fa.isPersianLanguage
+ {" شماره " }
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.nr}
+{
+fa.isPersianLanguage
+ {" شماره "}
+ { " no." }
+if$
+}
+
+FUNCTION {bbl.in}
+{
+fa.isPersianLanguage
+ {" در "}
+ { " in " }
+if$
+}
+
+FUNCTION {bbl.pages}
+{
+fa.isPersianLanguage
+ {" صفحات "}
+ { " pp." }
+if$
+}
+
+FUNCTION {bbl.page}
+{
+fa.isPersianLanguage
+ {" ص." }
+ { " p." }
+if$
+}
+
+FUNCTION {bbl.chapter}
+{
+fa.isPersianLanguage
+ { " فصل " }
+ {" chap." }
+if$
+}
+
+FUNCTION {bbl.techrep}
+{
+fa.isPersianLanguage
+ { " گزارش طرح تحقیقی"}
+ { " Tech. Rep." }
+if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه کارشناسی‌ارشد"}
+ { " Master's thesis" }
+if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+fa.isPersianLanguage
+ {" پایان‌نامه دکترا" }
+ { " Ph.D. thesis" }
+if$
+}
+
+FUNCTION {bbl.etal}
+{
+ fa.isPersianLanguage
+ {" و دیگران"}
+ {" et~al."}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ fa.isPersianLanguage
+ {"ترجمه‌ی "}
+ {"Translator "}
+ if$
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% 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
+ { skip$ }
+ {
+ "\begin{LTRbibitems}" write$
+ newline$
+ "\resetlatinfont " write$
+ }
+ if$
+ newline$
+ "\bibitem{" write$
+ cite$ write$
+ "}" write$
+ newline$
+ ""
+ before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ fa.isPersianLanguage
+ {skip$}
+ { newline$
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+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$
+}
+
+EXECUTE {end.bib}
+EXECUTE{completed.message}
+%% End of file `unsrt-fa.bst'.