%% Generated from code/references/latexbangla-natbib.mbs; do not edit the .bst files. %% Localized natbib styles, copyright 2026 Adib Hasan. %% Derived from plainnat, abbrvnat and unsrtnat (Patrick W Daly). %% Use with natbib and latexbangla; English output follows the original style. %% %% Copyright 1993-2007 Patrick W Daly %% Max-Planck-Institut f\"ur Sonnensystemforschung %% Max-Planck-Str. 2 %% D-37191 Katlenburg-Lindau %% Germany %% E-mail: daly@mps.mpg.de %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt; either %% version 1 of the License, or any later version. %% % Version and source file information: % \ProvidesFile{natbst.mbs}[2007/11/26 1.93 (PWD)] % % BibTeX `plainnat' family % version 0.99b for BibTeX versions 0.99a or later, % for LaTeX versions 2.09 and 2e. % % For use with the `natbib.sty' package; emulates the corresponding % member of the `plain' family, but with author-year citations. % % With version 6.0 of `natbib.sty', it may also be used for numerical % citations, while retaining the commands \citeauthor, \citefullauthor, % and \citeyear to print the corresponding information. % % For version 7.0 of `natbib.sty', the KEY field replaces missing % authors/editors, and the date is left blank in \bibitem. % % Includes field EID for the sequence/citation number of electronic journals % which is used instead of page numbers. % % Includes fields ISBN and ISSN. % % Includes field URL for Internet addresses. % % Includes field DOI for Digital Object Idenfifiers. % % Works best with the url.sty package of Donald Arseneau. % % Works with identical authors and year are further sorted by % citation key, to preserve any natural sequence. % ENTRY { address author booktitle chapter doi eid edition editor howpublished institution isbn issn journal key month note number organization pages publisher school series title type url volume year } {} { label extra.label sort.label short.list } 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 := } STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "\emph{" swap$ * "}" * } if$ } INTEGERS { nameptr namesleft numnames } % BibTeX counts bytes, not Unicode characters. Keep UTF-8 given names intact % instead of producing a partial character as an initial in abbrvnatbn. %<*abbrv> STRINGS { name.bytes } INTEGERS { has.utf8 } FUNCTION {contains.utf8} { 'name.bytes := #0 'has.utf8 := { name.bytes empty$ not has.utf8 not and } { name.bytes #1 #1 substring$ chr.to.int$ #127 > { #1 'has.utf8 := } { name.bytes #2 global.max$ substring$ 'name.bytes := } if$ } while$ has.utf8 } % % Only structured display numbers pass through this command. Sort keys, % citation years in bibitem metadata, names, titles and identifiers stay raw. FUNCTION {localize.number} { duplicate$ empty$ 'skip$ { "\latexbanglabibnumber{" swap$ * "}" * } if$ } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % "{ff~}{vv~}{ll}{, jj}" % s nameptr "{ff}" format.name$ contains.utf8 { "{ff~}{vv~}{ll}{, jj}" } { "{f.~}{vv~}{ll}{, jj}" } if$ format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " \latexbanglabibstring{andothers}{et~al}." * } { " \latexbanglabibstring{and}{and} " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.key} { empty$ { key field.or.null } { "" } if$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names } if$ } FUNCTION {format.editors} { editor empty$ { "" } { editor format.names editor num.names$ #1 > { ", \latexbanglabibstring{editors}{editors}" * } { ", \latexbanglabibstring{editor}{editor}" * } if$ } if$ } FUNCTION {format.isbn} { isbn empty$ { "" } { new.block "ISBN " isbn * } if$ } FUNCTION {format.issn} { issn empty$ { "" } { new.block "ISSN " issn * } if$ } FUNCTION {format.url} { url empty$ { "" } { new.block "\latexbanglabibstring{url}{URL} \url{" url * "}" * } if$ } FUNCTION {format.doi} { doi empty$ { "" } { new.block "\doi{" doi * "}" * } if$ } FUNCTION {format.title} { title empty$ { "" } { title "t" change.case$ } if$ } FUNCTION {format.full.names} {'s := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { numnames #2 > { "," * } 'skip$ if$ t "others" = { " \latexbanglabibstring{andothers}{et~al}." * } { " \latexbanglabibstring{and}{and} " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {author.editor.full} { author empty$ { editor empty$ { "" } { editor format.full.names } if$ } { author format.full.names } if$ } FUNCTION {author.full} { author empty$ { "" } { author format.full.names } if$ } FUNCTION {editor.full} { editor empty$ { "" } { editor format.full.names } if$ } FUNCTION {make.full.names} { type$ "book" = type$ "inbook" = or 'author.editor.full { type$ "proceedings" = 'editor.full 'author.full if$ } if$ } FUNCTION {output.bibitem} { newline$ "\bibitem[" write$ label write$ ")" make.full.names duplicate$ short.list = { pop$ } { * } if$ "]{" * write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.date} { year duplicate$ empty$ { "empty year in " cite$ * warning$ pop$ "" } 'skip$ if$ month empty$ 'skip$ { month " " * swap$ * } if$ extra.label * localize.number } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { "\latexbanglabibvolume{" volume * "}{" * series field.or.null * "}" * "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "\latexbanglabibstring{number}{number}" } { "\latexbanglabibstring{number}{Number}" } if$ number localize.number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { " \latexbanglabibstring{in}{in} " * series * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ } { edition "t" change.case$ } if$ "\latexbanglabibedition{" swap$ * "}" * } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "\latexbanglabibstring{pages}{pages}" pages n.dashify localize.number tie.or.space.connect } { "\latexbanglabibstring{page}{page}" pages localize.number tie.or.space.connect } if$ } if$ } FUNCTION {format.eid} { eid empty$ { "" } { "\latexbanglabibstring{article}{art.}" eid tie.or.space.connect } if$ } FUNCTION {format.vol.num.pages} { volume field.or.null localize.number number empty$ 'skip$ { "\penalty0 (" number localize.number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } { ":\penalty0 " * pages n.dashify localize.number * } if$ } if$ } FUNCTION {format.vol.num.eid} { volume field.or.null localize.number number empty$ 'skip$ { "\penalty0 (" number localize.number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ eid empty$ 'skip$ { duplicate$ empty$ { pop$ format.eid } { ":\penalty0 " * eid * } if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "\latexbanglabibstring{chapter}{chapter}" } { type "l" change.case$ } if$ chapter localize.number tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { "\latexbanglabibstring{in}{In} " booktitle emphasize * } { "\latexbanglabibstring{in}{In} " format.editors * ", " * booktitle emphasize * } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { "\latexbanglabibstring{techreport}{Technical Report}" } 'type if$ number empty$ { "t" change.case$ } { number localize.number tie.or.space.connect } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "\latexbanglabibstring{in}{In} \emph{" journal * "}" * } if$ } { "\latexbanglabibstring{in}{In} " } if$ " \citet{" * crossref * "}" * } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "\latexbanglabibstring{in}{In} " } { "\latexbanglabibstring{volume}{Volume}" volume localize.number tie.or.space.connect "\latexbanglabibseriesseparator{}" * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "\emph{" * series * "}" * } if$ } 'skip$ if$ } 'skip$ if$ " \citet{" * crossref * "}" * } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "\latexbanglabibstring{in}{In} \emph{" booktitle * "}" * } if$ } { "\latexbanglabibstring{in}{In} " } if$ } { "\latexbanglabibstring{in}{In} " } if$ " \citet{" * crossref * "}" * } FUNCTION {article} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block crossref missing$ { journal emphasize "journal" output.check eid empty$ { format.vol.num.pages output } { format.vol.num.eid output } if$ format.date "year" output.check } { format.article.crossref output.nonnull eid empty$ { format.pages output } { format.eid output } if$ } if$ format.issn output format.doi output format.url output new.block note output fin.entry } FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block format.btitle "title" output.check crossref missing$ { format.bvolume output new.block format.number.series output new.sentence publisher "publisher" output.check address output } { new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {booklet} { output.bibitem format.authors output author format.key output new.block format.title "title" output.check howpublished address new.block.checkb howpublished output address output format.date output format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ new.block format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check new.block format.number.series output new.sentence publisher "publisher" output.check address output } { format.chapter.pages "chapter and pages" output.check new.block format.book.crossref output.nonnull } if$ format.edition output format.date "year" output.check format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {incollection} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output new.sentence publisher "publisher" output.check address output format.edition output format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output address empty$ { organization publisher new.sentence.checkb organization output publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence organization output publisher output } if$ } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem format.authors output author format.key output new.block format.btitle "title" output.check organization address new.block.checkb organization output address output format.edition output format.date output format.url output new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block "\latexbanglabibstring{mathesis}{Master's thesis}" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check format.url output new.block note output fin.entry } FUNCTION {misc} { output.bibitem format.authors output author format.key output title howpublished new.block.checkb format.title output howpublished new.block.checka howpublished output format.date output format.issn output format.url output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check author format.key output new.block format.btitle "title" output.check new.block "\latexbanglabibstring{phdthesis}{PhD thesis}" format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check format.url output new.block note output fin.entry } FUNCTION {proceedings} { output.bibitem format.editors output editor format.key output new.block format.btitle "title" output.check format.bvolume output format.number.series output address output format.date "year" output.check new.sentence organization output publisher output format.isbn output format.doi output format.url output new.block note output fin.entry } FUNCTION {techreport} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block format.tr.number output.nonnull institution "institution" output.check address output format.date "year" output.check format.url output new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem format.authors "author" output.check author format.key output new.block format.title "title" output.check new.block note "note" output.check format.date output format.url output fin.entry } FUNCTION {default.type} { misc } %MACRO {jan} {"\latexbanglabibstring{january}{January}"} %MACRO {jan} {"\latexbanglabibstring{january}{Jan.}"} %MACRO {feb} {"\latexbanglabibstring{february}{February}"} %MACRO {feb} {"\latexbanglabibstring{february}{Feb.}"} %MACRO {mar} {"\latexbanglabibstring{march}{March}"} %MACRO {mar} {"\latexbanglabibstring{march}{Mar.}"} %MACRO {apr} {"\latexbanglabibstring{april}{April}"} %MACRO {apr} {"\latexbanglabibstring{april}{Apr.}"} MACRO {may} {"\latexbanglabibstring{may}{May}"} MACRO {jun} {"\latexbanglabibstring{june}{June}"} MACRO {jul} {"\latexbanglabibstring{july}{July}"} %MACRO {aug} {"\latexbanglabibstring{august}{August}"} %MACRO {aug} {"\latexbanglabibstring{august}{Aug.}"} %MACRO {sep} {"\latexbanglabibstring{september}{September}"} %MACRO {sep} {"\latexbanglabibstring{september}{Sept.}"} %MACRO {oct} {"\latexbanglabibstring{october}{October}"} %MACRO {oct} {"\latexbanglabibstring{october}{Oct.}"} %MACRO {nov} {"\latexbanglabibstring{november}{November}"} %MACRO {nov} {"\latexbanglabibstring{november}{Nov.}"} %MACRO {dec} {"\latexbanglabibstring{december}{December}"} %MACRO {dec} {"\latexbanglabibstring{december}{Dec.}"} %MACRO {acmcs} {"ACM Computing Surveys"} %MACRO {acmcs} {"ACM Comput. Surv."} %MACRO {acta} {"Acta Informatica"} %MACRO {acta} {"Acta Inf."} %MACRO {cacm} {"Communications of the ACM"} %MACRO {cacm} {"Commun. ACM"} %MACRO {ibmjrd} {"IBM Journal of Research and Development"} %MACRO {ibmjrd} {"IBM J. Res. Dev."} %MACRO {ibmsj} {"IBM Systems Journal"} %MACRO {ibmsj} {"IBM Syst.~J."} %MACRO {ieeese} {"IEEE Transactions on Software Engineering"} %MACRO {ieeese} {"IEEE Trans. Softw. Eng."} %MACRO {ieeetc} {"IEEE Transactions on Computers"} %MACRO {ieeetc} {"IEEE Trans. Comput."} %MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} %MACRO {ieeetcad} {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} %MACRO {ipl} {"Information Processing Letters"} %MACRO {ipl} {"Inf. Process. Lett."} %MACRO {jacm} {"Journal of the ACM"} %MACRO {jacm} {"J.~ACM"} %MACRO {jcss} {"Journal of Computer and System Sciences"} %MACRO {jcss} {"J.~Comput. Syst. Sci."} %MACRO {scp} {"Science of Computer Programming"} %MACRO {scp} {"Sci. Comput. Programming"} %MACRO {sicomp} {"SIAM Journal on Computing"} %MACRO {sicomp} {"SIAM J. Comput."} %MACRO {tocs} {"ACM Transactions on Computer Systems"} %MACRO {tocs} {"ACM Trans. Comput. Syst."} %MACRO {tods} {"ACM Transactions on Database Systems"} %MACRO {tods} {"ACM Trans. Database Syst."} %MACRO {tog} {"ACM Transactions on Graphics"} %MACRO {tog} {"ACM Trans. Gr."} %MACRO {toms} {"ACM Transactions on Mathematical Software"} %MACRO {toms} {"ACM Trans. Math. Softw."} %MACRO {toois} {"ACM Transactions on Office Information Systems"} %MACRO {toois} {"ACM Trans. Office Inf. Syst."} %MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} %MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} %MACRO {tcs} {"Theoretical Computer Science"} %MACRO {tcs} {"Theoretical Comput. Sci."} READ % Normalize UTF-8 digits for sorting/disambiguation; printed fields stay raw. STRINGS { digit.input digit.output digit.head } INTEGERS { digit.index digit.width } % Bengali digits occupy three UTF-8 bytes; other input bytes pass through. FUNCTION {normalize.native.digits} { 'digit.input := "" 'digit.output := #1 'digit.index := { digit.input digit.index #1 substring$ "" = not } { digit.input digit.index #3 substring$ 'digit.head := #1 'digit.width := digit.head "০" = { "0" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "১" = { "1" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "২" = { "2" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৩" = { "3" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৪" = { "4" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৫" = { "5" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৬" = { "6" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৭" = { "7" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৮" = { "8" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.head "৯" = { "9" 'digit.head := #3 'digit.width := } 'skip$ if$ digit.width #1 = { digit.input digit.index #1 substring$ 'digit.head := } 'skip$ if$ digit.output digit.head * 'digit.output := digit.index digit.width + 'digit.index := } while$ digit.output } FUNCTION {sortify} { normalize.native.digits purify$ "l" change.case$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } FUNCTION {format.lab.names} { 's := s #1 "{vv~}{ll}" format.name$ s num.names$ duplicate$ #2 > { pop$ " \latexbanglabibstring{andothers}{et~al}." * } { #2 < 'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { " \latexbanglabibstring{andothers}{et~al}." * } { " \latexbanglabibstring{and}{and} " * s #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ } FUNCTION {author.key.label} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.lab.names } if$ } FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ } FUNCTION {author.key.organization.label} { author empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } 'key if$ } { author format.lab.names } if$ } FUNCTION {editor.key.organization.label} { editor empty$ { key empty$ { organization empty$ { cite$ #1 #3 substring$ } { "The " #4 organization chop.word #3 text.prefix$ } if$ } 'key if$ } { editor format.lab.names } if$ } FUNCTION {calc.short.authors} { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.organization.label { type$ "manual" = 'author.key.organization.label 'author.key.label if$ } if$ } if$ 'short.list := } FUNCTION {calc.label} { calc.short.authors short.list "(" * year duplicate$ empty$ short.list key field.or.null = or { pop$ "" } 'skip$ if$ * 'label := } %<*sorted> FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" % "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := nameptr #1 > { " " * namesleft #1 = t "others" = and { "zzzzz" * } { numnames #2 > nameptr #2 = and { "zz" * year field.or.null * " " * } 'skip$ if$ t sortify * } if$ } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ } FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ } FUNCTION {author.organization.sort} { author empty$ { organization empty$ { key empty$ { "to sort, need author, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { author sort.format.names } if$ } FUNCTION {editor.organization.sort} { editor empty$ { organization empty$ { key empty$ { "to sort, need editor, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { editor sort.format.names } if$ } FUNCTION {presort} { calc.label label sortify " " * type$ "book" = type$ "inbook" = or 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ " " * year field.or.null sortify * " " * cite$ * #1 entry.max$ substring$ 'sort.label := sort.label * #1 entry.max$ substring$ 'sort.key$ := } % %<*unsorted> INTEGERS { seq.num } FUNCTION {init.seq} { #0 'seq.num :=} EXECUTE {init.seq} FUNCTION {int.to.fix} { "000000000" swap$ int.to.str$ * #-1 #10 substring$ } FUNCTION {presort} { calc.label label sortify " " * seq.num #1 + 'seq.num := seq.num int.to.fix 'sort.label := sort.label * #1 entry.max$ substring$ 'sort.key$ := } % ITERATE {presort} SORT STRINGS { longest.label last.label next.extra } INTEGERS { longest.label.width last.extra.num number.label } FUNCTION {initialize.longest.label} { "" 'longest.label := #0 int.to.chr$ 'last.label := "" 'next.extra := #0 'longest.label.width := #0 'last.extra.num := #0 'number.label := } FUNCTION {forward.pass} { last.label label normalize.native.digits = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := label normalize.native.digits 'last.label := } if$ number.label #1 + 'number.label := } FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ extra.label 'next.extra := extra.label duplicate$ empty$ 'skip$ { "{\natexlab{" swap$ * "}}" * } if$ 'extra.label := label extra.label * 'label := } EXECUTE {initialize.longest.label} ITERATE {forward.pass} REVERSE {reverse.pass} FUNCTION {bib.sort.order} { sort.label 'sort.key$ := } ITERATE {bib.sort.order} SORT FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\latexbanglanatbibstyle" write$ newline$ "\begin{thebibliography}{" number.label int.to.str$ * "}" * write$ newline$ "\providecommand{\natexlab}[1]{#1}" write$ newline$ "\providecommand{\url}[1]{\texttt{#1}}" write$ newline$ "\expandafter\ifx\csname urlstyle\endcsname\relax" write$ newline$ " \providecommand{\doi}[1]{doi: #1}\else" write$ newline$ " \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi" write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib}