diff options
Diffstat (limited to 'biblio/bibtex/contrib/iran-bibtex/iran-year.bst')
-rw-r--r-- | biblio/bibtex/contrib/iran-bibtex/iran-year.bst | 5078 |
1 files changed, 5078 insertions, 0 deletions
diff --git a/biblio/bibtex/contrib/iran-bibtex/iran-year.bst b/biblio/bibtex/contrib/iran-bibtex/iran-year.bst new file mode 100644 index 0000000000..06bae75f44 --- /dev/null +++ b/biblio/bibtex/contrib/iran-bibtex/iran-year.bst @@ -0,0 +1,5078 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% This file is “iran-year.bst”, v0.1.0 (2024/01/8) +%% generated with the DOCSTRIP utility, then modified to support +%% bilingual (English/Latin, and Persian/Farsi) in accordance with the +%% “Iran Manual of Style Citation Guide” (1st edn., 2016). +%% +%% +%% +%% Copyright (c) 2023-2024 Farshad Rasuli <farshad.rasuli@gmail.com> +%% +%% 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 BibTeX bibliography style (bst) file is part of +%% the “iran-bibtex” package. +%% +%% CTAN catalog: https://ctan.org/pkg/iran-bibtex +%% CTAN archive: https://ctan.org/tex-archive/biblio/bibtex/contrib/iran-bibtex +%% Repository: https://github.com/farshadrasuli/iran-bibtex +%% Bug tracker: https://github.com/farshadrasuli/iran-bibtex/issues +%% +%% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +%%----------------------------------------------------------------------------- +%% This bibliography style file is intended for texts in 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 is equal to \citep command): +%% \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) +%% \citet{key} => Jones et al. (1990) +%% \citet*{key} => Jones, Baker, and Smith (1990) +%% \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 + comment % the added field + 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 + issue % the added field + 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 +} + + + + + +% Logical operators + +FUNCTION {not} +{ + { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ + 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ + { pop$ #1 } + 'skip$ + if$ +} + + + + + + +% Check for language 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.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.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.editedby} +{ + 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.nr} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.number} +{ + is.language.persian + {"ش."} + {"no."} + if$ +} + +FUNCTION {bbl.of} +{ + is.language.persian + {"از"} + {"of"} + if$ +} + +FUNCTION {bbl.page} +{ + is.language.persian + {"ص"} + {"p."} + if$ +} + +FUNCTION {bbl.pages} +{ + is.language.persian + {"صص"} + {"pp."} + 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 + {"گزارش"} + {"tech. rep."} + if$ +} + +FUNCTION {bbl.thesis} +{ + is.language.persian + {"پایاننامه"} + {"Thesis"} + if$ +} + +FUNCTION {bbl.translator} +{ + is.language.persian + {"مترجم"} + {"trans."} + 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$ +} + + + + + +% 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 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$ " " 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 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$ +} + + + +FUNCTION {either.or.check} +{ + empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + + + + + +% Functions to control the print format of entries + +FUNCTION {new.block} +{ + output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + + + +FUNCTION {new.block.checkb} +{ + empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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 {capitalize} +{ "u" change.case$ "t" change.case$ } + + + +FUNCTION {date.block} +{ + new.block +} + + + +FUNCTION {emphasize} +{ + duplicate$ empty$ + { pop$ "" } + { "{\it " swap$ * "}" * } + if$ +} + + + +FUNCTION {field.or.null} +{ + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + + + +FUNCTION {no.blank.or.punct} +{ + "\hspace{0pt}" * before.all 'output.state := +} + + + +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 {separate.by.space} +{ " " swap$ * " " * } + + + +FUNCTION {space.word} +{ " " swap$ * " " * } + + + +FUNCTION {tie.or.space.prefix} +{ + duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + + + +FUNCTION {word.in} +{ + output.state mid.sentence = + { bbl.in " " * } + { bbl.in capitalize " " * } + if$ +} + + + + + +% Functions to format names + +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 {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$ +} + + + +STRINGS {oldname} + +FUNCTION {name.or.dash} +{ + 's := + oldname empty$ + { s 'oldname := s } + { + s oldname = + { "---{}---{}---" } + { s 'oldname := s } + if$ + } + if$ +} + + + + + +% Functions to create the short name label for the entry + +FUNCTION {label.and} +{ + is.language.persian + { "و" } + { + authorfa missing$ + { "and" } + { "و" } + if$ + } + if$ +} + + + +FUNCTION {label.andothers} +{ + is.language.persian + { "و~دیگران" } + { + authorfa missing$ + { "and~others" } + { "و~دیگران" } + if$ + } + if$ +} + + + +FUNCTION {label.comma} +{ + is.language.persian + { "،" } + { + authorfa missing$ + { "," } + { "،" } + if$ + } + if$ +} + + + +FUNCTION {label.etal} +{ + is.language.persian + { "و~همکاران" } + { + authorfa missing$ + { "et~al." } + { "و~همکاران" } + if$ + } + if$ +} + + + +INTEGERS { is.authorfa.exist } + +FUNCTION {format.short.label.names} +{ + 's := + "" '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.comma * label.and separate.by.space * s #2 "{vv~}{ll}" format.name$ * + } + if$ + } + { + s #3 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * label.etal * + } + { + label.comma * " " * s #2 "{vv~}{ll}" format.name$ * + label.comma * label.and separate.by.space * s #3 "{vv~}{ll}" format.name$ * + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + editor empty$ not + { editor format.short.label.names } + { + compiler empty$ not + { compiler format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.short.label.names} +{ + authorfa empty$ not + { authorfa format.short.label.names } + { + author empty$ not + { author format.short.label.names } + { + translator empty$ not + { translator format.short.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.short.label.names} +{ + type$ "book" = + 'book.short.label.names + { + type$ "incollection" = + 'incoll.short.label.names + { + type$ "article" = + 'article.short.label.names + { + type$ "proceedings" = + 'proc.short.label.names + { + type$ "inproceedings" = + 'inproc.short.label.names + { + type$ "conference" = + 'conf.short.label.names + { + type$ "inbook" = + 'author.editor.key.short.label.names + 'author.key.short.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + 'short.list := +} + + + + + +% Functions to create the full name label for the entry + +FUNCTION {format.full.label.names} +{ + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { + namesleft #0 > + } + { + s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { + label.comma * " " * t * + } + { + s nameptr "{ll}" format.name$ + duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + numnames #2 > + { label.comma * } + 'skip$ + if$ + label.and + separate.by.space * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + + + +FUNCTION {author.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {author.editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {editor.key.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {book.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {incoll.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {article.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + editor empty$ not + { editor format.full.label.names } + { + compiler empty$ not + { compiler format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.full.label.names} +{ + authorfa empty$ not + { authorfa format.full.label.names } + { + author empty$ not + { author format.full.label.names } + { + translator empty$ not + { translator format.full.label.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {make.full.label.names} +{ + type$ "book" = + 'book.full.label.names + { + type$ "incollection" = + 'incoll.full.label.names + { + type$ "article" = + 'article.full.label.names + { + type$ "proceedings" = + 'proc.full.label.names + { + type$ "inproceedings" = + 'inproc.full.label.names + { + type$ "conference" = + 'conf.full.label.names + { + type$ "inbook" = + 'author.editor.key.full.label.names + 'author.key.full.label.names + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ +} + + + + + +% Functions to create the label of the entry + +FUNCTION {calc.label} +{ + make.short.label.names + short.list "(" * + translateyear empty$ + { + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + { + 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$ + } + { + translateyear duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + 'label := +} + + + + + +% Functions to open, and close the bibitem + +FUNCTION {begin.bibitem} +{ + newline$ + is.language.persian + { + "\bibitem[{" write$ + } + { + "\begin{LTRbibitems}\resetlatinfont" write$ + newline$ + "\bibitem[{" write$ + } + if$ + label write$ + ")" + make.full.label.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + + + +FUNCTION {end.bibitem} +{ + add.period$ write$ + newline$ + is.language.persian + 'skip$ + { + "\end{LTRbibitems}" write$ + newline$ + } + if$ +} + + + + + +% Functions to format fields + +FUNCTION {field.afterword} +{ + afterword empty$ not + { + afterword "afterword" format.names.ed + bbl.afterwordby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.author} +{ author "author" format.names } + + + +FUNCTION {field.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} + + + +FUNCTION {field.by} +{ + by empty$ not + { + by "by" format.names.ed + bbl.by " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.collaboration} +{ + collaboration empty$ not + { + collaboration "collaboration" format.names.ed + bbl.incollaborationwith capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.comment} +{ + comment +} + + + +FUNCTION {field.commentator} +{ + commentator empty$ not + { + commentator "commentator" format.names.ed + bbl.commentatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {get.bbl.compiler} +{ + compiler num.names$ #1 > + 'bbl.compilers + 'bbl.compiler + if$ +} + +FUNCTION {field.compiler} +{ + compiler "compiler" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.compiler * + } + if$ +} + + + +FUNCTION {field.compiler.compiledby} +{ + compiler empty$ not + { + compiler "compiler" format.names.ed + bbl.compiledby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.doi} +{ + doi empty$ + { "" } + { + bbl.doi "u" change.case$ ":\doi{" * doi * "}" * + } + if$ +} + + + +FUNCTION {field.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 {get.bbl.editor} +{ + editor num.names$ #1 > + 'bbl.editors + 'bbl.editor + if$ +} + +FUNCTION {field.editor} +{ + editor "editor" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.editor * + } + if$ +} + + + +FUNCTION {field.editor.editedby} +{ + editor empty$ not + { + editor "editor" format.names.ed + bbl.editedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.eprint} +{ + eprint duplicate$ empty$ + 'skip$ + { + "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.howpublished} +{ + howpublished +} + + + +FUNCTION {field.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$ +} + + + +FUNCTION {field.introduction} +{ + introduction empty$ not + { + introduction "introduction" format.names.ed + bbl.introby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.isbn} +{ + isbn "isbn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.isbn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.issn} +{ + issn "issn" bibinfo.check + duplicate$ empty$ + 'skip$ + { + bbl.issn "u" change.case$ ": " * swap$ * + } + if$ +} + + + +FUNCTION {field.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 {field.organization} +{ + organization "organization" bibinfo.check +} + + + +INTEGERS { multiresult } + +FUNCTION {field.pages.check.multipage} +{ + '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 {field.pages} +{ + pages duplicate$ empty$ + 'skip$ + { + duplicate$ field.pages.check.multipage + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} + + + +FUNCTION {field.preface} +{ + preface empty$ not + { + preface "preface" format.names.ed + bbl.prefaceby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.title} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.btitle} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {field.title.dqoute} +{ + title + duplicate$ empty$ + 'skip$ + { bbl.dquote } + if$ +} + + + +FUNCTION {field.title.emph} +{ + title "title" bibinfo.check + duplicate$ empty$ + 'skip$ + { emphasize } + if$ +} + + + +FUNCTION {get.bbl.translator} +{ + translator num.names$ #1 > + 'bbl.translators + 'bbl.translator + if$ +} + +FUNCTION {field.translator} +{ + translator "translator" format.names + duplicate$ empty$ + 'skip$ + { + bbl.comma * " " * get.bbl.translator * + } + if$ +} + + +FUNCTION {field.translateyear} +{ + translateyear empty$ not + { + translateyear + } + { "" } + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {field.translator.translatedby} +{ + translator empty$ not + { + translator "translator" format.names.ed + bbl.translatedby capitalize " " * swap$ * + } + { "" } + if$ +} + + + +FUNCTION {field.url} +{ + url duplicate$ empty$ + { pop$ "" } + { + bbl.url "u" change.case$ ": \url{" * swap$ * "}" * + } + if$ +} + + + +FUNCTION {field.urldate} +{ + urldate duplicate$ empty$ + { pop$ "" } + { bbl.retrieved capitalize " " * swap$ * } + if$ +} + + + +FUNCTION {field.bvolume} +{ + volume empty$ + { "" } + { + bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ + 'pop$ + { emphasize ", " * swap$ * } + if$ + "volume and number" number either.or.check + } + if$ +} + + + +FUNCTION {field.year} +{ + year "year" bibinfo.check + duplicate$ empty$ + { + } + 'skip$ + if$ + before.all 'output.state := + after.sentence 'output.state := +} + + + +FUNCTION {in.ed.field.booktitle} % NOT USED +{ + field.booktitle + duplicate$ empty$ + 'skip$ + { + field.bvolume + duplicate$ empty$ + 'pop$ + { bbl.comma " " * swap$ * * } + if$ + editor "editor" format.names.ed + duplicate$ empty$ + 'pop$ + { + bbl.editedby capitalize " " * swap$ * + swap$ + add.period$ " " * swap$ * + } + if$ + word.in swap$ * + } + if$ +} + + + + + +% Functions to format combined fields + +FUNCTION {fields.journal.pages} +{ + pages duplicate$ empty$ 'pop$ + { + swap$ duplicate$ empty$ + { + pop$ pop$ field.pages + } + { + ": " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} + + + +FUNCTION {fields.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 {fields.number.series} +{ + volume empty$ + { + number empty$ + { series field.or.null } + { + series empty$ + { number "number" bibinfo.check } + { + output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {fields.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 {fields.publisher.address} +{ + publisher "publisher" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.organization.address} +{ + organization "organization" bibinfo.check fields.org.or.pub +} + + + +FUNCTION {fields.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 {fields.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$ + { fields.journal.pages } + { fields.journal.eid } + if$ +} + + + +FUNCTION {fields.chapter.pages} +{ + chapter empty$ + 'field.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 * " " * field.pages * } + if$ + } + if$ +} + + + + + +% Functions to format combined fields for specific entry + +FUNCTION {book.field.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 {book.fields.volume.series.number} +{ + volume empty$ not + { + volumes empty$ not + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * volumes * + } + if$ + } + if$ + } + { + series empty$ not + { + number empty$ not + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + " " * number * + } + { + bbl.volume capitalize "~" * volume * + " " * bbl.of * " " * series emphasize * + } + if$ + } + { + number empty$ not + { + bbl.volume capitalize "~" * volume * add.period$ + " " * bbl.number * "~" * number * + } + { + bbl.volume capitalize "~" * 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 {incoll.fields.chapter.booktitle.volume.pages} +{ + booktitle empty$ not + { + chapter empty$ not + { + bbl.chapter capitalize "~" * chapter * + " " * bbl.in * " " * field.booktitle * + pages empty$ not + { + bbl.comma * " " * pages * add.period$ + } + { + add.period$ + } + if$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + { + word.in field.booktitle * + pages empty$ not + { + volume empty$ not + { + volumes empty$ not + { + " " * volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + " " * volume * ": " * pages * add.period$ + } + if$ + } + { + volumes empty$ not + { + bbl.comma * " " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + bbl.comma * " " * pages * add.period$ + } + if$ + } + if$ + } + { + add.period$ + volume empty$ not + { + volumes empty$ not + { + " " * bbl.volume capitalize * "~" * volume * + " " * bbl.of * " " * volumes * add.period$ + } + { + " " * bbl.volume capitalize * "~" * volume * add.period$ + } + if$ + } + { + volumes empty$ not + { + " " * volumes * "~" * bbl.volumes * add.period$ + } + { + skip$ + } + if$ + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +INTEGERS { field.series.emph } +FUNCTION {incoll.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + compiler empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + editor empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + if$ + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {incoll.field.crossref} +{ + word.in " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + + + +FUNCTION {article.field.journal} +{ + journal remove.dots emphasize +} + + + +FUNCTION {article.fields.jour.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + article.field.journal * + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + " " * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + " " * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + " " * volume * ": " * + pages * + } + { + " " * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.number * "~" * number * ": " * + pages * + } + { + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {article.fields.issn.vol.num.pp} +{ + journal empty$ not + { + issue empty$ not + { issue bbl.comma * " " *} + { "" } + if$ + volume empty$ not + { + number empty$ not + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * "~" * + "(" * number * ")" * ": " * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * bbl.comma * + " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + bbl.comma * " " * bbl.volume * "~" * volume * ":~" * + pages * + } + { + bbl.comma * " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + number empty$ not + { + pages empty$ not + { + bbl.number * "~" * number * ": " * + pages * + } + { + bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + pages * + } + 'skip$ + if$ + } + if$ + } + if$ + } + { + "journal" output.check + } + if$ +} + + + +FUNCTION {proc.fields.org.publisher.address} +{ + organization empty$ not + { + publisher empty$ not + { + address empty$ not + { + organization add.period$ + address * ": " * publisher * + } + { + organization add.period$ + publisher * + } + if$ + } + { + address empty$ not + { + organization + bbl.comma * " " * address * + } + { + organization + } + if$ + } + if$ + } + { + publisher empty$ not + { + address empty$ not + { address ": " * publisher *} + { publisher } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.fields.booktitle.volume.pages} +{ + booktitle empty$ not + { + volume empty$ not + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * add.period$ + " " * volumes * "~" * bbl.volumes * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * bbl.of * " " * volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + volume * ": " * pages * + } + { + field.booktitle add.period$ + " " * bbl.volume * "~" * volume * + } + if$ + } + if$ + } + { + volumes empty$ not + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * add.period$ + volumes * "~" * bbl.volumes + } + { + field.booktitle " " * add.period$ + " " * volumes * "~" * bbl.volumes * + } + if$ + } + { + pages empty$ not + { + field.booktitle " " * + bbl.comma * " " * pages * + } + { + field.booktitle + } + if$ + } + if$ + } + if$ + } + { + "" + } + if$ +} + + + +FUNCTION {inproc.fields.series.number} +{ + author empty$ not + { + translator empty$ not + { #1 'field.series.emph := } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + } + { + edition empty$ not + { #1 } + { #0 } + if$ + impression empty$ not + { #1 } + { #0 } + if$ + + 'field.series.emph := + } + if$ + series empty$ not + { + field.series.emph #0 > + { + number empty$ not + { series emphasize " " * number * } + { series emphasize } + if$ + } + { + number empty$ not + { series " " * number * } + { series } + if$ + } + if$ + } + { + number empty$ not + { bbl.number capitalize "~" * number * } + { "" } + if$ + } + if$ +} + + + +FUNCTION {inproc.field.crossref} { incoll.field.crossref } + + + +FUNCTION {conf.fields.series.number.pages} +{ + series empty$ not + { + number empty$ not + { + pages empty$ not + { + series + bbl.comma * " " * bbl.number * "~" * number * + bbl.comma * " " * pages * + } + { + series + bbl.comma * " " * bbl.number * "~" * number * + } + if$ + } + { + pages empty$ not + { + series + bbl.comma * " " * pages * + } + { series } + if$ + } + if$ + } + { "" } + if$ +} + + + +FUNCTION {conf.fields.org.publisher.address} { proc.fields.org.publisher.address } + + + +FUNCTION {thesis.field.type} +{ + type duplicate$ empty$ + 'pop$ + { + swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} + + + +FUNCTION {thesis.fields.school.type.address} +{ + type empty$ + { + type$ "mastersthesis" = + { bbl.mthesis "t" change.case$ } + { + type$ "phdthesis" = + { bbl.phdthesis "t" change.case$ } + { bbl.thesis "t" change.case$ } + if$ + } + if$ + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + { + type "~" = + { + school empty$ not + { + address empty$ not + { school bbl.comma * " " * address * } + { school } + if$ + } + { + address empty$ not + { address } + { "" } + if$ + } + if$ + } + { + type + school empty$ not + { + address empty$ not + { bbl.comma * " " * school * bbl.comma * " " * address * } + { bbl.comma * " " * school * } + if$ + } + { + address empty$ not + { bbl.comma * address * } + { add.period$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {unpub.field.title} +{ + title empty$ not + { title bbl.dquote } + 'skip$ + if$ +} + + + +FUNCTION {misc.field.title} +{ + title empty$ not + { title } + 'skip$ + if$ +} + + + + + +% Functions to format entries based on type (compatible entries) + +FUNCTION {book} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.editor.editedby output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + crossref missing$ + { + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.comment output + new.sentence field.by output + new.sentence book.fields.volume.series.number output + new.sentence field.collaboration output + new.sentence field.commentator output + new.sentence field.introduction output + new.sentence field.preface output + new.sentence field.afterword output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block book.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {incollection} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, and compiler fields are empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + crossref missing$ + { + new.sentence field.by output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence incoll.fields.series.number output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { %%% if author, compiler, and editor fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, compiler, editor, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence incoll.fields.chapter.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence incoll.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + new.block incoll.field.crossref output.nonnull + } + if$ + } + { + "author, compiler, editor, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {article} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with editor + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and editor are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.jour.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, editor, and translator are empty, proceeds with key + key empty$ not + { + article.field.journal output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence field.by output + crossref missing$ + { + new.sentence field.editor.editedby output + new.sentence article.fields.issn.vol.num.pp output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + article.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {proceedings} +{ + begin.bibitem + editor empty$ not + { + field.editor output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence field.compiler.compiledby output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor field is empty, proceeds with compiler + compiler empty$ not + { + field.compiler output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if editor, and compiler fields are empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.emph "title" output.check + new.sentence field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + key empty$ not + { + field.title.emph "title" output.check + name.or.dash + field.year extra.label * "year" output.check + new.block field.edition output + new.sentence field.impression output + new.sentence book.fields.volume.series.number output + new.sentence proc.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + "editor, compiler, translator, and key" output.check + } + if$ + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {inproceedings} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author field is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator fields are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence inproc.fields.booktitle.volume.pages output + new.sentence field.edition output + new.sentence field.impression output + new.sentence inproc.fields.series.number output + new.sentence field.compiler.compiledby output + new.sentence field.editor.editedby output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.isbn output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {conference} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute "title" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block field.title.dqoute "title" output.check + new.sentence field.by output + new.sentence field.year output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + crossref missing$ + { + new.sentence conf.fields.series.number.pages output + new.sentence field.editor.editedby output + new.sentence conf.fields.org.publisher.address output + new.sentence field.note output + new.sentence field.issn output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { + inproc.field.crossref output.nonnull + field.pages output + } + if$ + } + { + "author, translator, and key" output.check + } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {thesis} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block field.title.dqoute output + new.sentence field.comment output + new.sentence thesis.fields.school.type.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {mastersthesis} { thesis } + + + +FUNCTION {phdthesis} { thesis } + + + +FUNCTION {unpublished} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with translator + translator empty$ not + { + field.translator output.nonnull + name.or.dash + new.sentence field.translateyear extra.label * output + new.block unpub.field.title output + new.sentence field.comment output + new.sentence field.by output + new.sentence field.year output + new.sentence field.translator.translatedby output + new.sentence field.translateyear output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author, and translator are empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.comment output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, translator, and key" output.check } + if$ + } + if$ + } + if$ + end.bibitem +} + + + +FUNCTION {misc} +{ + begin.bibitem + author empty$ not + { + field.author output.nonnull + name.or.dash + field.year extra.label * "year" output.check + new.block misc.field.title output + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { %%% if author is empty, proceeds with key + key empty$ not + { + field.title.emph output + name.or.dash + field.year extra.label * "year" output.check + new.sentence field.by output + new.sentence field.howpublished output + new.sentence fields.publisher.address output + new.sentence field.note output + new.sentence field.doi output + new.sentence field.urldate output + new.sentence field.url output + } + { "author, and key" output.check } + if$ + } + if$ + end.bibitem +} + + + + + +% Functions to format entries based on type (incompatible entries) + +FUNCTION {booklet} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + field.isbn output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {inbook} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + author empty$ + { field.editor "author and editor" output.check + editor format.key output + name.or.dash + } + { field.author output.nonnull + name.or.dash + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + crossref missing$ + { + field.bvolume output + fields.chapter.pages output%"chapter and pages" output.check + new.block + fields.number.series output + field.edition output + new.sentence + fields.publisher.address output + } + { + fields.chapter.pages "chapter and pages" output.check + new.block + book.field.crossref output.nonnull + } + if$ + crossref missing$ + { field.isbn output } + 'skip$ + if$ + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {manual} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author output + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle "title" output.check + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + field.edition output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + +FUNCTION {techreport} % THIS ENTRY TYPE IS NOT COMPATIBLE WITH IRAN MANUAL OF STYLE +{ + begin.bibitem + field.author "author" output.check + author format.key output + name.or.dash + field.year extra.label * "year" output.check + date.block + field.btitle + "title" output.check + new.block + fields.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + field.doi output + new.block + field.note output + field.eprint output + field.url output + end.bibitem +} + + + + + +% Function to format entry if the type is not recognized + +FUNCTION {default.type} { misc } + + + + + + + + + + + + + + + + + + + + +% Reading bibliography database (.bib) file + +READ + + +% Function to generate a string that is suitable for sorting purposes + +FUNCTION {sortify} +{ + purify$ + "l" change.case$ +} + + + +% Length of the short name label of the entry + +INTEGERS { len } + +FUNCTION {chop.word} +{ + 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + + + +% Functions for sorting purposes + +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.field.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 {book.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 {incoll.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 {article.sort} +{ + author empty$ not + { + author 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, editor, translator, or key in " cite$ * warning$ + "" + } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {proc.sort} +{ + editor empty$ not + { editor sort.format.names } + { + compiler empty$ not + { compiler sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {inproc.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {conf.sort} +{ + author empty$ not + { author sort.format.names } + { + translator empty$ not + { translator sort.format.names } + { + key empty$ not + 'key + { cite$ #1 #3 substring$ } + if$ + } + if$ + } + if$ +} + + + +FUNCTION {presort} +{ + calc.label + label sortify + " " + * + type$ "book" = + 'book.sort + { + type$ "incollection" = + 'incoll.sort + { + type$ "article" = + 'article.sort + { + type$ "proceedings" = + 'proc.sort + { + type$ "inproceedings" = + 'inproc.sort + { + type$ "conference" = + 'conf.sort + { + type$ "inbook" = + 'author.editor.sort + 'author.sort + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + translateyear empty$ + { year field.or.null } + { + author empty$ not + { year field.or.null } + { + compiler empty$ not + { year field.or.null } + { + editor empty$ not + { year field.or.null } + { + translator empty$ not + { translateyear field.or.null } + { year field.or.null } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + + + +% Sort process + +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 + { "{\extrayearlabelfa{" swap$ * "}}" * } + { "{\extrayearlabelen{" 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 + " " + * + translateyear empty$ + { year field.or.null sortify } + { + author empty$ not + { year field.or.null sortify } + { + compiler empty$ not + { year field.or.null sortify } + { + editor empty$ not + { year field.or.null sortify } + { + translator empty$ not + { translateyear field.or.null sortify } + { year field.or.null sortify } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + swap$ + * + " " + * + cite$ + * + #1 entry.max$ substring$ + 'sort.key$ := +} + + + +ITERATE {bib.sort.order} + +SORT + + + + +% Functions to create bibliography +FUNCTION {begin.bib} +{ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" write$ + newline$ + "% Generated by `iran-year.bst`." write$ + newline$ + "% This bibliography style is part of the `iran-bibtex` package." write$ + newline$ + "% Copyright (c) 2023-2024 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-year.bst'.
\ No newline at end of file |