]> AND Private Git Repository - LiCO.git/blob - PeCO-EO/gENO.bst
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Updates completed
[LiCO.git] / PeCO-EO / gENO.bst
1 %%\r
2 %% This is file `gENO.bst',\r
3 %% generated with the docstrip utility.\r
4 %% ----------------------------------------\r
5 %%\r
6 %% *** BibTeX style for Engineering Optimization ***\r
7 %%\r
8  % ===============================================================\r
9  % IMPORTANT NOTICE:\r
10  % This bibliographic style (bst) file has been generated from one or\r
11  % more master bibliographic style (mbs) files.\r
12  %\r
13  % This generated file can be redistributed and/or modified under the terms\r
14  % of the LaTeX Project Public License Distributed from CTAN\r
15  % archives in directory macros/latex/base/lppl.txt; either\r
16  % version 1 of the License, or any later version.\r
17  % ===============================================================\r
18  % Name and version information of the main mbs file:\r
19  % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)]\r
20  %   For use with BibTeX version 0.99a or later\r
21  %   Copyright 1994-2011 Patrick W Daly\r
22  %-------------------------------------------------------------------\r
23  % This bibliography style file is intended for texts in ENGLISH\r
24  % This is an author-year citation style bibliography. As such, it is\r
25  % non-standard LaTeX, and requires a special package file to function properly.\r
26  % Such a package is    natbib.sty   by Patrick W. Daly\r
27  % The form of the \bibitem entries is\r
28  %  \bibitem[Jones et al.(1990)]{key}...\r
29  %  \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...\r
30  % The essential feature is that the label (the part in brackets) consists\r
31  % of the author names, as they should appear in the citation, with the year\r
32  % in parentheses following. There must be no space before the opening\r
33  % parenthesis!\r
34  % With natbib v5.3, a full list of authors may also follow the year.\r
35  % In natbib.sty, it is possible to define the type of enclosures that is\r
36  % really wanted (brackets or parentheses), but in either case, there must\r
37  % be parentheses in the label.\r
38  % The \cite command functions as follows:\r
39  %  \citet{key} ==>>               Jones et al. (1990)\r
40  %  \citet*{key} ==>>              Jones, Baker, and Smith (1990)\r
41  %  \citep{key} ==>>              (Jones et al. 1990)\r
42  %  \citep*{key} ==>>             (Jones, Baker, and Smith 1990)\r
43  %  \citep[chap. 2]{key} ==>>     (Jones et al. 1990, chap. 2)\r
44  %  \citep[e.g.][]{key} ==>>      (e.g. Jones et al. 1990)\r
45  %  \citep[e.g.][32]{key} ==>>    (e.g. Jones et al. 1990, 32)\r
46  %  \citeauthor{key} ==>>          Jones et al.\r
47  %  \citeauthor*{key} ==>>         Jones, Baker, and Smith\r
48  %  \citeyear{key} ==>>            1990\r
49  %---------------------------------------------------------------------\r
50 \r
51 ENTRY\r
52   { address\r
53     archive\r
54     author\r
55     booktitle\r
56     chapter\r
57     collaboration\r
58     doi\r
59     edition\r
60     editor\r
61     eid\r
62     eprint\r
63     howpublished\r
64     institution\r
65     journal\r
66     key\r
67     lastchecked\r
68     location\r
69     month\r
70     note\r
71     number\r
72     numpages\r
73     organization\r
74     pages\r
75     publisher\r
76     school\r
77     series\r
78     title\r
79     type\r
80     url\r
81     volume\r
82     year\r
83   }\r
84   {}\r
85   { label extra.label sort.label short.list }\r
86 INTEGERS { output.state before.all mid.sentence after.sentence after.block }\r
87 FUNCTION {init.state.consts}\r
88 { #0 'before.all :=\r
89   #1 'mid.sentence :=\r
90   #2 'after.sentence :=\r
91   #3 'after.block :=\r
92 }\r
93 STRINGS { s t}\r
94 FUNCTION {output.nonnull}\r
95 { 's :=\r
96   output.state mid.sentence =\r
97     { ". " * write$ }\r
98     { output.state after.block =\r
99         { add.period$ write$\r
100           newline$\r
101           "\newblock " write$\r
102         }\r
103         { output.state before.all =\r
104             'write$\r
105             { add.period$ " " * write$ }\r
106           if$\r
107         }\r
108       if$\r
109       mid.sentence 'output.state :=\r
110     }\r
111   if$\r
112   s\r
113 }\r
114 FUNCTION {output}\r
115 { duplicate$ empty$\r
116     'pop$\r
117     'output.nonnull\r
118   if$\r
119 }\r
120 FUNCTION {output.check}\r
121 { 't :=\r
122   duplicate$ empty$\r
123     { pop$ "empty " t * " in " * cite$ * warning$ }\r
124     'output.nonnull\r
125   if$\r
126 }\r
127 FUNCTION {fin.entry}\r
128 { add.period$\r
129   write$\r
130   newline$\r
131 }\r
132 \r
133 FUNCTION {new.block}\r
134 { output.state before.all =\r
135     'skip$\r
136     { after.block 'output.state := }\r
137   if$\r
138 }\r
139 FUNCTION {new.sentence}\r
140 { output.state after.block =\r
141     'skip$\r
142     { output.state before.all =\r
143         'skip$\r
144         { after.sentence 'output.state := }\r
145       if$\r
146     }\r
147   if$\r
148 }\r
149 FUNCTION {add.blank}\r
150 {  " " * before.all 'output.state :=\r
151 }\r
152 \r
153 FUNCTION {date.block}\r
154 {\r
155   skip$\r
156 }\r
157 \r
158 FUNCTION {not}\r
159 {   { #0 }\r
160     { #1 }\r
161   if$\r
162 }\r
163 FUNCTION {and}\r
164 {   'skip$\r
165     { pop$ #0 }\r
166   if$\r
167 }\r
168 FUNCTION {or}\r
169 {   { pop$ #1 }\r
170     'skip$\r
171   if$\r
172 }\r
173 FUNCTION {non.stop}\r
174 { duplicate$\r
175    "}" * add.period$\r
176    #-1 #1 substring$ "." =\r
177 }\r
178 \r
179 FUNCTION {new.block.checkb}\r
180 { empty$\r
181   swap$ empty$\r
182   and\r
183     'skip$\r
184     'new.block\r
185   if$\r
186 }\r
187 FUNCTION {field.or.null}\r
188 { duplicate$ empty$\r
189     { pop$ "" }\r
190     'skip$\r
191   if$\r
192 }\r
193 FUNCTION {emphasize}\r
194 { duplicate$ empty$\r
195     { pop$ "" }\r
196     { "\emph{" swap$ * "}" * }\r
197   if$\r
198 }\r
199 FUNCTION {tie.or.space.prefix}\r
200 { duplicate$ text.length$ #3 <\r
201     { "~" }\r
202     { " " }\r
203   if$\r
204   swap$\r
205 }\r
206 \r
207 FUNCTION {capitalize}\r
208 { "u" change.case$ "t" change.case$ }\r
209 \r
210 FUNCTION {space.word}\r
211 { " " swap$ * " " * }\r
212  % Here are the language-specific definitions for explicit words.\r
213  % Each function has a name bbl.xxx where xxx is the English word.\r
214  % The language selected here is ENGLISH\r
215 FUNCTION {bbl.and}\r
216 { "and"}\r
217 \r
218 FUNCTION {bbl.etal}\r
219 { "et~al." }\r
220 \r
221 FUNCTION {bbl.editors}\r
222 { "eds" }\r
223 \r
224 FUNCTION {bbl.editor}\r
225 { "ed." }\r
226 \r
227 FUNCTION {bbl.edby}\r
228 { "edited by" }\r
229 \r
230 FUNCTION {bbl.edition}\r
231 { "ed" }\r
232 \r
233 FUNCTION {bbl.volume}\r
234 { "Vol." }\r
235 \r
236 FUNCTION {bbl.of}\r
237 { "of" }\r
238 \r
239 FUNCTION {bbl.number}\r
240 { "no." }\r
241 \r
242 FUNCTION {bbl.nr}\r
243 { "no." }\r
244 \r
245 FUNCTION {bbl.in}\r
246 { "In" }\r
247 \r
248 FUNCTION {bbl.pages}\r
249 { "" }\r
250 \r
251 FUNCTION {bbl.page}\r
252 { "" }\r
253 \r
254 FUNCTION {bbl.eidpp}\r
255 { "pages" }\r
256 \r
257 FUNCTION {bbl.chapter}\r
258 { "chap." }\r
259 \r
260 FUNCTION {bbl.techrep}\r
261 { "Tech. Rep." }\r
262 \r
263 FUNCTION {bbl.mthesis}\r
264 { "Master's thesis" }\r
265 \r
266 FUNCTION {bbl.phdthesis}\r
267 { "Ph.D. thesis" }\r
268 \r
269 FUNCTION {bbl.first}\r
270 { "1st" }\r
271 \r
272 FUNCTION {bbl.second}\r
273 { "2nd" }\r
274 \r
275 FUNCTION {bbl.third}\r
276 { "3rd" }\r
277 \r
278 FUNCTION {bbl.fourth}\r
279 { "4th" }\r
280 \r
281 FUNCTION {bbl.fifth}\r
282 { "5th" }\r
283 \r
284 FUNCTION {bbl.st}\r
285 { "st" }\r
286 \r
287 FUNCTION {bbl.nd}\r
288 { "nd" }\r
289 \r
290 FUNCTION {bbl.rd}\r
291 { "rd" }\r
292 \r
293 FUNCTION {bbl.th}\r
294 { "th" }\r
295 \r
296 MACRO {jan} {"Jan."}\r
297 \r
298 MACRO {feb} {"Feb."}\r
299 \r
300 MACRO {mar} {"Mar."}\r
301 \r
302 MACRO {apr} {"Apr."}\r
303 \r
304 MACRO {may} {"May"}\r
305 \r
306 MACRO {jun} {"Jun."}\r
307 \r
308 MACRO {jul} {"Jul."}\r
309 \r
310 MACRO {aug} {"Aug."}\r
311 \r
312 MACRO {sep} {"Sep."}\r
313 \r
314 MACRO {oct} {"Oct."}\r
315 \r
316 MACRO {nov} {"Nov."}\r
317 \r
318 MACRO {dec} {"Dec."}\r
319 \r
320 FUNCTION {eng.ord}\r
321 { duplicate$ "1" swap$ *\r
322   #-2 #1 substring$ "1" =\r
323      { bbl.th * }\r
324      { duplicate$ #-1 #1 substring$\r
325        duplicate$ "1" =\r
326          { pop$ bbl.st * }\r
327          { duplicate$ "2" =\r
328              { pop$ bbl.nd * }\r
329              { "3" =\r
330                  { bbl.rd * }\r
331                  { bbl.th * }\r
332                if$\r
333              }\r
334            if$\r
335           }\r
336        if$\r
337      }\r
338    if$\r
339 }\r
340 \r
341 MACRO {acmcs} {"ACM Computing Surveys"}\r
342 \r
343 MACRO {acta} {"Acta Informatica"}\r
344 \r
345 MACRO {cacm} {"Communications of the ACM"}\r
346 \r
347 MACRO {ibmjrd} {"IBM Journal of Research and Development"}\r
348 \r
349 MACRO {ibmsj} {"IBM Systems Journal"}\r
350 \r
351 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}\r
352 \r
353 MACRO {ieeetc} {"IEEE Transactions on Computers"}\r
354 \r
355 MACRO {ieeetcad}\r
356  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}\r
357 \r
358 MACRO {ipl} {"Information Processing Letters"}\r
359 \r
360 MACRO {jacm} {"Journal of the ACM"}\r
361 \r
362 MACRO {jcss} {"Journal of Computer and System Sciences"}\r
363 \r
364 MACRO {scp} {"Science of Computer Programming"}\r
365 \r
366 MACRO {sicomp} {"SIAM Journal on Computing"}\r
367 \r
368 MACRO {tocs} {"ACM Transactions on Computer Systems"}\r
369 \r
370 MACRO {tods} {"ACM Transactions on Database Systems"}\r
371 \r
372 MACRO {tog} {"ACM Transactions on Graphics"}\r
373 \r
374 MACRO {toms} {"ACM Transactions on Mathematical Software"}\r
375 \r
376 MACRO {toois} {"ACM Transactions on Office Information Systems"}\r
377 \r
378 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}\r
379 \r
380 MACRO {tcs} {"Theoretical Computer Science"}\r
381 FUNCTION {bibinfo.check}\r
382 { swap$\r
383   duplicate$ missing$\r
384     {\r
385       pop$ pop$\r
386       ""\r
387     }\r
388     { duplicate$ empty$\r
389         {\r
390           swap$ pop$\r
391         }\r
392         { swap$\r
393           pop$\r
394         }\r
395       if$\r
396     }\r
397   if$\r
398 }\r
399 FUNCTION {bibinfo.warn}\r
400 { swap$\r
401   duplicate$ missing$\r
402     {\r
403       swap$ "missing " swap$ * " in " * cite$ * warning$ pop$\r
404       ""\r
405     }\r
406     { duplicate$ empty$\r
407         {\r
408           swap$ "empty " swap$ * " in " * cite$ * warning$\r
409         }\r
410         { swap$\r
411           pop$\r
412         }\r
413       if$\r
414     }\r
415   if$\r
416 }\r
417 FUNCTION {format.eprint}\r
418 { eprint duplicate$ empty$\r
419     'skip$\r
420     { "\eprint"\r
421       archive empty$\r
422         'skip$\r
423         { "[" * archive * "]" * }\r
424       if$\r
425       "{" * swap$ * "}" *\r
426     }\r
427   if$\r
428 }\r
429 FUNCTION {format.url}\r
430 {\r
431   url\r
432   duplicate$ empty$\r
433     { pop$ "" }\r
434     { "\urlprefix\url{" swap$ * "}" * }\r
435   if$\r
436 }\r
437 \r
438 FUNCTION {format.lastchecked}\r
439 { lastchecked duplicate$ empty$ 'skip$\r
440     {\r
441    "Accessed~" swap$ * %"." *\r
442     }\r
443   if$\r
444 }\r
445 \r
446 INTEGERS { nameptr namesleft numnames }\r
447 \r
448 \r
449 STRINGS  { bibinfo}\r
450 \r
451 FUNCTION {format.names}\r
452 { 'bibinfo :=\r
453   duplicate$ empty$ 'skip$ {\r
454   's :=\r
455   "" 't :=\r
456   #1 'nameptr :=\r
457   s num.names$ 'numnames :=\r
458   numnames 'namesleft :=\r
459     { namesleft #0 > }\r
460     { s nameptr\r
461       duplicate$ #1 >\r
462         { "{ff~}{vv~}{ll}{, jj}" }\r
463         { "{vv~}{ll}{, ff}{, jj}" }\r
464       if$\r
465       format.name$\r
466       bibinfo bibinfo.check\r
467       't :=\r
468       nameptr #1 >\r
469         {\r
470           nameptr #7\r
471           #1 + =\r
472           numnames #0\r
473           #10 +\r
474           > and\r
475             { "others" 't :=\r
476               #1 'namesleft := }\r
477             'skip$\r
478           if$\r
479           namesleft #1 >\r
480             { ", " * t * }\r
481             {\r
482               s nameptr "{ll}" format.name$ duplicate$ "others" =\r
483                 { 't := }\r
484                 { pop$ }\r
485               if$\r
486               "," *\r
487               t "others" =\r
488                 {\r
489                   " " * bbl.etal *\r
490                 }\r
491                 {\r
492                   bbl.and\r
493                   space.word * t *\r
494                 }\r
495               if$\r
496             }\r
497           if$\r
498         }\r
499         't\r
500       if$\r
501       nameptr #1 + 'nameptr :=\r
502       namesleft #1 - 'namesleft :=\r
503     }\r
504   while$\r
505   } if$\r
506 }\r
507 FUNCTION {format.names.ed}\r
508 {\r
509   'bibinfo :=\r
510   duplicate$ empty$ 'skip$ {\r
511   's :=\r
512   "" 't :=\r
513   #1 'nameptr :=\r
514   s num.names$ 'numnames :=\r
515   numnames 'namesleft :=\r
516     { namesleft #0 > }\r
517     { s nameptr\r
518       "{ff~}{vv~}{ll}{, jj}"\r
519       format.name$\r
520       bibinfo bibinfo.check\r
521       't :=\r
522       nameptr #1 >\r
523         {\r
524           namesleft #1 >\r
525             { ", " * t * }\r
526             {\r
527               s nameptr "{ll}" format.name$ duplicate$ "others" =\r
528                 { 't := }\r
529                 { pop$ }\r
530               if$\r
531               numnames #2 >\r
532                 { "," * }\r
533                 'skip$\r
534               if$\r
535               t "others" =\r
536                 {\r
537 \r
538                   " " * bbl.etal *\r
539                 }\r
540                 {\r
541                   bbl.and\r
542                   space.word * t *\r
543                 }\r
544               if$\r
545             }\r
546           if$\r
547         }\r
548         't\r
549       if$\r
550       nameptr #1 + 'nameptr :=\r
551       namesleft #1 - 'namesleft :=\r
552     }\r
553   while$\r
554   } if$\r
555 }\r
556 FUNCTION {format.key}\r
557 { empty$\r
558     { key field.or.null }\r
559     { "" }\r
560   if$\r
561 }\r
562 \r
563 FUNCTION {format.authors}\r
564 { author "author" format.names\r
565     duplicate$ empty$ 'skip$\r
566     { collaboration "collaboration" bibinfo.check\r
567       duplicate$ empty$ 'skip$\r
568         { " (" swap$ * ")" * }\r
569       if$\r
570       *\r
571     }\r
572   if$\r
573 }\r
574 FUNCTION {get.bbl.editor}\r
575 { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }\r
576 \r
577 FUNCTION {format.editors}\r
578 { editor "editor" format.names duplicate$ empty$ 'skip$\r
579     {\r
580       "," *\r
581       " " *\r
582       get.bbl.editor\r
583 %      capitalize\r
584 %   "(" swap$ * ")" *\r
585       *\r
586     }\r
587   if$\r
588 }\r
589 \r
590 FUNCTION {format.doi}\r
591 { doi empty$\r
592     { "" }\r
593     {\r
594       "\doi{" doi * "}" *\r
595     }\r
596   if$\r
597 }\r
598 FUNCTION {format.note}\r
599 {\r
600  note empty$\r
601     { "" }\r
602     { note #1 #1 substring$\r
603       duplicate$ "{" =\r
604         'skip$\r
605         { output.state mid.sentence =\r
606           { "l" }\r
607           { "u" }\r
608         if$\r
609         change.case$\r
610         }\r
611       if$\r
612       note #2 global.max$ substring$ * "note" bibinfo.check\r
613     }\r
614   if$\r
615 }\r
616 \r
617 FUNCTION {format.title}\r
618 { title\r
619   "title" bibinfo.check\r
620   duplicate$ empty$ 'skip$\r
621     {\r
622       "``" swap$ *\r
623       ".'' " *\r
624     }\r
625   if$\r
626 }\r
627 FUNCTION {format.plaintitle}\r
628 { title\r
629   "title" bibinfo.check\r
630   duplicate$ empty$ 'skip$\r
631     {\r
632       "" swap$ *\r
633       ". " *\r
634     }\r
635   if$\r
636 }\r
637 FUNCTION {format.title.dot}\r
638 { title\r
639   "title" bibinfo.check\r
640   duplicate$ empty$ 'skip$\r
641     {\r
642       "``" swap$ *\r
643       "''. " *\r
644     }\r
645   if$\r
646 }\r
647 FUNCTION {end.quote.title}\r
648 { title empty$\r
649     'skip$\r
650     { before.all 'output.state := }\r
651   if$\r
652 }\r
653 FUNCTION {end.quote.btitle}\r
654 { booktitle empty$\r
655     'skip$\r
656     { editor empty$\r
657         { before.all 'output.state := }\r
658         'skip$\r
659       if$\r
660     }\r
661   if$\r
662 }\r
663 FUNCTION {format.full.names}\r
664 {'s :=\r
665  "" 't :=\r
666   #1 'nameptr :=\r
667   s num.names$ 'numnames :=\r
668   numnames 'namesleft :=\r
669     { namesleft #0 > }\r
670     { s nameptr\r
671       "{vv~}{ll}" format.name$\r
672       't :=\r
673       nameptr #1 >\r
674         {\r
675           nameptr #7\r
676           #1 + =\r
677           numnames #0\r
678           #10 +\r
679           > and\r
680             { "others" 't :=\r
681               #1 'namesleft := }\r
682             'skip$\r
683           if$\r
684           namesleft #1 >\r
685             { ", " * t * }\r
686             {\r
687               s nameptr "{ll}" format.name$ duplicate$ "others" =\r
688                 { 't := }\r
689                 { pop$ }\r
690               if$\r
691               t "others" =\r
692                 {\r
693                   " " * bbl.etal *\r
694                 }\r
695                 {\r
696                   numnames #2 >\r
697                     { "," * }\r
698                     'skip$\r
699                   if$\r
700                   bbl.and\r
701                   space.word * t *\r
702                 }\r
703               if$\r
704             }\r
705           if$\r
706         }\r
707         't\r
708       if$\r
709       nameptr #1 + 'nameptr :=\r
710       namesleft #1 - 'namesleft :=\r
711     }\r
712   while$\r
713 }\r
714 \r
715 FUNCTION {author.editor.key.full}\r
716 { author empty$\r
717     { editor empty$\r
718         { key empty$\r
719             { cite$ #1 #3 substring$ }\r
720             'key\r
721           if$\r
722         }\r
723         { editor format.full.names }\r
724       if$\r
725     }\r
726     { author format.full.names }\r
727   if$\r
728 }\r
729 \r
730 FUNCTION {author.key.full}\r
731 { author empty$\r
732     { key empty$\r
733          { cite$ #1 #3 substring$ }\r
734           'key\r
735       if$\r
736     }\r
737     { author format.full.names }\r
738   if$\r
739 }\r
740 \r
741 FUNCTION {editor.key.full}\r
742 { editor empty$\r
743     { key empty$\r
744          { cite$ #1 #3 substring$ }\r
745           'key\r
746       if$\r
747     }\r
748     { editor format.full.names }\r
749   if$\r
750 }\r
751 \r
752 FUNCTION {make.full.names}\r
753 { type$ "book" =\r
754   type$ "inbook" =\r
755   or\r
756     'author.editor.key.full\r
757     { type$ "proceedings" =\r
758         'editor.key.full\r
759         'author.key.full\r
760       if$\r
761     }\r
762   if$\r
763 }\r
764 \r
765 FUNCTION {output.bibitem}\r
766 { newline$\r
767   "\bibitem[" write$\r
768   label write$\r
769   ")" make.full.names duplicate$ short.list =\r
770      { pop$ }\r
771      { * }\r
772    if$\r
773   "]{" * write$\r
774   cite$ write$\r
775   "}" write$\r
776   newline$\r
777   ""\r
778   before.all 'output.state :=\r
779 }\r
780 \r
781 FUNCTION {n.dashify}\r
782 {\r
783   't :=\r
784   ""\r
785     { t empty$ not }\r
786     { t #1 #1 substring$ "-" =\r
787         { t #1 #2 substring$ "--" = not\r
788             { "--" *\r
789               t #2 global.max$ substring$ 't :=\r
790             }\r
791             {   { t #1 #1 substring$ "-" = }\r
792                 { "-" *\r
793                   t #2 global.max$ substring$ 't :=\r
794                 }\r
795               while$\r
796             }\r
797           if$\r
798         }\r
799         { t #1 #1 substring$ *\r
800           t #2 global.max$ substring$ 't :=\r
801         }\r
802       if$\r
803     }\r
804   while$\r
805 }\r
806 \r
807 FUNCTION {word.in}\r
808 { bbl.in\r
809   " " * }\r
810 \r
811 FUNCTION {format.date}\r
812 { year "year" bibinfo.check duplicate$ empty$\r
813     {\r
814       "empty year in " cite$ * "; set to ????" * warning$\r
815        pop$ "????"\r
816     }\r
817     'skip$\r
818   if$\r
819   extra.label *\r
820   before.all 'output.state :=\r
821   after.sentence 'output.state :=\r
822 }\r
823 FUNCTION {format.btitle}\r
824 { title "title" bibinfo.check\r
825   duplicate$ empty$ 'skip$\r
826     {\r
827       emphasize\r
828     }\r
829   if$\r
830 }\r
831 FUNCTION {either.or.check}\r
832 { empty$\r
833     'pop$\r
834     { "can't use both " swap$ * " fields in " * cite$ * warning$ }\r
835   if$\r
836 }\r
837 FUNCTION {format.bvolume}\r
838 { volume empty$\r
839     { " " }\r
840     { bbl.volume volume tie.or.space.prefix\r
841       "volume" bibinfo.check * *\r
842       series "series" bibinfo.check\r
843       duplicate$ empty$ 'pop$\r
844         { swap$ bbl.of space.word * swap$\r
845           emphasize * }\r
846       if$\r
847       "volume and number" number either.or.check\r
848     }\r
849   if$\r
850 }\r
851 FUNCTION {format.number.series}\r
852 { volume empty$\r
853     { number empty$\r
854         { series field.or.null }\r
855         { output.state mid.sentence =\r
856             { bbl.number }\r
857             { bbl.number capitalize }\r
858           if$\r
859           number tie.or.space.prefix "number" bibinfo.check * *\r
860           series empty$\r
861             { "there's a number but no series in " cite$ * warning$ }\r
862             { bbl.in space.word *\r
863               series "series" bibinfo.check *\r
864             }\r
865           if$\r
866         }\r
867       if$\r
868     }\r
869     { "" }\r
870   if$\r
871 }\r
872 FUNCTION {is.num}\r
873 { chr.to.int$\r
874   duplicate$ "0" chr.to.int$ < not\r
875   swap$ "9" chr.to.int$ > not and\r
876 }\r
877 \r
878 FUNCTION {extract.num}\r
879 { duplicate$ 't :=\r
880   "" 's :=\r
881   { t empty$ not }\r
882   { t #1 #1 substring$\r
883     t #2 global.max$ substring$ 't :=\r
884     duplicate$ is.num\r
885       { s swap$ * 's := }\r
886       { pop$ "" 't := }\r
887     if$\r
888   }\r
889   while$\r
890   s empty$\r
891     'skip$\r
892     { pop$ s }\r
893   if$\r
894 }\r
895 \r
896 FUNCTION {convert.edition}\r
897 { extract.num "l" change.case$ 's :=\r
898   s "first" = s "1" = or\r
899     { bbl.first 't := }\r
900     { s "second" = s "2" = or\r
901         { bbl.second 't := }\r
902         { s "third" = s "3" = or\r
903             { bbl.third 't := }\r
904             { s "fourth" = s "4" = or\r
905                 { bbl.fourth 't := }\r
906                 { s "fifth" = s "5" = or\r
907                     { bbl.fifth 't := }\r
908                     { s #1 #1 substring$ is.num\r
909                         { s eng.ord 't := }\r
910                         { edition 't := }\r
911                       if$\r
912                     }\r
913                   if$\r
914                 }\r
915               if$\r
916             }\r
917           if$\r
918         }\r
919       if$\r
920     }\r
921   if$\r
922   t\r
923 }\r
924 \r
925 FUNCTION {format.edition}\r
926 { edition duplicate$ empty$ 'skip$\r
927     {\r
928       convert.edition\r
929       output.state mid.sentence =\r
930         { "l" }\r
931         { "t" }\r
932       if$ change.case$\r
933       "edition" bibinfo.check\r
934       " " * bbl.edition *\r
935     }\r
936   if$\r
937 }\r
938 INTEGERS { multiresult }\r
939 FUNCTION {multi.page.check}\r
940 { 't :=\r
941   #0 'multiresult :=\r
942     { multiresult not\r
943       t empty$ not\r
944       and\r
945     }\r
946     { t #1 #1 substring$\r
947       duplicate$ "-" =\r
948       swap$ duplicate$ "," =\r
949       swap$ "+" =\r
950       or or\r
951         { #1 'multiresult := }\r
952         { t #2 global.max$ substring$ 't := }\r
953       if$\r
954     }\r
955   while$\r
956   multiresult\r
957 }\r
958 FUNCTION {format.pages}\r
959 { pages duplicate$ empty$ 'skip$\r
960     { duplicate$ multi.page.check\r
961         {\r
962           n.dashify\r
963         }\r
964         {\r
965         }\r
966       if$\r
967       "pages" bibinfo.check\r
968     }\r
969   if$\r
970 }\r
971 FUNCTION {format.journal.pages}\r
972 { pages duplicate$ empty$ 'pop$\r
973     { swap$ duplicate$ empty$\r
974         { pop$ pop$ format.pages }\r
975         {\r
976           ": " *\r
977           swap$\r
978           n.dashify\r
979           "pages" bibinfo.check\r
980           *\r
981         }\r
982       if$\r
983     }\r
984   if$\r
985 }\r
986 FUNCTION {format.journal.eid}\r
987 { eid "eid" bibinfo.check\r
988   duplicate$ empty$ 'pop$\r
989     { swap$ duplicate$ empty$ 'skip$\r
990       {\r
991           ", " *\r
992       }\r
993       if$\r
994       swap$ *\r
995       numpages empty$ 'skip$\r
996         { bbl.eidpp numpages tie.or.space.prefix\r
997           "numpages" bibinfo.check * *\r
998           " (" swap$ * ")" * *\r
999         }\r
1000       if$\r
1001     }\r
1002   if$\r
1003 }\r
1004 \r
1005 FUNCTION {format.vol.num}\r
1006 { volume field.or.null\r
1007   duplicate$ empty$ 'skip$\r
1008     {\r
1009     }\r
1010   if$\r
1011   number "number" bibinfo.check duplicate$ empty$ 'skip$\r
1012     {\r
1013       swap$ duplicate$ empty$\r
1014         { "there's a number but no volume in " cite$ * warning$ }\r
1015         'skip$\r
1016       if$\r
1017       swap$\r
1018       " (" swap$ * ")." *\r
1019     }\r
1020   if$ *\r
1021   }\r
1022 \r
1023 FUNCTION {format.vol.num.pages}\r
1024 { volume field.or.null\r
1025   duplicate$ empty$ 'skip$\r
1026     {\r
1027     }\r
1028   if$\r
1029   number "number" bibinfo.check duplicate$ empty$ 'skip$\r
1030     {\r
1031       swap$ duplicate$ empty$\r
1032         { "there's a number but no volume in " cite$ * warning$ }\r
1033         'skip$\r
1034       if$\r
1035       swap$\r
1036       " (" swap$ * ")" *\r
1037     }\r
1038   if$ *\r
1039   eid empty$\r
1040     { format.journal.pages }\r
1041     { format.journal.eid }\r
1042   if$\r
1043 }\r
1044 \r
1045 FUNCTION {format.chapter.pages}\r
1046 { chapter empty$\r
1047     'format.pages\r
1048     { type empty$\r
1049         { bbl.chapter }\r
1050         { type "l" change.case$\r
1051           "type" bibinfo.check\r
1052         }\r
1053       if$\r
1054       chapter tie.or.space.prefix\r
1055       "chapter" bibinfo.check\r
1056       * *\r
1057       pages empty$\r
1058         'skip$\r
1059         { ", " * format.pages * }\r
1060       if$\r
1061     }\r
1062   if$\r
1063 }\r
1064 \r
1065 FUNCTION {bt.emph}\r
1066 { duplicate$ empty$ 'skip$\r
1067   { "\emph{" swap$ *\r
1068     non.stop\r
1069       { ",} " * }\r
1070       { "}, " * }\r
1071     if$\r
1072   }\r
1073   if$\r
1074 }\r
1075 FUNCTION {format.booktitle}\r
1076 {\r
1077   booktitle "booktitle" bibinfo.check\r
1078   bt.emph\r
1079 }\r
1080 FUNCTION {format.in.ed.booktitle}\r
1081 { format.booktitle duplicate$ empty$ 'skip$\r
1082     {\r
1083       format.bvolume duplicate$ empty$ 'pop$\r
1084         { " " swap$ * * }\r
1085       if$\r
1086       editor "editor" format.names.ed duplicate$ empty$ 'pop$\r
1087         {\r
1088           bbl.edby\r
1089           " " * swap$ *\r
1090           swap$\r
1091           " " *\r
1092           " " * swap$\r
1093           * }\r
1094       if$\r
1095       word.in swap$ *\r
1096     }\r
1097   if$\r
1098 }\r
1099 FUNCTION {format.thesis.type}\r
1100 { type duplicate$ empty$\r
1101     'pop$\r
1102     { swap$ pop$\r
1103       "t" change.case$ "type" bibinfo.check\r
1104     }\r
1105   if$\r
1106 }\r
1107 FUNCTION {format.tr.number}\r
1108 { number "number" bibinfo.check\r
1109   type duplicate$ empty$\r
1110     { pop$ bbl.techrep }\r
1111     'skip$\r
1112   if$\r
1113   "type" bibinfo.check\r
1114   swap$ duplicate$ empty$\r
1115     { pop$ "t" change.case$ }\r
1116     { tie.or.space.prefix * * }\r
1117   if$\r
1118 }\r
1119 FUNCTION {format.article.crossref}\r
1120 {\r
1121   word.in\r
1122   " \cite{" * crossref * "}" *\r
1123 }\r
1124 FUNCTION {format.book.crossref}\r
1125 { volume duplicate$ empty$\r
1126     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$\r
1127       pop$ word.in\r
1128     }\r
1129     { bbl.volume\r
1130       swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *\r
1131     }\r
1132   if$\r
1133   " \cite{" * crossref * "}" *\r
1134 }\r
1135 FUNCTION {format.incoll.inproc.crossref}\r
1136 {\r
1137   word.in\r
1138   " \cite{" * crossref * "}" *\r
1139 }\r
1140 FUNCTION {format.org.or.pub}\r
1141 { 't :=\r
1142   ""\r
1143   address empty$ t empty$ and\r
1144     'skip$\r
1145     {\r
1146       address "address" bibinfo.check *\r
1147       t empty$\r
1148         'skip$\r
1149         { address empty$\r
1150             'skip$\r
1151             { ": " * }\r
1152           if$\r
1153           t *\r
1154         }\r
1155       if$\r
1156     }\r
1157   if$\r
1158 }\r
1159 FUNCTION {format.publisher.address}\r
1160 { publisher "publisher" bibinfo.warn format.org.or.pub\r
1161 }\r
1162 \r
1163 FUNCTION {format.organization.address}\r
1164 { organization "organization" bibinfo.check format.org.or.pub\r
1165 }\r
1166 \r
1167 FUNCTION {format.institution.address}%added for use in FUNCTION {techreport}%\r
1168 { institution "institution" bibinfo.warn format.org.or.pub\r
1169 }\r
1170 \r
1171 FUNCTION {format.location}\r
1172 { location empty$\r
1173     { "" }\r
1174     { location "location" bibinfo.check}\r
1175   if$\r
1176 }\r
1177 \r
1178 FUNCTION {format.month}\r
1179 { month empty$\r
1180     { "" }\r
1181     { month "month" bibinfo.check\r
1182     "" swap$ * "." *}\r
1183   if$\r
1184 }\r
1185 \r
1186 FUNCTION {article}\r
1187 { output.bibitem\r
1188   format.authors "author" output.check\r
1189   author format.key output\r
1190   format.date "year" output.check\r
1191   date.block\r
1192   format.title "title" output.check\r
1193   end.quote.title\r
1194   crossref missing$\r
1195     {\r
1196       journal\r
1197       "journal" bibinfo.check\r
1198       emphasize\r
1199       "journal" output.check\r
1200       add.blank\r
1201       format.vol.num.pages output\r
1202     }\r
1203     { format.article.crossref output.nonnull\r
1204       format.pages output\r
1205     }\r
1206   if$\r
1207   %format.doi output\r
1208   new.sentence\r
1209   format.note output\r
1210   format.eprint output\r
1211   format.url output\r
1212   fin.entry\r
1213 }\r
1214 FUNCTION {book}\r
1215 { output.bibitem\r
1216   author empty$\r
1217     { format.editors "author and editor" output.check\r
1218       editor format.key output\r
1219       add.blank\r
1220     }\r
1221     { format.authors output.nonnull\r
1222       crossref missing$\r
1223         { "author and editor" editor either.or.check }\r
1224         'skip$\r
1225       if$\r
1226     }\r
1227   if$\r
1228   format.date "year" output.check\r
1229   date.block\r
1230   format.btitle "title" output.check\r
1231   crossref missing$\r
1232     { format.bvolume output\r
1233       format.number.series output\r
1234       format.edition output\r
1235       format.publisher.address output\r
1236     }\r
1237     {\r
1238       format.book.crossref output.nonnull\r
1239     }\r
1240   if$\r
1241   %format.doi output\r
1242   new.sentence\r
1243   format.note output\r
1244   format.eprint output\r
1245   format.url output\r
1246   fin.entry\r
1247 }\r
1248 FUNCTION {booklet}\r
1249 { output.bibitem\r
1250   format.authors output\r
1251   author format.key output\r
1252   format.date "year" output.check\r
1253   date.block\r
1254   format.title "title" output.check\r
1255   end.quote.title\r
1256   howpublished "howpublished" bibinfo.check output\r
1257   address "address" bibinfo.check output\r
1258   %format.doi output\r
1259   new.sentence\r
1260   format.note output\r
1261   format.eprint output\r
1262   format.url output\r
1263   fin.entry\r
1264 }\r
1265 \r
1266 FUNCTION {inbook}\r
1267 { output.bibitem\r
1268   author empty$\r
1269     { format.editors "author and editor" output.check\r
1270       editor format.key output\r
1271     }\r
1272     { format.authors output.nonnull\r
1273       crossref missing$\r
1274         { "author and editor" editor either.or.check }\r
1275         'skip$\r
1276       if$\r
1277     }\r
1278   if$\r
1279   format.date "year" output.check\r
1280   date.block\r
1281   format.btitle "title" output.check\r
1282   crossref missing$\r
1283     {\r
1284       format.bvolume output\r
1285       format.chapter.pages "chapter and pages" output.check\r
1286       format.number.series output\r
1287       format.edition output\r
1288       format.publisher.address output\r
1289     }\r
1290     {\r
1291       format.chapter.pages "chapter and pages" output.check\r
1292       format.book.crossref output.nonnull\r
1293     }\r
1294   if$\r
1295   %format.doi output\r
1296   new.sentence\r
1297   format.note output\r
1298   format.eprint output\r
1299   format.url output\r
1300   fin.entry\r
1301 }\r
1302 \r
1303 FUNCTION {incollection}\r
1304 { output.bibitem\r
1305   format.authors "author" output.check\r
1306   author format.key output\r
1307   format.date "year" output.check\r
1308   date.block\r
1309   format.title "title" output.check\r
1310   end.quote.title\r
1311   crossref missing$\r
1312     { format.in.ed.booktitle "booktitle" output.check\r
1313       end.quote.btitle\r
1314       format.number.series output\r
1315       format.edition output\r
1316       format.chapter.pages output\r
1317       format.publisher.address output\r
1318     }\r
1319     { format.incoll.inproc.crossref output.nonnull\r
1320       format.chapter.pages output\r
1321     }\r
1322   if$\r
1323   %format.doi output\r
1324   new.sentence\r
1325   format.note output\r
1326   format.eprint output\r
1327   format.url output\r
1328   fin.entry\r
1329 }\r
1330 FUNCTION {inproceedings}\r
1331 { output.bibitem\r
1332   format.authors "author" output.check\r
1333   author format.key output\r
1334   format.date "year" output.check\r
1335   date.block\r
1336   format.title "title" output.check\r
1337   end.quote.title\r
1338   crossref missing$\r
1339     { format.in.ed.booktitle "booktitle" output.check\r
1340       end.quote.btitle\r
1341       format.location output\r
1342       format.number.series output\r
1343       format.pages output\r
1344       publisher empty$\r
1345         { format.organization.address output }\r
1346         { organization "organization" bibinfo.check output\r
1347           format.publisher.address output\r
1348         }\r
1349       if$\r
1350     }\r
1351     { format.incoll.inproc.crossref output.nonnull\r
1352       format.pages output\r
1353     }\r
1354   if$\r
1355   format.month output\r
1356   %format.doi output\r
1357   new.sentence\r
1358   format.note output\r
1359   format.eprint output\r
1360   format.url output\r
1361   fin.entry\r
1362 }\r
1363 FUNCTION {conference} { inproceedings }\r
1364 FUNCTION {manual}\r
1365 { output.bibitem\r
1366   format.authors output\r
1367   author format.key output\r
1368   format.date "year" output.check\r
1369   date.block\r
1370   format.btitle "title" output.check\r
1371   organization "organization" bibinfo.check output\r
1372   address "address" bibinfo.check output\r
1373   format.edition output\r
1374   %format.doi output\r
1375   new.sentence\r
1376   format.note output\r
1377   format.eprint output\r
1378   format.url output\r
1379   fin.entry\r
1380 }\r
1381 \r
1382 FUNCTION {mastersthesis}\r
1383 { output.bibitem\r
1384   format.authors "author" output.check\r
1385   author format.key output\r
1386   format.date "year" output.check\r
1387   date.block\r
1388   format.title "title" output.check\r
1389   end.quote.title\r
1390   bbl.mthesis format.thesis.type output.nonnull\r
1391   school "school" bibinfo.warn output\r
1392   address "address" bibinfo.check output\r
1393   %format.doi output\r
1394   new.sentence\r
1395   format.note output\r
1396   format.eprint output\r
1397   format.url output\r
1398   fin.entry\r
1399 }\r
1400 \r
1401 FUNCTION {misc}\r
1402 { output.bibitem\r
1403   format.authors output\r
1404   author format.key output\r
1405   format.date "year" output.check\r
1406   date.block\r
1407   format.title output\r
1408   end.quote.title\r
1409   howpublished "howpublished" bibinfo.check output\r
1410   address "address" bibinfo.check output%added%\r
1411   %format.doi output\r
1412   new.sentence\r
1413   format.note output\r
1414   format.eprint output\r
1415   format.lastchecked output\r
1416   format.url output\r
1417   fin.entry\r
1418 }\r
1419 FUNCTION {phdthesis}\r
1420 { output.bibitem\r
1421   format.authors "author" output.check\r
1422   author format.key output\r
1423   format.date "year" output.check\r
1424   date.block\r
1425   format.title "title" output.check\r
1426   end.quote.title\r
1427   bbl.phdthesis format.thesis.type output.nonnull\r
1428   school "school" bibinfo.warn output\r
1429   address "address" bibinfo.check output\r
1430   %format.doi output\r
1431   new.sentence\r
1432   format.note output\r
1433   format.eprint output\r
1434   format.url output\r
1435   fin.entry\r
1436 }\r
1437 \r
1438 FUNCTION {presentation}\r
1439 { output.bibitem\r
1440   format.authors output\r
1441   author format.key output\r
1442   format.title output\r
1443   end.quote.title\r
1444   format.organization.address "organization and address" output.check\r
1445   month "month" output.check\r
1446   year "year" output.check\r
1447   new.sentence\r
1448   format.note output\r
1449   new.sentence\r
1450   type missing$ 'skip$\r
1451   {"(" type capitalize * ")" * output}\r
1452     if$\r
1453   format.url output\r
1454   fin.entry\r
1455 }\r
1456 \r
1457 FUNCTION {proceedings}\r
1458 { output.bibitem\r
1459   format.editors output\r
1460   editor format.key output\r
1461   format.date "year" output.check\r
1462   date.block\r
1463   format.btitle "title" output.check\r
1464   format.bvolume output\r
1465   format.number.series output\r
1466   publisher empty$\r
1467     { format.organization.address output }\r
1468     { organization "organization" bibinfo.check output\r
1469       format.publisher.address output\r
1470     }\r
1471   if$\r
1472   %format.doi output\r
1473   new.sentence\r
1474   format.note output\r
1475   format.eprint output\r
1476   format.url output\r
1477   fin.entry\r
1478 }\r
1479 \r
1480 FUNCTION {techreport}\r
1481 { output.bibitem\r
1482   format.authors "author" output.check\r
1483   author format.key output\r
1484   format.date "year" output.check\r
1485   date.block\r
1486   format.btitle\r
1487   "title" output.check\r
1488   format.tr.number output.nonnull\r
1489   format.institution.address output%added in place of next two lines%\r
1490   %address "address" bibinfo.check output%\r
1491   %institution "institution" bibinfo.warn output%\r
1492   new.sentence\r
1493   format.note output\r
1494   format.eprint output\r
1495   format.url output\r
1496   fin.entry\r
1497 }\r
1498 \r
1499 FUNCTION {unpublished}\r
1500 { output.bibitem\r
1501   format.authors "author" output.check\r
1502   author format.key output\r
1503   format.date "year" output.check\r
1504   date.block\r
1505   format.title "title" output.check\r
1506   end.quote.title\r
1507   %format.doi output\r
1508   new.sentence\r
1509   format.note "note" output.check\r
1510   format.eprint output\r
1511   format.lastchecked output\r
1512   format.url output\r
1513   fin.entry\r
1514 }\r
1515 \r
1516 FUNCTION {default.type} { misc }\r
1517 READ\r
1518 FUNCTION {sortify}\r
1519 { purify$\r
1520   "l" change.case$\r
1521 }\r
1522 INTEGERS { len }\r
1523 FUNCTION {chop.word}\r
1524 { 's :=\r
1525   'len :=\r
1526   s #1 len substring$ =\r
1527     { s len #1 + global.max$ substring$ }\r
1528     's\r
1529   if$\r
1530 }\r
1531 FUNCTION {format.lab.names}\r
1532 {'s :=\r
1533  "" 't :=\r
1534   #1 'nameptr :=\r
1535   s num.names$ 'numnames :=\r
1536   numnames 'namesleft :=\r
1537     { namesleft #0 > }\r
1538     { s nameptr\r
1539       "{vv~}{ll}" format.name$\r
1540       't :=\r
1541       nameptr #1 >\r
1542         {\r
1543           nameptr #2 =\r
1544           numnames #3 > and\r
1545             { "others" 't :=\r
1546               #1 'namesleft := }\r
1547             'skip$\r
1548           if$\r
1549           namesleft #1 >\r
1550             { ", " * t * }\r
1551             {\r
1552               s nameptr "{ll}" format.name$ duplicate$ "others" =\r
1553                 { 't := }\r
1554                 { pop$ }\r
1555               if$\r
1556               t "others" =\r
1557                 {\r
1558                   " " * bbl.etal *\r
1559                 }\r
1560                 {\r
1561                   numnames #2 >\r
1562                     { "," * }\r
1563                     'skip$\r
1564                   if$\r
1565                   bbl.and\r
1566                   space.word * t *\r
1567                 }\r
1568               if$\r
1569             }\r
1570           if$\r
1571         }\r
1572         't\r
1573       if$\r
1574       nameptr #1 + 'nameptr :=\r
1575       namesleft #1 - 'namesleft :=\r
1576     }\r
1577   while$\r
1578 }\r
1579 \r
1580 FUNCTION {author.key.label}\r
1581 { author empty$\r
1582     { key empty$\r
1583         { cite$ #1 #3 substring$ }\r
1584         'key\r
1585       if$\r
1586     }\r
1587     { author format.lab.names }\r
1588   if$\r
1589 }\r
1590 \r
1591 FUNCTION {author.editor.key.label}\r
1592 { author empty$\r
1593     { editor empty$\r
1594         { key empty$\r
1595             { cite$ #1 #3 substring$ }\r
1596             'key\r
1597           if$\r
1598         }\r
1599         { editor format.lab.names }\r
1600       if$\r
1601     }\r
1602     { author format.lab.names }\r
1603   if$\r
1604 }\r
1605 \r
1606 FUNCTION {editor.key.label}\r
1607 { editor empty$\r
1608     { key empty$\r
1609         { cite$ #1 #3 substring$ }\r
1610         'key\r
1611       if$\r
1612     }\r
1613     { editor format.lab.names }\r
1614   if$\r
1615 }\r
1616 \r
1617 FUNCTION {calc.short.authors}\r
1618 { type$ "book" =\r
1619   type$ "inbook" =\r
1620   or\r
1621     'author.editor.key.label\r
1622     { type$ "proceedings" =\r
1623         'editor.key.label\r
1624         'author.key.label\r
1625       if$\r
1626     }\r
1627   if$\r
1628   'short.list :=\r
1629 }\r
1630 \r
1631 FUNCTION {calc.label}\r
1632 { calc.short.authors\r
1633   short.list\r
1634   "("\r
1635   *\r
1636   year duplicate$ empty$\r
1637   short.list key field.or.null = or\r
1638      { pop$ "" }\r
1639      'skip$\r
1640   if$\r
1641   *\r
1642   'label :=\r
1643 }\r
1644 \r
1645 FUNCTION {sort.format.names}\r
1646 { 's :=\r
1647   #1 'nameptr :=\r
1648   ""\r
1649   s num.names$ 'numnames :=\r
1650   numnames 'namesleft :=\r
1651     { namesleft #0 > }\r
1652     { nameptr #1 >\r
1653           { "   " * }\r
1654          'skip$\r
1655       if$\r
1656       s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=\r
1657       nameptr numnames = t "others" = and\r
1658           { " et~al" * }\r
1659           { t sortify * }\r
1660       if$\r
1661       nameptr #1 + 'nameptr :=\r
1662       namesleft #1 - 'namesleft :=\r
1663     }\r
1664   while$\r
1665 }\r
1666 \r
1667 FUNCTION {sort.format.title}\r
1668 { 't :=\r
1669   "A " #2\r
1670     "An " #3\r
1671       "The " #4 t chop.word\r
1672     chop.word\r
1673   chop.word\r
1674   sortify\r
1675   #1 global.max$ substring$\r
1676 }\r
1677 FUNCTION {author.sort}\r
1678 { author empty$\r
1679     { key empty$\r
1680         { "to sort, need author or key in " cite$ * warning$\r
1681           ""\r
1682         }\r
1683         { key sortify }\r
1684       if$\r
1685     }\r
1686     { author sort.format.names }\r
1687   if$\r
1688 }\r
1689 FUNCTION {author.editor.sort}\r
1690 { author empty$\r
1691     { editor empty$\r
1692         { key empty$\r
1693             { "to sort, need author, editor, or key in " cite$ * warning$\r
1694               ""\r
1695             }\r
1696             { key sortify }\r
1697           if$\r
1698         }\r
1699         { editor sort.format.names }\r
1700       if$\r
1701     }\r
1702     { author sort.format.names }\r
1703   if$\r
1704 }\r
1705 FUNCTION {editor.sort}\r
1706 { editor empty$\r
1707     { key empty$\r
1708         { "to sort, need editor or key in " cite$ * warning$\r
1709           ""\r
1710         }\r
1711         { key sortify }\r
1712       if$\r
1713     }\r
1714     { editor sort.format.names }\r
1715   if$\r
1716 }\r
1717 FUNCTION {presort}\r
1718 { calc.label\r
1719   label sortify\r
1720   "    "\r
1721   *\r
1722   type$ "book" =\r
1723   type$ "inbook" =\r
1724   or\r
1725     'author.editor.sort\r
1726     { type$ "proceedings" =\r
1727         'editor.sort\r
1728         'author.sort\r
1729       if$\r
1730     }\r
1731   if$\r
1732   #1 entry.max$ substring$\r
1733   'sort.label :=\r
1734   sort.label\r
1735   *\r
1736   "    "\r
1737   *\r
1738   title field.or.null\r
1739   sort.format.title\r
1740   *\r
1741   #1 entry.max$ substring$\r
1742   'sort.key$ :=\r
1743 }\r
1744 \r
1745 ITERATE {presort}\r
1746 SORT\r
1747 STRINGS { last.label next.extra }\r
1748 INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label }\r
1749 FUNCTION {initialize.extra.label.stuff}\r
1750 { #0 int.to.chr$ 'last.label :=\r
1751   "" 'next.extra :=\r
1752   #0 'last.extra.num :=\r
1753   "a" chr.to.int$ #1 - 'last.extra.num.blank :=\r
1754   last.extra.num.blank 'last.extra.num.extended :=\r
1755   #0 'number.label :=\r
1756 }\r
1757 FUNCTION {forward.pass}\r
1758 { last.label label =\r
1759     { last.extra.num #1 + 'last.extra.num :=\r
1760       last.extra.num "z" chr.to.int$ >\r
1761        { "a" chr.to.int$ 'last.extra.num :=\r
1762          last.extra.num.extended #1 + 'last.extra.num.extended :=\r
1763        }\r
1764        'skip$\r
1765       if$\r
1766       last.extra.num.extended last.extra.num.blank >\r
1767         { last.extra.num.extended int.to.chr$\r
1768           last.extra.num int.to.chr$\r
1769           * 'extra.label := }\r
1770         { last.extra.num int.to.chr$ 'extra.label := }\r
1771       if$\r
1772     }\r
1773     { "a" chr.to.int$ 'last.extra.num :=\r
1774       "" 'extra.label :=\r
1775       label 'last.label :=\r
1776     }\r
1777   if$\r
1778   number.label #1 + 'number.label :=\r
1779 }\r
1780 FUNCTION {reverse.pass}\r
1781 { next.extra "b" =\r
1782     { "a" 'extra.label := }\r
1783     'skip$\r
1784   if$\r
1785   extra.label 'next.extra :=\r
1786   extra.label\r
1787   duplicate$ empty$\r
1788     'skip$\r
1789     { "{\natexlab{" swap$ * "}}" * }\r
1790   if$\r
1791   'extra.label :=\r
1792   label extra.label * 'label :=\r
1793 }\r
1794 EXECUTE {initialize.extra.label.stuff}\r
1795 ITERATE {forward.pass}\r
1796 REVERSE {reverse.pass}\r
1797 FUNCTION {bib.sort.order}\r
1798 { sort.label\r
1799   "    "\r
1800   *\r
1801   year field.or.null sortify\r
1802   *\r
1803   "    "\r
1804   *\r
1805   title field.or.null\r
1806   sort.format.title\r
1807   *\r
1808   #1 entry.max$ substring$\r
1809   'sort.key$ :=\r
1810 }\r
1811 ITERATE {bib.sort.order}\r
1812 SORT\r
1813 FUNCTION {begin.bib}\r
1814 { preamble$ empty$\r
1815     'skip$\r
1816     { preamble$ write$ newline$ }\r
1817   if$\r
1818   "\begin{thebibliography}{" number.label int.to.str$ * "}" *\r
1819   write$ newline$\r
1820   "\newcommand{\enquote}[1]{``#1''}"\r
1821   write$ newline$\r
1822   "\providecommand{\natexlab}[1]{#1}"\r
1823   write$ newline$\r
1824   "\providecommand{\url}[1]{\normalfont{#1}}"\r
1825   write$ newline$\r
1826   "\providecommand{\urlprefix}{ }"\r
1827   write$ newline$\r
1828   "\expandafter\ifx\csname urlstyle\endcsname\relax"\r
1829   write$ newline$\r
1830   "  \providecommand{\doi}[1]{doi:\discretionary{}{}{}#1}\else"\r
1831   write$ newline$\r
1832   "  \providecommand{\doi}{doi:\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi"\r
1833   write$ newline$\r
1834   "\providecommand{\eprint}[2][]{\url{#2}}"\r
1835   write$ newline$\r
1836 }\r
1837 EXECUTE {begin.bib}\r
1838 EXECUTE {init.state.consts}\r
1839 ITERATE {call.type$}\r
1840 FUNCTION {end.bib}\r
1841 { newline$\r
1842   "\end{thebibliography}" write$ newline$\r
1843 }\r
1844 EXECUTE {end.bib}\r
1845 %% End of customized bst file\r
1846 %%\r
1847 %% End of file `gENO.bst'.\r