%% Last Update: 29 Oct 2019
%

%% =================================================================================
%برای فهم کدهایی که در ادامه می‌آید، حتما پیوند زیر مطالعه شود.
%http://www.parsilatex.com/wiki/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%88%D8%A7%DA%98%D9%87%E2%80%8C%D9%86%D8%A7%D9%85%D9%87

% برای اجرا xindy بر روی فایل .tex و تولید واژه‌نامه‌ها و فهرست اختصارات و فهرست نمادها یکسری  فایل تعریف شده است.‌ Latex داده های مربوط به واژه نامه و .. را در این 
%  فایل‌ها نگهداری می‌کند. مهم‌ترین option‌ این قسمت این است که 
% عنوان واژه‌نامه‌ها و یا فهرست اختصارات و یا فهرست نمادها را می‌توانید در این‌جا مشخص کنید. 
% در این جا عباراتی مثل glg، gls، glo و ... پسوند فایل‌هایی است که برای xindy بکار می‌روند. 
 \newglossary[glg]{english}{gls}{glo}{واژه‌نامه انگلیسی به فارسی}
 \newglossary[blg]{persian}{bls}{blo}{واژه‌نامه فارسی به انگلیسی}
 \makeglossaries
 \glsdisablehyper
 
% تعریف استایل برای واژه نامه فارسی به انگلیسی، در این استایل واژه‌های فارسی در سمت راست و واژه‌های انگلیسی در سمت چپ خواهند آمد. از حالت گروه ‌بندی استفاده می‌کنیم، 
% یعنی واژه‌ها در گروه‌هایی به ترتیب حروف الفبا مرتب می‌شوند، مثلا:
% الف
% افتصاد ................................... Economy
% اشکال ........................................ Failure
% ش
% شبکه ...................................... Network
\newglossarystyle{myFaToEn}{%
	\renewenvironment{theglossary}{}{}
	\renewcommand*{\glsgroupskip}{\vskip 10mm}
	\renewcommand*{\glsgroupheading}[1]{\subsection*{\rl{\glsgetgrouptitle{##1}}\\}}
	\renewcommand*{\glossentry}[2]{\noindent\glsentryname{##1}\dotfill\space\glsentrytext{##1}\\}
}

% تعریف استایل برای واژه نامه انگلیسی به فارسی، در این استایل واژه‌های فارسی در سمت راست و واژه‌های انگلیسی در سمت چپ خواهند آمد. از حالت گروه ‌بندی استفاده می‌کنیم، 
% یعنی واژه‌ها در گروه‌هایی به ترتیب حروف الفبا مرتب می‌شوند، مثلا:
% E
% Economy ............................... اقتصاد
% F
% Failure................................... اشکال
%N
% Network ................................. شبکه

\newglossarystyle{myEntoFa}{%
% این دستور در حقیقت عملیات گروه‌بندی را انجام می‌دهد. بدین صورت که واژه‌ها در بخش‌های جداگانه گروه‌بندی می‌شوند، 
% عنوان بخش همان نام حرفی است که هر واژه در آن گروه با آن شروع شده است. 
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\begin{latin}\subsection*{\glsgetgrouptitle{##1}}\end{latin}}
% در این دستور نحوه نمایش واژه‌ها می‌آید. در این جا واژه فارسی در سمت راست و واژه انگلیسی در سمت چپ قرار داده شده است، و بین آن با نقطه پر می‌شود. 
\renewcommand*{\glossentry}[2]{\noindent\glsentrytext{##1}\dotfill\space \glsentryname{##1}\\}
}

% تعیین استایل برای فهرست اختصارات
\newglossarystyle{myAbbrlist}{%
	% این دستور در حقیقت عملیات گروه‌بندی را انجام می‌دهد. بدین صورت که اختصارات‌ در بخش‌های جداگانه گروه‌بندی می‌شوند، 
	% عنوان بخش همان نام حرفی است که هر اختصار در آن گروه با آن شروع شده است. 
	\renewenvironment{theglossary}{}{}
	\renewcommand*{\glsgroupskip}{\vskip 10mm}
	\renewcommand*{\glsgroupheading}[1]{\begin{latin}\subsection*{\glsgetgrouptitle{##1}}\end{latin}}
	% در این دستور نحوه نمایش اختصارات می‌آید. در این جا حالت کوچک اختصار در سمت چپ و حالت بزرگ در سمت راست قرار داده شده است، و بین آن با نقطه پر می‌شود. 
	\renewcommand*{\glossentry}[2]{\noindent\glsentrytext{##1}\dotfill\space \Glsentrylong{##1}\\}
		% تغییر نام محیط abbreviation به فهرست اختصارات
	\renewcommand*{\acronymname}{\raggedleft\rl{فهرست اختصارات}}
}
% تعاریف مربوط به تولید واژه نامه و فهرست اختصارات و فهرست نمادها
%  در این فایل یکسری دستورات عمومی برای وارد کردن واژه‌نامه آمده است.
%  به دلیل این‌که قرار است این دستورات پایه‌ای را بازنویسی کنیم در این‌جا تعریف می‌کنیم. 
\makeatletter
\let\oldgls\gls
\let\oldglspl\glspl

\renewrobustcmd*{\gls}{\@ifstar\@msgls\@mgls}
\newcommand*{\@mgls}[1]%
{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\oldgls{#1}\glsuseri{f-#1}}{\lr{\oldgls{#1}}}}
\newcommand*{\@msgls}[1]%
{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\glstext{#1}\glsuseri{f-#1}}{\lr{\glsentryname{#1}}\glsuseri{#1}}}

\renewrobustcmd*{\glspl}{\@ifstar\@msglspl\@mglspl}
\newcommand*{\@mglspl}[1]%
{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\oldglspl{#1}\glsuseri{f-#1}}{\oldglspl{#1}}}
\newcommand*{\@msglspl}[1]%
{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\glsplural{#1}\glsuseri{f-#1}}{\glsentryplural{#1}}\glsuseri{#1}}
\makeatother


%هر واژه با دستور newword تعریف می شود. این دستور چهار آرگومان به خود می‌گیرد. 
%\newword{arg1}{arg2}{arg3}{arg4}
%این چهار آرگومان به صورت زیر تعریف می‌شود.
%arg1: هر واژه یک برچسب یکتا باید برای خود داشته باشد. تمامی ارجاعات به واژه با استفاده از این برچسب انجام می‌پذیرد.
%arg2: آرگومان دوم تعیین کننده معادل انگلیسی هر واژه است.
%arg3: آرگومان سوم تعیین‌کننده معادل فارسی کلمه مورد نظر است.
%arg4: این آرگومان حالت جمع arg3 است.
%برای مثال کلمه Network معادل فارسیش می‌شود، شبکه و حالت جمع آن شبکه‌هااست. و یا کلمه Action معادل فارسیش می‌شود کنش و حالت جمع آن می شود کنش‌ها. لازم به ذکر است که اگر کلمه‌ای حالت جمع ندارد می‌توانید arg4 را خالی بگذارید.
\newcommand{\newword}[4]{
	\newglossaryentry{#1}   {type={english},name={\lr{#2}},plural={#4},text={#3},description={}}
	\newglossaryentry{f-#1} {type={persian},name={#3},text={\lr{#2}},description={}}
}

% بر طبق این دستور، در اولین باری که واژه مورد نظر از واژه‌نامه وارد شود، پاورقی زده می‌شود. 
\makeatletter
\ifthenelse
{\equal{\@docStyle}{Pres}}
{\defglsentryfmt[english]{\glsgenentryfmt\ifglsused{\glslabel}{}{}}}
{\defglsentryfmt[english]{\glsgenentryfmt\ifglsused{\glslabel}{}{\LTRfootnote{\glsentryname{\glslabel}}}}}


% بر طبق این دستور، در اولین باری که واژه مورد نظر از فهرست اختصارات وارد شود، پاورقی زده می‌شود. 
\ifthenelse{\equal{\@docStyle}{Pres}}%
{\defglsentryfmt[acronym]{\glsentryname{\glslabel}\ifglsused{\glslabel}{}{}}}%
{\defglsentryfmt[acronym]{\glsentryname{\glslabel}\ifglsused{\glslabel}{}{\LTRfootnote{\glsentrydesc{\glslabel}}}}}
\makeatother


%دو دستور که با استفاده از آن علاوه بر این که معادل کلمه قرار داده می‌شود، معادل انگلیسی آن در پرانتز جلوی آن نوشته می‌شود. 
\newcommand{\mygls}[1]{\gls*{#1} (\glsentryname{#1})}
\newcommand{\myglspl}[1]{\glspl*{#1} (\glsentryname{#1})}
\newcommand{\myglsab}[1]{\lr{\gls*{#1} (\glsentrydesc{#1})}}

