summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/bibtex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-12-13 21:22:16 +0000
committerKarl Berry <karl@freefriends.org>2023-12-13 21:22:16 +0000
commit49c2f79420941e9aa82e3116450f0a4ffd9d5564 (patch)
tree1ba14594f50877a14484d21cc8590cbab16ad25a /Master/texmf-dist/bibtex
parentcf95d5eb2a6ea245c0e903aa64bcdcc09a521f52 (diff)
iran-bibtex (13dec23)
git-svn-id: svn://tug.org/texlive/trunk@69111 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/bibtex')
-rw-r--r--Master/texmf-dist/bibtex/bst/iran-bibtex/iran.bst3239
-rw-r--r--Master/texmf-dist/bibtex/csf/iran-bibtex/iran-bibtex-cp1256fa.csf124
2 files changed, 3363 insertions, 0 deletions
diff --git a/Master/texmf-dist/bibtex/bst/iran-bibtex/iran.bst b/Master/texmf-dist/bibtex/bst/iran-bibtex/iran.bst
new file mode 100644
index 00000000000..d830b9f3b0b
--- /dev/null
+++ b/Master/texmf-dist/bibtex/bst/iran-bibtex/iran.bst
@@ -0,0 +1,3239 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file is “iran.bst”,
+%% generated with the DOCSTRIP utility and then modified to support
+%% bilingual (English/Latin, and Persian).
+%%
+%% Bibliography style for BibTeX base on “Iran Manual of Style”.
+%%
+%% Created, and maintained by
+%% Copyright (c) 2023 Farshad Rasuli <farshad.rasuli@gmail.com>
+%%
+%%
+%% This bibliography style (bst) is part of the “iran-bibtex” package.
+%%
+%% CTAN: https://ctan.org/pkg/iran-bibtex
+%% Homepage: https://github.com/farshadrasuli/iran-bibtex
+%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues
+%%
+%%
+%%
+%% This file can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License version 1.3c, or any later version.
+%% The latest version of the License is at: latex-project.org/lppl.txt
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%------------------------------------------------------------------------------
+% This bibliography style file is intended for texts in ENGLISH, and Persian.
+% This is an author-year citation style bibliography. This style file is based
+% on natbib.sty package 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!
+%
+% The \cite command functions as follows:
+% \cite{key} => (Jones et al. 1990)
+% \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., 1990, p. 32)
+% \citeauthor{key} => Jones et al.
+% \citeauthor*{key} => Jones, Baker, and Smith
+% \citeyear{key} => 1990
+%------------------------------------------------------------------------------
+
+
+
+ENTRY
+{
+ address
+ afterword % the added field
+ archive
+ author
+ authorfa % the added field
+ booktitle
+ by % the added field
+ chapter
+ collaboration
+ commentator % the added field
+ compiler % the added field
+ doi
+ edition
+ editor
+ eid
+ eprint
+ foreword % the added field
+ howpublished
+ impression % the added field
+ institution
+ introduction % the added field
+ isbn
+ issn
+ journal
+ key
+ language
+ month
+ note
+ number
+ numpages
+ organization
+ pages
+ preface % the added field
+ publisher
+ school
+ series
+ title
+ translator % the added field
+ translateyear % the added field
+ type
+ url
+ urldate % the added field
+ volume
+ volumes % the added field
+ year
+}
+{}
+{
+ label
+ extra.label
+ sort.label
+ short.list
+}
+
+
+
+
+
+% Basic boolean functions
+
+FUNCTION {not}
+{
+ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{
+ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{
+ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+
+
+
+
+
+% check for language of entry
+
+FUNCTION {is.language.persian}
+{
+ 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.
+
+FUNCTION {bbl.afterwordby}
+{
+ is.language.persian
+ {"با پس‌گفتار"}
+ {"afterword by"}
+ if$
+}
+
+FUNCTION {bbl.and}
+{
+ is.language.persian
+ {"و"}
+ {"and"}
+ if$
+}
+
+FUNCTION {bbl.annotator}
+{
+ is.language.persian
+ {"حاشیه‌نویس"}
+ {"ann."}
+ if$
+}
+
+FUNCTION {bbl.annotatedby}
+{
+ is.language.persian
+ {"با حاشیه‌ی"}
+ {"annotated by"}
+ if$
+}
+
+FUNCTION {bbl.andothers}
+{
+ is.language.persian
+ {"و~دیگران"}
+ {"and~others"}
+ if$
+}
+
+FUNCTION {bbl.by}
+{
+ is.language.persian
+ {"نوشته‌ی"}
+ {"by"}
+ if$
+}
+
+FUNCTION {bbl.chapter}
+{
+ is.language.persian
+ {"فصل"}
+ {"chapter"}
+ if$
+}
+
+FUNCTION {bbl.collaboration}
+{
+ is.language.persian
+ {"همکار"}
+ {"coll."}
+ if$
+}
+
+FUNCTION {bbl.comma}
+{
+ is.language.persian
+ {"،"}
+ {","}
+ if$
+}
+
+FUNCTION {bbl.commentator}
+{
+ is.language.persian
+ {"یادداشت‌نویس"}
+ {"comm."}
+ if$
+}
+
+FUNCTION {bbl.commentatedby}
+{
+ is.language.persian
+ {"با یادداشت"}
+ {"commentated by"}
+ if$
+}
+
+FUNCTION {bbl.compiler}
+{
+ is.language.persian
+ {"گردآورنده"}
+ {"comp."}
+ if$
+}
+
+FUNCTION {bbl.compilers}
+{
+ is.language.persian
+ {"گردآورندگان"}
+ {"comps."}
+ if$
+}
+
+FUNCTION {bbl.compiledby}
+{
+ is.language.persian
+ {"گردآوری"}
+ {"compiled by"}
+ if$
+}
+
+FUNCTION {bbl.doi}
+{
+ is.language.persian
+ {"شناسه‌ی دیجیتال"}
+ {"doi"}
+ if$
+}
+
+FUNCTION {bbl.dquote}
+{
+ is.language.persian
+ {"\faquote{" swap$ * add.period$ "}" *}
+ {"\enquote{" swap$ * add.period$ "}" *}
+ if$
+}
+
+FUNCTION {bbl.editor}
+{
+ is.language.persian
+ {"ویراستار"}
+ {"ed."}
+ if$
+}
+
+FUNCTION {bbl.editors}
+{
+ is.language.persian
+ {"ویراستاران"}
+ {"eds."}
+ if$
+}
+
+FUNCTION {bbl.edby}
+{
+ is.language.persian
+ {"ویراسته‌ی"}
+ {"edited by"}
+ if$
+}
+
+FUNCTION {bbl.edition}
+{
+ is.language.persian
+ {"ویرایش"}
+ {"edn."}
+ if$
+}
+
+FUNCTION {bbl.eidpp}
+{
+ is.language.persian
+ {"صص"}
+ {"pages"}
+ if$
+}
+
+FUNCTION {bbl.etal}
+{
+ is.language.persian
+ {"و~همکاران"}
+ {"et~al."}
+ if$
+
+}
+
+FUNCTION {bbl.forewordby}
+{
+ is.language.persian
+ {"با پیش‌گفتار"}
+ {"forword by"}
+ if$
+}
+
+FUNCTION {bbl.impression}
+{
+ is.language.persian
+ {"چاپ"}
+ {"imp."}
+ if$
+}
+
+FUNCTION {bbl.in}
+{
+ is.language.persian
+ {"در"}
+ {"in"}
+ if$
+}
+
+FUNCTION {bbl.incollaborationwith}
+{
+ is.language.persian
+ {"با همکاری"}
+ {"in collaboration with"}
+ if$
+}
+
+FUNCTION {bbl.introby}
+{
+ is.language.persian
+ {"با مقدمه‌ی"}
+ {"introduction by"}
+ if$
+}
+
+FUNCTION {bbl.isbn}
+{
+ is.language.persian
+ {"شابک"}
+ {"isbn"}
+ if$
+}
+
+FUNCTION {bbl.issn}
+{
+ is.language.persian
+ {"شاپا"}
+ {"issn"}
+ if$
+}
+
+FUNCTION {bbl.mthesis}
+{
+ is.language.persian
+ {"پایان‌نامه‌ی کارشناسی‌ارشد"}
+ {"Master's thesis"}
+ if$
+}
+
+FUNCTION {bbl.number}
+{
+ is.language.persian
+ {"ش."}
+ {"no."}
+ if$
+}
+
+FUNCTION {bbl.nr}
+{
+ is.language.persian
+ {"ش."}
+ {"no."}
+ if$
+}
+
+FUNCTION {bbl.of}
+{
+ is.language.persian
+ {"از"}
+ {"of"}
+ if$
+}
+
+FUNCTION {bbl.page}
+{
+ is.language.persian
+ {""}
+ {""}
+ if$
+}
+
+FUNCTION {bbl.pages}
+{
+ is.language.persian
+ {""}
+ {""}
+ if$
+}
+
+FUNCTION {bbl.prefaceby}
+{
+ is.language.persian
+ {"با پیش‌گفتار"}
+ {"preface by"}
+ if$
+}
+
+FUNCTION {bbl.phdthesis}
+{
+ is.language.persian
+ {"رساله‌ی دکتری"}
+ {"PhD dissertation"}
+ if$
+}
+
+FUNCTION {bbl.retrieved}
+{
+ is.language.persian
+ {"دسترسی در"}
+ {"retrieved"}
+ if$
+}
+
+FUNCTION {bbl.semicolon}
+{
+ is.language.persian
+ {"؛"}
+ {";"}
+ if$
+}
+
+FUNCTION {bbl.techrep}
+{
+ is.language.persian
+ {""}
+ {""}
+ if$
+}
+
+FUNCTION {bbl.translator}
+{
+ is.language.persian
+ {"مترجم"}
+ {"tran."}
+ if$
+}
+
+FUNCTION {bbl.translators}
+{
+ is.language.persian
+ {"مترجمان"}
+ {"trans."}
+ if$
+}
+
+FUNCTION {bbl.translatedby}
+{
+ is.language.persian
+ {"ترجمه‌ی"}
+ {"translated by"}
+ if$
+}
+
+FUNCTION {bbl.url}
+{
+ is.language.persian
+ {"تارنما"}
+ {"url"}
+ if$
+}
+
+FUNCTION {bbl.volume}
+{
+ is.language.persian
+ {"ج."}
+ {"vol."}
+ if$
+}
+
+FUNCTION {bbl.volumes}
+{
+ is.language.persian
+ {"ج."}
+ {"vols."}
+ if$
+}
+
+
+
+
+
+% Functions to declare position
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{
+ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+
+
+% Functions to print output
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{
+ 's :=
+ output.state mid.sentence =
+ { bbl.comma * " " * 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$
+}
+
+
+
+
+
+% Functions to control format of entry
+
+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 {no.blank.or.punct}
+{
+ "\hspace{0pt}" * before.all 'output.state :=
+}
+
+
+
+FUNCTION {date.block}
+{
+ new.block
+}
+
+
+
+FUNCTION {non.stop}
+{
+ duplicate$
+ "}" * add.period$
+ #-1 #1 substring$ "." =
+}
+
+
+
+STRINGS {z}
+
+FUNCTION {remove.dots}
+{
+ 'z :=
+ ""
+ {
+ z empty$ not
+ }
+ {
+ z #1 #2 substring$
+ duplicate$ "\." =
+ {
+ z #3 global.max$ substring$ 'z := *
+ }
+ {
+ pop$
+ z #1 #1 substring$
+ z #2 global.max$ substring$ 'z :=
+ duplicate$ "." =
+ 'pop$
+ { * }
+ if$
+ }
+ if$
+ }
+ while$
+}
+
+
+
+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$ "" }
+ { "{\it " swap$ * "}" * }
+ if$
+}
+
+
+
+FUNCTION {tie.or.space.prefix}
+{
+ duplicate$ text.length$ #3 <
+ { "~" }
+ { " " }
+ if$
+ swap$
+}
+
+
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+
+
+
+FUNCTION {separate.by.space}
+{ " " swap$ * " " * }
+
+
+
+
+
+% Macro for abbreviation of month
+
+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"}
+
+
+
+
+
+% Functions to check and warn bibinfo
+
+FUNCTION {bibinfo.check}
+{
+ swap$
+ duplicate$ missing$
+ {
+ pop$ pop$
+ ""
+ }
+ {
+ duplicate$ empty$
+ {
+ swap$ pop$
+ }
+ {
+ swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {bibinfo.warn}
+{
+ swap$
+ duplicate$ missing$
+ {
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+ ""
+ }
+ {
+ duplicate$ empty$
+ {
+ swap$ "empty " swap$ * " in " * cite$ * warning$
+ }
+ {
+ swap$
+ pop$
+ }
+ if$
+ }
+ if$
+}
+
+
+
+
+
+% Functions to format fields
+
+INTEGERS { nameptr namesleft numnames }
+
+STRINGS { bibinfo}
+
+FUNCTION {format.names}
+{
+ 'bibinfo :=
+ duplicate$ empty$
+ 'skip$
+ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ {
+ namesleft #0 >
+ }
+ {
+ s nameptr
+ duplicate$ #1 >
+ { "{ff~}{vv~}{ll}{, jj}" }
+ { "{vv~}{ll}{, ff}{, jj}" }
+ if$
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ bbl.comma * " " * t *
+ }
+ {
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ bbl.comma *
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ separate.by.space * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.names.ed}
+{
+ 'bibinfo :=
+ duplicate$ empty$
+ 'skip$
+ {
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ {
+ namesleft #0 >
+ }
+ {
+ s nameptr
+ "{ff~}{vv~}{ll}{, jj}"
+ format.name$
+ bibinfo bibinfo.check
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ bbl.comma * " " * t *
+ }
+ {
+ s nameptr "{ll}" format.name$
+ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ bbl.comma *
+ t "others" =
+ {
+
+ " " * bbl.etal *
+ }
+ {
+ bbl.and
+ separate.by.space * t *
+ }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.key}
+{
+ empty$
+ { key field.or.null }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.authors}
+{ author "author" format.names }
+
+
+
+FUNCTION {get.bbl.editor}
+{
+ editor num.names$ #1 >
+ 'bbl.editors
+ 'bbl.editor
+ if$
+}
+
+FUNCTION {format.editors}
+{
+ editor "editor" format.names
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.comma * " " * get.bbl.editor *
+ }
+ if$
+}
+
+
+
+FUNCTION {get.bbl.compiler}
+{
+ compiler num.names$ #1 >
+ 'bbl.compilers
+ 'bbl.compiler
+ if$
+}
+
+FUNCTION {format.compilers}
+{
+ compiler "compiler" format.names
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.comma * " " * get.bbl.compiler *
+ }
+ if$
+}
+
+
+
+FUNCTION {get.bbl.translator}
+{
+ translator num.names$ #1 >
+ 'bbl.translators
+ 'bbl.translator
+ if$
+}
+
+FUNCTION {format.translators}
+{
+ translator "translator" format.names
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.comma * " " * get.bbl.translator *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.eprint}
+{
+ eprint duplicate$ empty$
+ 'skip$
+ {
+ "\eprint"
+ archive empty$
+ 'skip$
+ { "[" * archive * "]" * }
+ if$
+ "{" * swap$ * "}" *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.url}
+{
+ url duplicate$ empty$
+ { pop$ "" }
+ {
+ bbl.url "u" change.case$ ": \url{" * swap$ * "}" *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.urldate}
+{
+ urldate duplicate$ empty$
+ { pop$ "" }
+ { bbl.retrieved capitalize " " * swap$ * }
+ if$
+}
+
+
+
+FUNCTION {format.isbn}
+{
+ isbn "isbn" bibinfo.check
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.isbn "u" change.case$ ": " * swap$ *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.issn}
+{
+ issn "issn" bibinfo.check
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.issn "u" change.case$ ": " * swap$ *
+ }
+ if$
+}
+
+FUNCTION {format.doi}
+{
+ doi empty$
+ { "" }
+ {
+ bbl.doi "u" change.case$ ": \doi{" * doi * "}" *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.note}
+{
+ note empty$ not
+ {
+ note #1 #1 substring$
+ duplicate$ "{" =
+ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "u" }
+ if$
+ change.case$
+ }
+ if$
+ note #2 global.max$ substring$ * "note" bibinfo.check
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.title}
+{
+ title
+ duplicate$ empty$
+ 'skip$
+ { "t" change.case$ }
+ if$
+ "title" bibinfo.check
+ duplicate$ empty$
+ 'skip$
+ {
+ bbl.dquote
+ }
+ if$
+}
+
+
+
+FUNCTION {format.full.names}
+{
+ 's :=
+ "" 't :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ {
+ namesleft #0 >
+ }
+ {
+ s nameptr
+ "{vv~}{ll}" format.name$
+ 't :=
+ nameptr #1 >
+ {
+ namesleft #1 >
+ {
+ bbl.comma * " " * t *
+ }
+ {
+ s nameptr "{ll}" format.name$
+ duplicate$ "others" =
+ { 't := }
+ { pop$ }
+ if$
+ t "others" =
+ {
+ " " * bbl.etal *
+ }
+ {
+ numnames #2 >
+ { bbl.comma * }
+ 'skip$
+ if$
+ bbl.and
+ separate.by.space * 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 {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 capitalize " " *
+}
+
+
+
+FUNCTION {format.date}
+{
+ year "year" bibinfo.check
+ duplicate$ empty$
+ {
+ }
+ 'skip$
+ if$
+ extra.label *
+ before.all 'output.state :=
+ after.sentence 'output.state :=
+}
+
+
+
+FUNCTION {format.btitle}
+{
+ title "title" bibinfo.check
+ duplicate$ empty$
+ 'skip$
+ {
+ emphasize
+ }
+ if$
+}
+
+
+
+FUNCTION {either.or.check}
+{
+ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+
+FUNCTION {format.bvolume}
+{
+ volume empty$ not
+ {
+ volumes empty$ not
+ {
+ bbl.volume volume "~" swap$ * *
+ bbl.of separate.by.space volumes *
+ *
+ }
+ {
+ bbl.volume volume "~" swap$ * *
+ }
+ if$
+ }
+ {
+ volumes empty$ not
+ {
+ volumes bbl.volumes "~" swap$ * *
+ }
+ { "" }
+ if$
+ }
+ if$
+}
+
+
+FUNCTION {format.number.series}
+{
+ series empty$ not
+ {
+ number empty$ not
+ {
+ series " " * number *
+ }
+ { series field.or.null }
+ if$
+ }
+ {
+ number empty$ not
+ {
+ output.state mid.sentence =
+ { bbl.number }
+ { bbl.number capitalize }
+ if$
+ number "~" swap$ * *
+ }
+ { "" }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.bvolume.series.number}
+{
+ volume empty$ not
+ {
+ volumes empty$ not
+ {
+ series empty$ not
+ {
+ number empty$ not
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * volumes * add.period$
+ " " * series emphasize *
+ " " * number *
+ }
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * volumes * add.period$
+ " " * series emphasize *
+ }
+ if$
+ }
+ {
+ number empty$ not
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * volumes * add.period$
+ " " * bbl.number * "~" * number *
+ }
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * volumes *
+ }
+ if$
+ }
+ if$
+ }
+ {
+ series empty$ not
+ {
+ number empty$ not
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * series emphasize *
+ " " * number *
+ }
+ {
+ bbl.volume "~" * volume *
+ " " * bbl.of * " " * series emphasize *
+ }
+ if$
+ }
+ {
+ number empty$ not
+ {
+ bbl.volume "~" * volume * add.period$
+ " " * bbl.number * "~" * number *
+ }
+ {
+ bbl.volume "~" * volume * add.period$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ {
+ volumes empty$ not
+ {
+ series empty$ not
+ {
+ number empty$ not
+ {
+ volumes "~" * bbl.volumes * add.period$
+ " " * series *
+ " " * number *
+ }
+ {
+ volumes "~" * bbl.volumes * add.period$
+ " " * series *
+ }
+ if$
+ }
+ {
+ number empty$ not
+ {
+ volumes "~" * bbl.volumes * add.period$
+ " " * bbl.number * "~" * number *
+ }
+ {
+ volumes "~" * bbl.volumes * add.period$
+ }
+ if$
+ }
+ if$
+ }
+ {
+ series empty$ not
+ {
+ number empty$ not
+ {
+ series
+ " " * number *
+ }
+ {
+ series
+ }
+ if$
+ }
+ {
+ number empty$ not
+ {
+ bbl.number "~" * number *
+ }
+ {
+ ""
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.edition}
+{
+ edition duplicate$ empty$
+ 'skip$
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$
+ change.case$
+ "edition" bibinfo.check
+ is.language.persian
+ { bbl.edition " " * swap$ * }
+ { " " * bbl.edition * }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.impression}
+{
+ impression duplicate$ empty$ not
+ {
+ output.state mid.sentence =
+ { "l" }
+ { "t" }
+ if$
+ change.case$
+ is.language.persian
+ { bbl.impression " " * swap$ * }
+ { " " * bbl.impression * }
+ if$
+ }
+ 'skip$
+ 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 duplicate$ empty$
+ 'skip$
+ {
+ duplicate$ multi.page.check
+ {
+ n.dashify
+ }
+ {
+ }
+ if$
+ "pages" bibinfo.check
+ }
+ if$
+}
+
+
+
+FUNCTION {format.journal.pages}
+{
+ pages duplicate$ empty$ 'pop$
+ {
+ swap$ duplicate$ empty$
+ {
+ pop$ pop$ format.pages
+ }
+ {
+ ": " *
+ swap$
+ n.dashify
+ "pages" bibinfo.check
+ *
+ }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.journal.eid}
+{
+ eid "eid" bibinfo.check
+ duplicate$ empty$
+ 'pop$
+ {
+ swap$
+ duplicate$ empty$
+ 'skip$
+ {
+ ": " *
+ }
+ if$
+ swap$ *
+ numpages empty$
+ 'skip$
+ {
+ bbl.eidpp numpages tie.or.space.prefix
+ "numpages" bibinfo.check * *
+ " (" swap$ * ")" * *
+ }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.vol.num.pages}
+{
+ volume field.or.null
+ duplicate$ empty$
+ 'skip$
+ {
+ "volume" bibinfo.check
+ }
+ if$
+ number "number" bibinfo.check
+ duplicate$ empty$
+ 'skip$
+ {
+ swap$
+ duplicate$ empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ swap$
+ "~(" swap$ * ")" *
+ }
+ if$
+ *
+ eid empty$
+ { format.journal.pages }
+ { format.journal.eid }
+ if$
+}
+
+
+
+FUNCTION {format.chapter.pages}
+{
+ chapter empty$
+ 'format.pages
+ {
+ type empty$
+ { bbl.chapter }
+ {
+ type "l" change.case$
+ "type" bibinfo.check
+ }
+ if$
+ chapter tie.or.space.prefix
+ "chapter" bibinfo.check
+ * *
+ pages empty$
+ 'skip$
+ { bbl.comma * " " * format.pages * }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.booktitle}
+{
+ booktitle "booktitle" bibinfo.check
+ emphasize
+}
+
+
+
+FUNCTION {format.in.ed.booktitle}
+{
+ format.booktitle
+ duplicate$ empty$
+ 'skip$
+ {
+ format.bvolume
+ duplicate$ empty$
+ 'pop$
+ { bbl.comma " " * swap$ * * }
+ if$
+ editor "editor" format.names.ed
+ duplicate$ empty$
+ 'pop$
+ {
+ bbl.edby capitalize " " * swap$ *
+ swap$
+ add.period$ " " * swap$ *
+ }
+ if$
+ word.in swap$ *
+ }
+ if$
+}
+
+
+
+FUNCTION {format.by}
+{
+ by empty$ not
+ {
+ by "by" format.names.ed
+ bbl.by " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.incollaborationwith}
+{
+ collaboration empty$ not
+ {
+ collaboration "collaboration" format.names.ed
+ bbl.incollaborationwith capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.commentatedby}
+{
+ commentator empty$ not
+ {
+ commentator "commentator" format.names.ed
+ bbl.commentatedby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.compiledby}
+{
+ compiler empty$ not
+ {
+ compiler "compiler" format.names.ed
+ bbl.compiledby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.edby}
+{
+ editor empty$ not
+ {
+ editor "editor" format.names.ed
+ bbl.edby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.translatedby}
+{
+ translator empty$ not
+ {
+ translator "translator" format.names.ed
+ bbl.translatedby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+FUNCTION {format.translateyear}
+{
+ translateyear empty$ not
+ {
+ translateyear
+ }
+ { "" }
+ if$
+ before.all 'output.state :=
+ after.sentence 'output.state :=
+}
+
+
+
+FUNCTION {format.introby}
+{
+ introduction empty$ not
+ {
+ introduction "introduction" format.names.ed
+ bbl.introby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.prefaceby}
+{
+ preface empty$ not
+ {
+ preface "preface" format.names.ed
+ bbl.prefaceby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.afterwordby}
+{
+ afterword empty$ not
+ {
+ afterword "afterword" format.names.ed
+ bbl.afterwordby capitalize " " * swap$ *
+ }
+ { "" }
+ if$
+}
+
+
+
+FUNCTION {format.thesis.type}
+{
+ type duplicate$ empty$
+ 'pop$
+ {
+ swap$ pop$
+ "t" change.case$ "type" bibinfo.check
+ }
+ if$
+}
+
+
+
+FUNCTION {format.tr.number}
+{
+ number "number" bibinfo.check
+ type duplicate$ empty$
+ { pop$ bbl.techrep }
+ 'skip$
+ if$
+ "type" bibinfo.check
+ swap$ duplicate$ empty$
+ { pop$ "t" change.case$ }
+ { tie.or.space.prefix * * }
+ if$
+}
+
+
+
+FUNCTION {format.article.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+
+
+FUNCTION {format.book.crossref}
+{
+ volume duplicate$ empty$
+ {
+ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ pop$ word.in
+ }
+ {
+ bbl.volume
+ capitalize
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of separate.by.space *
+ }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+
+
+FUNCTION {format.incoll.inproc.crossref}
+{
+ word.in
+ " \cite{" * crossref * "}" *
+}
+
+
+
+FUNCTION {format.org.or.pub}
+{
+ 't :=
+ ""
+ address empty$ t empty$ and
+ 'skip$
+ {
+ address "address" bibinfo.check *
+ t empty$
+ 'skip$
+ {
+ address empty$
+ 'skip$
+ { ": " * }
+ if$
+ t *
+ }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.publisher.address}
+{
+ publisher "publisher" bibinfo.check format.org.or.pub
+}
+
+
+
+FUNCTION {format.organization.address}
+{
+ organization "organization" bibinfo.check format.org.or.pub
+}
+
+
+
+STRINGS {oldname}
+
+FUNCTION {name.or.dash}
+{
+ 's :=
+ oldname empty$
+ { s 'oldname := s }
+ {
+ s oldname =
+ { "---{}---{}---" }
+ { s 'oldname := s }
+ if$
+ }
+ if$
+}
+
+
+
+
+
+% Functions to open, and close the bibitem
+
+INTEGERS { is.authorfa.exist }
+
+FUNCTION {begin.bibitem}
+{
+ #0 'is.authorfa.exist :=
+ newline$
+ is.language.persian
+ {
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names
+ duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ }
+ {
+ "\begin{LTRbibitems}" write$
+ "\resetlatinfont" write$
+ newline$
+ "\bibitem[{" write$
+ label write$
+ ")" make.full.names
+ duplicate$ short.list =
+ { pop$ }
+ { * }
+ if$
+ "}]{" * write$
+ cite$ write$
+ "}" write$
+ newline$
+ }
+ if$
+ ""
+ before.all 'output.state :=
+}
+
+
+
+FUNCTION {finish.entry}
+{
+ add.period$ write$
+ newline$
+ is.language.persian
+ 'skip$
+ {
+ "\end{LTRbibitems}" write$
+ newline$
+ }
+ if$
+}
+
+
+
+
+
+% Function to format entries
+
+FUNCTION {article}
+{ begin.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
+ new.block
+ crossref missing$
+ {
+ journal
+ remove.dots
+ "journal" bibinfo.check
+ emphasize
+ "journal" output.check
+ add.blank
+ format.vol.num.pages output
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block format.issn output
+ new.block format.doi output
+ new.block
+ format.note output
+ new.block format.eprint output
+ new.block format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {book}
+{
+ begin.bibitem
+ author empty$ not
+ {
+ format.authors output.nonnull
+ name.or.dash
+ format.date "year" output.check
+ new.block format.btitle "title" output.check
+ translator empty$
+ {
+ crossref missing$
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.compiledby output
+ new.sentence format.edby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ {
+ new.block format.book.crossref output.nonnull
+ }
+ if$
+ }
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.translatedby output
+ new.sentence format.translateyear output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.compiledby output
+ new.sentence format.edby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ if$
+ }
+ { %%% if author field is empty, proceed with compiler
+ compiler empty$ not
+ {
+ format.compilers output.nonnull
+ name.or.dash
+ format.date "year" output.check
+ new.block format.btitle "title" output.check
+ translator empty$
+ {
+ crossref missing$
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.edby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ {
+ new.block format.book.crossref output.nonnull
+ }
+ if$
+ }
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.translatedby output
+ new.sentence format.translateyear output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.edby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ if$
+ }
+ { %%% if author, and compiler fields are empty, proceed with editor
+ editor empty$ not
+ {
+ format.editors output.nonnull
+ name.or.dash
+ format.date "year" output.check
+ new.block format.btitle "title" output.check
+ translator empty$
+ {
+ crossref missing$
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ {
+ new.block format.book.crossref output.nonnull
+ }
+ if$
+ }
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.translatedby output
+ new.sentence format.translateyear output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ if$
+ }
+ { %%% if author, compiler, and editor fields are empty, proceed translator
+ translator empty$ not
+ {
+ format.translators output.nonnull
+ name.or.dash
+ new.sentence format.translateyear output
+ new.block format.btitle "title" output.check
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.date output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ { %%% if author, compiler, editor, and translator fields are empty, proceed key
+ key empty$ not
+ {
+ format.btitle "title" output.check
+ format.date "year" output.check
+ crossref missing$
+ {
+ new.sentence format.edition output
+ new.sentence format.impression output
+ new.sentence format.by output
+ new.sentence format.bvolume.series.number output
+ new.sentence format.incollaborationwith output
+ new.sentence format.commentatedby output
+ new.sentence format.introby output
+ new.sentence format.prefaceby output
+ new.sentence format.afterwordby output
+ new.sentence format.publisher.address output
+ new.sentence format.note output
+ new.sentence format.isbn output
+ new.sentence format.doi output
+ new.sentence format.urldate output
+ new.sentence format.url output
+ }
+ {
+ new.block format.book.crossref output.nonnull
+ }
+ if$
+ }
+ {
+ "author, compiler, editor, translator, and key" output.check
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ finish.entry
+}
+
+
+
+FUNCTION {booklet}
+{ begin.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title "title" output.check
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ address "address" bibinfo.check output
+ format.isbn output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {inbook}
+{ begin.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.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ format.edition output
+ new.sentence
+ format.publisher.address output
+ }
+ {
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ crossref missing$
+ { format.isbn output }
+ 'skip$
+ if$
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {incollection}
+{
+ begin.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
+ new.block
+ crossref missing$
+ {
+ format.in.ed.booktitle "booktitle" output.check
+ format.number.series output
+ format.edition output
+ format.chapter.pages output
+ new.sentence
+ format.publisher.address output
+ format.isbn output
+ }
+ {
+ format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {inproceedings}
+{ begin.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
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.number.series output
+ format.pages output
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {conference} { inproceedings }
+
+
+
+FUNCTION {manual}
+{ begin.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.btitle "title" output.check
+ organization address new.block.checkb
+ organization "organization" bibinfo.check output
+ address "address" bibinfo.check output
+ format.edition output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {mastersthesis}
+{ begin.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
+ new.block
+ bbl.mthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {misc}
+{ begin.bibitem
+ format.authors output
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.title output
+ new.block
+ howpublished "howpublished" bibinfo.check output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {phdthesis}
+{ begin.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
+ new.block
+ bbl.phdthesis format.thesis.type output.nonnull
+ school "school" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {proceedings}
+{ begin.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
+ new.sentence
+ publisher empty$
+ { format.organization.address output }
+ { organization "organization" bibinfo.check output
+ format.publisher.address output
+ }
+ if$
+ format.isbn output
+ format.issn output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {techreport}
+{ begin.bibitem
+ format.authors "author" output.check
+ author format.key output
+ name.or.dash
+ format.date "year" output.check
+ date.block
+ format.btitle
+ "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" bibinfo.warn output
+ address "address" bibinfo.check output
+ format.doi output
+ new.block
+ format.note output
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {unpublished}
+{ begin.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
+ format.doi output
+ new.block
+ format.note "note" output.check
+ format.eprint output
+ format.url output
+ finish.entry
+}
+
+
+
+FUNCTION {default.type} { misc }
+
+
+
+
+
+% Reading bibliography database (.bib) file
+
+READ
+
+
+
+FUNCTION {sortify}
+{
+ purify$
+ "l" change.case$
+}
+
+
+
+% Length of the label
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{
+ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+
+
+% Format the label name
+
+FUNCTION {label.and}
+{
+ is.language.persian
+ { "و" }
+ {
+ authorfa missing$
+ { "and" }
+ { "و" }
+ if$
+ }
+ if$
+}
+
+FUNCTION {label.etal}
+{
+ is.language.persian
+ { "و~همکاران" }
+ {
+ authorfa missing$
+ { "et~al." }
+ { "و~همکاران" }
+ if$
+ }
+ if$
+}
+
+
+
+FUNCTION {format.lab.names}
+{
+ 's :=
+ authorfa empty$
+ {
+ #0 'is.authorfa.exist :=
+ }
+ {
+ authorfa 's :=
+ #1 'is.authorfa.exist :=
+ }
+ if$
+ "" 't :=
+ s #1 "{vv~}{ll}" format.name$
+ s num.names$ #3 >
+ {
+ " " * label.etal *
+ }
+ {
+ s num.names$ #2 <
+ 'skip$
+ {
+ s num.names$ #3 <
+ {
+ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * label.etal *
+ }
+ {
+ label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ *
+ }
+ if$
+ }
+ {
+ s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ {
+ " " * label.etal *
+ }
+ {
+ bbl.comma * " " * s #2 "{vv~}{ll}" format.name$ *
+ bbl.comma * " " * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ *
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ #0 'is.authorfa.exist :=
+}
+
+
+
+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$ not
+ {
+ author format.lab.names
+ }
+ {
+ compiler empty$ not
+ {
+ compiler format.lab.names
+ }
+ {
+ editor empty$ not
+ {
+ editor format.lab.names
+ }
+ {
+ translator empty$ not
+ {
+ translator format.lab.names
+ }
+ {
+ key empty$ not
+ 'key
+ { cite$ #1 #3 substring$ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ 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
+ "("
+ *
+ author empty$ not
+ {
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ {
+ compiler empty$ not
+ {
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ {
+ editor empty$ not
+ {
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ {
+ translator empty$ not
+ {
+ translateyear duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ {
+ year duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ 'label :=
+}
+
+
+
+
+
+% Functions for sort
+
+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" 't := }
+ 'skip$
+ if$
+ t sortify *
+ }
+ {
+ 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$ not
+ {
+ author sort.format.names
+ }
+ {
+ compiler empty$ not
+ {
+ compiler sort.format.names
+ }
+ {
+ editor empty$ not
+ {
+ editor sort.format.names
+ }
+ {
+ translator empty$ not
+ {
+ translator sort.format.names
+ }
+ {
+ key empty$ not
+ {
+ key sortify
+ }
+ {
+ "to sort, need author, compiler, editor, translator, or key in " cite$ * warning$
+ ""
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ if$
+ }
+ 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 last.extra.num.extended last.extra.num.blank number.label }
+
+FUNCTION {initialize.extra.label.stuff}
+{
+ #0 int.to.chr$ 'last.label :=
+ "" 'next.extra :=
+ #0 'last.extra.num :=
+ "a" chr.to.int$ #1 - 'last.extra.num.blank :=
+ last.extra.num.blank 'last.extra.num.extended :=
+ #0 'number.label :=
+}
+
+
+
+FUNCTION {forward.pass}
+{
+ last.label label =
+ {
+ last.extra.num #1 + 'last.extra.num :=
+ last.extra.num "z" chr.to.int$ >
+ {
+ "a" chr.to.int$ 'last.extra.num :=
+ last.extra.num.extended #1 + 'last.extra.num.extended :=
+ }
+ 'skip$
+ if$
+ last.extra.num.extended last.extra.num.blank >
+ {
+ last.extra.num.extended int.to.chr$
+ last.extra.num int.to.chr$
+ * 'extra.label :=
+ }
+ {
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ if$
+ }
+ {
+ "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$
+ {
+ is.language.persian
+ { "{\natexlabfa{" swap$ * "}}" * }
+ { "{\natexlaben{" swap$ * "}}" * }
+ if$
+ }
+ 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}
+{
+ preamble$ empty$
+ 'skip$
+ { preamble$ write$ newline$ }
+ if$
+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$
+ newline$
+ "% generated by iran.bst," write$
+ newline$
+ "% this bibliography style is part of the `iran-bib` package." write$
+ newline$
+ "% copyright (c) 2023 Farshad Rasuli <farshad.rasuli@gmail.com>" write$
+ newline$
+ "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$
+ newline$
+ newline$
+ newline$
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" * write$
+ newline$
+}
+
+
+EXECUTE {begin.bib}
+
+
+EXECUTE {init.state.consts}
+
+
+ITERATE {call.type$}
+
+
+FUNCTION {end.bib}
+{
+ newline$
+ "\end{thebibliography}" write$
+ newline$
+}
+
+
+EXECUTE {end.bib}
+
+
+
+%%
+%% End of file `iran.bst'. \ No newline at end of file
diff --git a/Master/texmf-dist/bibtex/csf/iran-bibtex/iran-bibtex-cp1256fa.csf b/Master/texmf-dist/bibtex/csf/iran-bibtex/iran-bibtex-cp1256fa.csf
new file mode 100644
index 00000000000..33455ae16be
--- /dev/null
+++ b/Master/texmf-dist/bibtex/csf/iran-bibtex/iran-bibtex-cp1256fa.csf
@@ -0,0 +1,124 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% FILE: $RCSfile: cp1256fa.csf,v $
+%% $Revision: 1.0 $
+%% $Date: 2023/12/8 $
+%%
+%% AUTHOR: Farshad Rasuli <farshad.rasuli@gmail.com>
+%%
+%% CHARACTER SET: ASCII + Persian/Farsi (Code Page 1256)
+%%
+%%
+%% SORTING ORDER: Persian-English
+%%
+%%
+%% 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.
+%%
+%% This file will only work with the 8-bit implementation of BibTeX
+%% written by Niel Kempson and Alejandro Aguilar-Sierra.
+%%
+%%
+%% CHANGE LOG
+%%
+%% $Log: cp1256fa.csf,v $
+%%
+%% Revision 1.0 2023/12/8 rasuli
+%% Initial release
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%
+%% SORTING ORDER
+%%
+%% The sorting order defined is the Persian language sorting order then the
+%% natural English language sorting order (i.e. 0..9AaBb..YyZz). Any other
+%% characters will be sorted after the characters in the \order section.
+%%
+\order{
+ ۰
+ ۱
+ ۲
+ ۳
+ ۴
+ ۵
+ ۶
+ ۷
+ ۸
+ ۹
+ ء أ إ ئ ؤ
+ آ
+ ا
+ ب
+ پ
+ ت ة
+ ث
+ ج
+ چ
+ ح
+ خ
+ د
+ ذ
+ ر
+ ز
+ ژ
+ س
+ ش
+ ص
+ ض
+ ط
+ ظ
+ ع
+ غ
+ ف
+ ق
+ ک ك
+ گ
+ ل
+ م
+ ن
+ و
+ ه
+ ی ي
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 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
+}