annotate 0__Papers/Future_Architecture/latex/plain.bst @ 29:8364254531cd

perf tuning -- first try on figs and a bit of story text
author Some Random Person <seanhalle@yahoo.com>
date Mon, 16 Apr 2012 16:41:54 -0700
parents
children
rev   line source
seanhalle@29 1 % BibTeX standard bibliography style `plain'
seanhalle@29 2 % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
seanhalle@29 3 % Copyright (C) 1985, all rights reserved.
seanhalle@29 4 % Copying of this file is authorized only if either
seanhalle@29 5 % (1) you make absolutely no changes to your copy, including name, or
seanhalle@29 6 % (2) if you do make changes, you name it something other than
seanhalle@29 7 % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
seanhalle@29 8 % This restriction helps ensure that all standard styles are identical.
seanhalle@29 9 % The file btxbst.doc has the documentation for this style.
seanhalle@29 10
seanhalle@29 11 ENTRY
seanhalle@29 12 { address
seanhalle@29 13 author
seanhalle@29 14 booktitle
seanhalle@29 15 chapter
seanhalle@29 16 edition
seanhalle@29 17 editor
seanhalle@29 18 howpublished
seanhalle@29 19 institution
seanhalle@29 20 journal
seanhalle@29 21 key
seanhalle@29 22 month
seanhalle@29 23 note
seanhalle@29 24 number
seanhalle@29 25 organization
seanhalle@29 26 pages
seanhalle@29 27 publisher
seanhalle@29 28 school
seanhalle@29 29 series
seanhalle@29 30 title
seanhalle@29 31 type
seanhalle@29 32 volume
seanhalle@29 33 year
seanhalle@29 34 }
seanhalle@29 35 {}
seanhalle@29 36 { label }
seanhalle@29 37
seanhalle@29 38 INTEGERS { output.state before.all mid.sentence after.sentence after.block }
seanhalle@29 39
seanhalle@29 40 FUNCTION {init.state.consts}
seanhalle@29 41 { #0 'before.all :=
seanhalle@29 42 #1 'mid.sentence :=
seanhalle@29 43 #2 'after.sentence :=
seanhalle@29 44 #3 'after.block :=
seanhalle@29 45 }
seanhalle@29 46
seanhalle@29 47 STRINGS { s t }
seanhalle@29 48
seanhalle@29 49 FUNCTION {output.nonnull}
seanhalle@29 50 { 's :=
seanhalle@29 51 output.state mid.sentence =
seanhalle@29 52 { ", " * write$ }
seanhalle@29 53 { output.state after.block =
seanhalle@29 54 { add.period$ write$
seanhalle@29 55 newline$
seanhalle@29 56 "\newblock " write$
seanhalle@29 57 }
seanhalle@29 58 { output.state before.all =
seanhalle@29 59 'write$
seanhalle@29 60 { add.period$ " " * write$ }
seanhalle@29 61 if$
seanhalle@29 62 }
seanhalle@29 63 if$
seanhalle@29 64 mid.sentence 'output.state :=
seanhalle@29 65 }
seanhalle@29 66 if$
seanhalle@29 67 s
seanhalle@29 68 }
seanhalle@29 69
seanhalle@29 70 FUNCTION {output}
seanhalle@29 71 { duplicate$ empty$
seanhalle@29 72 'pop$
seanhalle@29 73 'output.nonnull
seanhalle@29 74 if$
seanhalle@29 75 }
seanhalle@29 76
seanhalle@29 77 FUNCTION {output.check}
seanhalle@29 78 { 't :=
seanhalle@29 79 duplicate$ empty$
seanhalle@29 80 { pop$ "empty " t * " in " * cite$ * warning$ }
seanhalle@29 81 'output.nonnull
seanhalle@29 82 if$
seanhalle@29 83 }
seanhalle@29 84
seanhalle@29 85 FUNCTION {output.bibitem}
seanhalle@29 86 { newline$
seanhalle@29 87 "\bibitem{" write$
seanhalle@29 88 cite$ write$
seanhalle@29 89 "}" write$
seanhalle@29 90 newline$
seanhalle@29 91 ""
seanhalle@29 92 before.all 'output.state :=
seanhalle@29 93 }
seanhalle@29 94
seanhalle@29 95 FUNCTION {fin.entry}
seanhalle@29 96 { add.period$
seanhalle@29 97 write$
seanhalle@29 98 newline$
seanhalle@29 99 }
seanhalle@29 100
seanhalle@29 101 FUNCTION {new.block}
seanhalle@29 102 { output.state before.all =
seanhalle@29 103 'skip$
seanhalle@29 104 { after.block 'output.state := }
seanhalle@29 105 if$
seanhalle@29 106 }
seanhalle@29 107
seanhalle@29 108 FUNCTION {new.sentence}
seanhalle@29 109 { output.state after.block =
seanhalle@29 110 'skip$
seanhalle@29 111 { output.state before.all =
seanhalle@29 112 'skip$
seanhalle@29 113 { after.sentence 'output.state := }
seanhalle@29 114 if$
seanhalle@29 115 }
seanhalle@29 116 if$
seanhalle@29 117 }
seanhalle@29 118
seanhalle@29 119 FUNCTION {not}
seanhalle@29 120 { { #0 }
seanhalle@29 121 { #1 }
seanhalle@29 122 if$
seanhalle@29 123 }
seanhalle@29 124
seanhalle@29 125 FUNCTION {and}
seanhalle@29 126 { 'skip$
seanhalle@29 127 { pop$ #0 }
seanhalle@29 128 if$
seanhalle@29 129 }
seanhalle@29 130
seanhalle@29 131 FUNCTION {or}
seanhalle@29 132 { { pop$ #1 }
seanhalle@29 133 'skip$
seanhalle@29 134 if$
seanhalle@29 135 }
seanhalle@29 136
seanhalle@29 137 FUNCTION {new.block.checka}
seanhalle@29 138 { empty$
seanhalle@29 139 'skip$
seanhalle@29 140 'new.block
seanhalle@29 141 if$
seanhalle@29 142 }
seanhalle@29 143
seanhalle@29 144 FUNCTION {new.block.checkb}
seanhalle@29 145 { empty$
seanhalle@29 146 swap$ empty$
seanhalle@29 147 and
seanhalle@29 148 'skip$
seanhalle@29 149 'new.block
seanhalle@29 150 if$
seanhalle@29 151 }
seanhalle@29 152
seanhalle@29 153 FUNCTION {new.sentence.checka}
seanhalle@29 154 { empty$
seanhalle@29 155 'skip$
seanhalle@29 156 'new.sentence
seanhalle@29 157 if$
seanhalle@29 158 }
seanhalle@29 159
seanhalle@29 160 FUNCTION {new.sentence.checkb}
seanhalle@29 161 { empty$
seanhalle@29 162 swap$ empty$
seanhalle@29 163 and
seanhalle@29 164 'skip$
seanhalle@29 165 'new.sentence
seanhalle@29 166 if$
seanhalle@29 167 }
seanhalle@29 168
seanhalle@29 169 FUNCTION {field.or.null}
seanhalle@29 170 { duplicate$ empty$
seanhalle@29 171 { pop$ "" }
seanhalle@29 172 'skip$
seanhalle@29 173 if$
seanhalle@29 174 }
seanhalle@29 175
seanhalle@29 176 FUNCTION {emphasize}
seanhalle@29 177 { duplicate$ empty$
seanhalle@29 178 { pop$ "" }
seanhalle@29 179 { "{\em " swap$ * "}" * }
seanhalle@29 180 if$
seanhalle@29 181 }
seanhalle@29 182
seanhalle@29 183 INTEGERS { nameptr namesleft numnames }
seanhalle@29 184
seanhalle@29 185 FUNCTION {format.names}
seanhalle@29 186 { 's :=
seanhalle@29 187 #1 'nameptr :=
seanhalle@29 188 s num.names$ 'numnames :=
seanhalle@29 189 numnames 'namesleft :=
seanhalle@29 190 { namesleft #0 > }
seanhalle@29 191 { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
seanhalle@29 192 nameptr #1 >
seanhalle@29 193 { namesleft #1 >
seanhalle@29 194 { ", " * t * }
seanhalle@29 195 { numnames #2 >
seanhalle@29 196 { "," * }
seanhalle@29 197 'skip$
seanhalle@29 198 if$
seanhalle@29 199 t "others" =
seanhalle@29 200 { " et~al." * }
seanhalle@29 201 { " and " * t * }
seanhalle@29 202 if$
seanhalle@29 203 }
seanhalle@29 204 if$
seanhalle@29 205 }
seanhalle@29 206 't
seanhalle@29 207 if$
seanhalle@29 208 nameptr #1 + 'nameptr :=
seanhalle@29 209 namesleft #1 - 'namesleft :=
seanhalle@29 210 }
seanhalle@29 211 while$
seanhalle@29 212 }
seanhalle@29 213
seanhalle@29 214 FUNCTION {format.authors}
seanhalle@29 215 { author empty$
seanhalle@29 216 { "" }
seanhalle@29 217 { author format.names }
seanhalle@29 218 if$
seanhalle@29 219 }
seanhalle@29 220
seanhalle@29 221 FUNCTION {format.editors}
seanhalle@29 222 { editor empty$
seanhalle@29 223 { "" }
seanhalle@29 224 { editor format.names
seanhalle@29 225 editor num.names$ #1 >
seanhalle@29 226 { ", editors" * }
seanhalle@29 227 { ", editor" * }
seanhalle@29 228 if$
seanhalle@29 229 }
seanhalle@29 230 if$
seanhalle@29 231 }
seanhalle@29 232
seanhalle@29 233 FUNCTION {format.title}
seanhalle@29 234 { title empty$
seanhalle@29 235 { "" }
seanhalle@29 236 { title "t" change.case$ }
seanhalle@29 237 if$
seanhalle@29 238 }
seanhalle@29 239
seanhalle@29 240 FUNCTION {n.dashify}
seanhalle@29 241 { 't :=
seanhalle@29 242 ""
seanhalle@29 243 { t empty$ not }
seanhalle@29 244 { t #1 #1 substring$ "-" =
seanhalle@29 245 { t #1 #2 substring$ "--" = not
seanhalle@29 246 { "--" *
seanhalle@29 247 t #2 global.max$ substring$ 't :=
seanhalle@29 248 }
seanhalle@29 249 { { t #1 #1 substring$ "-" = }
seanhalle@29 250 { "-" *
seanhalle@29 251 t #2 global.max$ substring$ 't :=
seanhalle@29 252 }
seanhalle@29 253 while$
seanhalle@29 254 }
seanhalle@29 255 if$
seanhalle@29 256 }
seanhalle@29 257 { t #1 #1 substring$ *
seanhalle@29 258 t #2 global.max$ substring$ 't :=
seanhalle@29 259 }
seanhalle@29 260 if$
seanhalle@29 261 }
seanhalle@29 262 while$
seanhalle@29 263 }
seanhalle@29 264
seanhalle@29 265 FUNCTION {format.date}
seanhalle@29 266 { year empty$
seanhalle@29 267 { month empty$
seanhalle@29 268 { "" }
seanhalle@29 269 { "there's a month but no year in " cite$ * warning$
seanhalle@29 270 month
seanhalle@29 271 }
seanhalle@29 272 if$
seanhalle@29 273 }
seanhalle@29 274 { month empty$
seanhalle@29 275 'year
seanhalle@29 276 { month " " * year * }
seanhalle@29 277 if$
seanhalle@29 278 }
seanhalle@29 279 if$
seanhalle@29 280 }
seanhalle@29 281
seanhalle@29 282 FUNCTION {format.btitle}
seanhalle@29 283 { title emphasize
seanhalle@29 284 }
seanhalle@29 285
seanhalle@29 286 FUNCTION {tie.or.space.connect}
seanhalle@29 287 { duplicate$ text.length$ #3 <
seanhalle@29 288 { "~" }
seanhalle@29 289 { " " }
seanhalle@29 290 if$
seanhalle@29 291 swap$ * *
seanhalle@29 292 }
seanhalle@29 293
seanhalle@29 294 FUNCTION {either.or.check}
seanhalle@29 295 { empty$
seanhalle@29 296 'pop$
seanhalle@29 297 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
seanhalle@29 298 if$
seanhalle@29 299 }
seanhalle@29 300
seanhalle@29 301 FUNCTION {format.bvolume}
seanhalle@29 302 { volume empty$
seanhalle@29 303 { "" }
seanhalle@29 304 { "volume" volume tie.or.space.connect
seanhalle@29 305 series empty$
seanhalle@29 306 'skip$
seanhalle@29 307 { " of " * series emphasize * }
seanhalle@29 308 if$
seanhalle@29 309 "volume and number" number either.or.check
seanhalle@29 310 }
seanhalle@29 311 if$
seanhalle@29 312 }
seanhalle@29 313
seanhalle@29 314 FUNCTION {format.number.series}
seanhalle@29 315 { volume empty$
seanhalle@29 316 { number empty$
seanhalle@29 317 { series field.or.null }
seanhalle@29 318 { output.state mid.sentence =
seanhalle@29 319 { "number" }
seanhalle@29 320 { "Number" }
seanhalle@29 321 if$
seanhalle@29 322 number tie.or.space.connect
seanhalle@29 323 series empty$
seanhalle@29 324 { "there's a number but no series in " cite$ * warning$ }
seanhalle@29 325 { " in " * series * }
seanhalle@29 326 if$
seanhalle@29 327 }
seanhalle@29 328 if$
seanhalle@29 329 }
seanhalle@29 330 { "" }
seanhalle@29 331 if$
seanhalle@29 332 }
seanhalle@29 333
seanhalle@29 334 FUNCTION {format.edition}
seanhalle@29 335 { edition empty$
seanhalle@29 336 { "" }
seanhalle@29 337 { output.state mid.sentence =
seanhalle@29 338 { edition "l" change.case$ " edition" * }
seanhalle@29 339 { edition "t" change.case$ " edition" * }
seanhalle@29 340 if$
seanhalle@29 341 }
seanhalle@29 342 if$
seanhalle@29 343 }
seanhalle@29 344
seanhalle@29 345 INTEGERS { multiresult }
seanhalle@29 346
seanhalle@29 347 FUNCTION {multi.page.check}
seanhalle@29 348 { 't :=
seanhalle@29 349 #0 'multiresult :=
seanhalle@29 350 { multiresult not
seanhalle@29 351 t empty$ not
seanhalle@29 352 and
seanhalle@29 353 }
seanhalle@29 354 { t #1 #1 substring$
seanhalle@29 355 duplicate$ "-" =
seanhalle@29 356 swap$ duplicate$ "," =
seanhalle@29 357 swap$ "+" =
seanhalle@29 358 or or
seanhalle@29 359 { #1 'multiresult := }
seanhalle@29 360 { t #2 global.max$ substring$ 't := }
seanhalle@29 361 if$
seanhalle@29 362 }
seanhalle@29 363 while$
seanhalle@29 364 multiresult
seanhalle@29 365 }
seanhalle@29 366
seanhalle@29 367 FUNCTION {format.pages}
seanhalle@29 368 { pages empty$
seanhalle@29 369 { "" }
seanhalle@29 370 { pages multi.page.check
seanhalle@29 371 { "pages" pages n.dashify tie.or.space.connect }
seanhalle@29 372 { "page" pages tie.or.space.connect }
seanhalle@29 373 if$
seanhalle@29 374 }
seanhalle@29 375 if$
seanhalle@29 376 }
seanhalle@29 377
seanhalle@29 378 FUNCTION {format.vol.num.pages}
seanhalle@29 379 { volume field.or.null
seanhalle@29 380 number empty$
seanhalle@29 381 'skip$
seanhalle@29 382 { "(" number * ")" * *
seanhalle@29 383 volume empty$
seanhalle@29 384 { "there's a number but no volume in " cite$ * warning$ }
seanhalle@29 385 'skip$
seanhalle@29 386 if$
seanhalle@29 387 }
seanhalle@29 388 if$
seanhalle@29 389 pages empty$
seanhalle@29 390 'skip$
seanhalle@29 391 { duplicate$ empty$
seanhalle@29 392 { pop$ format.pages }
seanhalle@29 393 { ":" * pages n.dashify * }
seanhalle@29 394 if$
seanhalle@29 395 }
seanhalle@29 396 if$
seanhalle@29 397 }
seanhalle@29 398
seanhalle@29 399 FUNCTION {format.chapter.pages}
seanhalle@29 400 { chapter empty$
seanhalle@29 401 'format.pages
seanhalle@29 402 { type empty$
seanhalle@29 403 { "chapter" }
seanhalle@29 404 { type "l" change.case$ }
seanhalle@29 405 if$
seanhalle@29 406 chapter tie.or.space.connect
seanhalle@29 407 pages empty$
seanhalle@29 408 'skip$
seanhalle@29 409 { ", " * format.pages * }
seanhalle@29 410 if$
seanhalle@29 411 }
seanhalle@29 412 if$
seanhalle@29 413 }
seanhalle@29 414
seanhalle@29 415 FUNCTION {format.in.ed.booktitle}
seanhalle@29 416 { booktitle empty$
seanhalle@29 417 { "" }
seanhalle@29 418 { editor empty$
seanhalle@29 419 { "In " booktitle emphasize * }
seanhalle@29 420 { "In " format.editors * ", " * booktitle emphasize * }
seanhalle@29 421 if$
seanhalle@29 422 }
seanhalle@29 423 if$
seanhalle@29 424 }
seanhalle@29 425
seanhalle@29 426 FUNCTION {empty.misc.check}
seanhalle@29 427 { author empty$ title empty$ howpublished empty$
seanhalle@29 428 month empty$ year empty$ note empty$
seanhalle@29 429 and and and and and
seanhalle@29 430 key empty$ not and
seanhalle@29 431 { "all relevant fields are empty in " cite$ * warning$ }
seanhalle@29 432 'skip$
seanhalle@29 433 if$
seanhalle@29 434 }
seanhalle@29 435
seanhalle@29 436 FUNCTION {format.thesis.type}
seanhalle@29 437 { type empty$
seanhalle@29 438 'skip$
seanhalle@29 439 { pop$
seanhalle@29 440 type "t" change.case$
seanhalle@29 441 }
seanhalle@29 442 if$
seanhalle@29 443 }
seanhalle@29 444
seanhalle@29 445 FUNCTION {format.tr.number}
seanhalle@29 446 { type empty$
seanhalle@29 447 { "Technical Report" }
seanhalle@29 448 'type
seanhalle@29 449 if$
seanhalle@29 450 number empty$
seanhalle@29 451 { "t" change.case$ }
seanhalle@29 452 { number tie.or.space.connect }
seanhalle@29 453 if$
seanhalle@29 454 }
seanhalle@29 455
seanhalle@29 456 FUNCTION {format.article.crossref}
seanhalle@29 457 { key empty$
seanhalle@29 458 { journal empty$
seanhalle@29 459 { "need key or journal for " cite$ * " to crossref " * crossref *
seanhalle@29 460 warning$
seanhalle@29 461 ""
seanhalle@29 462 }
seanhalle@29 463 { "In {\em " journal * "\/}" * }
seanhalle@29 464 if$
seanhalle@29 465 }
seanhalle@29 466 { "In " key * }
seanhalle@29 467 if$
seanhalle@29 468 " \cite{" * crossref * "}" *
seanhalle@29 469 }
seanhalle@29 470
seanhalle@29 471 FUNCTION {format.crossref.editor}
seanhalle@29 472 { editor #1 "{vv~}{ll}" format.name$
seanhalle@29 473 editor num.names$ duplicate$
seanhalle@29 474 #2 >
seanhalle@29 475 { pop$ " et~al." * }
seanhalle@29 476 { #2 <
seanhalle@29 477 'skip$
seanhalle@29 478 { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
seanhalle@29 479 { " et~al." * }
seanhalle@29 480 { " and " * editor #2 "{vv~}{ll}" format.name$ * }
seanhalle@29 481 if$
seanhalle@29 482 }
seanhalle@29 483 if$
seanhalle@29 484 }
seanhalle@29 485 if$
seanhalle@29 486 }
seanhalle@29 487
seanhalle@29 488 FUNCTION {format.book.crossref}
seanhalle@29 489 { volume empty$
seanhalle@29 490 { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
seanhalle@29 491 "In "
seanhalle@29 492 }
seanhalle@29 493 { "Volume" volume tie.or.space.connect
seanhalle@29 494 " of " *
seanhalle@29 495 }
seanhalle@29 496 if$
seanhalle@29 497 editor empty$
seanhalle@29 498 editor field.or.null author field.or.null =
seanhalle@29 499 or
seanhalle@29 500 { key empty$
seanhalle@29 501 { series empty$
seanhalle@29 502 { "need editor, key, or series for " cite$ * " to crossref " *
seanhalle@29 503 crossref * warning$
seanhalle@29 504 "" *
seanhalle@29 505 }
seanhalle@29 506 { "{\em " * series * "\/}" * }
seanhalle@29 507 if$
seanhalle@29 508 }
seanhalle@29 509 { key * }
seanhalle@29 510 if$
seanhalle@29 511 }
seanhalle@29 512 { format.crossref.editor * }
seanhalle@29 513 if$
seanhalle@29 514 " \cite{" * crossref * "}" *
seanhalle@29 515 }
seanhalle@29 516
seanhalle@29 517 FUNCTION {format.incoll.inproc.crossref}
seanhalle@29 518 { editor empty$
seanhalle@29 519 editor field.or.null author field.or.null =
seanhalle@29 520 or
seanhalle@29 521 { key empty$
seanhalle@29 522 { booktitle empty$
seanhalle@29 523 { "need editor, key, or booktitle for " cite$ * " to crossref " *
seanhalle@29 524 crossref * warning$
seanhalle@29 525 ""
seanhalle@29 526 }
seanhalle@29 527 { "In {\em " booktitle * "\/}" * }
seanhalle@29 528 if$
seanhalle@29 529 }
seanhalle@29 530 { "In " key * }
seanhalle@29 531 if$
seanhalle@29 532 }
seanhalle@29 533 { "In " format.crossref.editor * }
seanhalle@29 534 if$
seanhalle@29 535 " \cite{" * crossref * "}" *
seanhalle@29 536 }
seanhalle@29 537
seanhalle@29 538 FUNCTION {article}
seanhalle@29 539 { output.bibitem
seanhalle@29 540 format.authors "author" output.check
seanhalle@29 541 new.block
seanhalle@29 542 format.title "title" output.check
seanhalle@29 543 new.block
seanhalle@29 544 crossref missing$
seanhalle@29 545 { journal emphasize "journal" output.check
seanhalle@29 546 format.vol.num.pages output
seanhalle@29 547 format.date "year" output.check
seanhalle@29 548 }
seanhalle@29 549 { format.article.crossref output.nonnull
seanhalle@29 550 format.pages output
seanhalle@29 551 }
seanhalle@29 552 if$
seanhalle@29 553 new.block
seanhalle@29 554 note output
seanhalle@29 555 fin.entry
seanhalle@29 556 }
seanhalle@29 557
seanhalle@29 558 FUNCTION {book}
seanhalle@29 559 { output.bibitem
seanhalle@29 560 author empty$
seanhalle@29 561 { format.editors "author and editor" output.check }
seanhalle@29 562 { format.authors output.nonnull
seanhalle@29 563 crossref missing$
seanhalle@29 564 { "author and editor" editor either.or.check }
seanhalle@29 565 'skip$
seanhalle@29 566 if$
seanhalle@29 567 }
seanhalle@29 568 if$
seanhalle@29 569 new.block
seanhalle@29 570 format.btitle "title" output.check
seanhalle@29 571 crossref missing$
seanhalle@29 572 { format.bvolume output
seanhalle@29 573 new.block
seanhalle@29 574 format.number.series output
seanhalle@29 575 new.sentence
seanhalle@29 576 publisher "publisher" output.check
seanhalle@29 577 address output
seanhalle@29 578 }
seanhalle@29 579 { new.block
seanhalle@29 580 format.book.crossref output.nonnull
seanhalle@29 581 }
seanhalle@29 582 if$
seanhalle@29 583 format.edition output
seanhalle@29 584 format.date "year" output.check
seanhalle@29 585 new.block
seanhalle@29 586 note output
seanhalle@29 587 fin.entry
seanhalle@29 588 }
seanhalle@29 589
seanhalle@29 590 FUNCTION {booklet}
seanhalle@29 591 { output.bibitem
seanhalle@29 592 format.authors output
seanhalle@29 593 new.block
seanhalle@29 594 format.title "title" output.check
seanhalle@29 595 howpublished address new.block.checkb
seanhalle@29 596 howpublished output
seanhalle@29 597 address output
seanhalle@29 598 format.date output
seanhalle@29 599 new.block
seanhalle@29 600 note output
seanhalle@29 601 fin.entry
seanhalle@29 602 }
seanhalle@29 603
seanhalle@29 604 FUNCTION {inbook}
seanhalle@29 605 { output.bibitem
seanhalle@29 606 author empty$
seanhalle@29 607 { format.editors "author and editor" output.check }
seanhalle@29 608 { format.authors output.nonnull
seanhalle@29 609 crossref missing$
seanhalle@29 610 { "author and editor" editor either.or.check }
seanhalle@29 611 'skip$
seanhalle@29 612 if$
seanhalle@29 613 }
seanhalle@29 614 if$
seanhalle@29 615 new.block
seanhalle@29 616 format.btitle "title" output.check
seanhalle@29 617 crossref missing$
seanhalle@29 618 { format.bvolume output
seanhalle@29 619 format.chapter.pages "chapter and pages" output.check
seanhalle@29 620 new.block
seanhalle@29 621 format.number.series output
seanhalle@29 622 new.sentence
seanhalle@29 623 publisher "publisher" output.check
seanhalle@29 624 address output
seanhalle@29 625 }
seanhalle@29 626 { format.chapter.pages "chapter and pages" output.check
seanhalle@29 627 new.block
seanhalle@29 628 format.book.crossref output.nonnull
seanhalle@29 629 }
seanhalle@29 630 if$
seanhalle@29 631 format.edition output
seanhalle@29 632 format.date "year" output.check
seanhalle@29 633 new.block
seanhalle@29 634 note output
seanhalle@29 635 fin.entry
seanhalle@29 636 }
seanhalle@29 637
seanhalle@29 638 FUNCTION {incollection}
seanhalle@29 639 { output.bibitem
seanhalle@29 640 format.authors "author" output.check
seanhalle@29 641 new.block
seanhalle@29 642 format.title "title" output.check
seanhalle@29 643 new.block
seanhalle@29 644 crossref missing$
seanhalle@29 645 { format.in.ed.booktitle "booktitle" output.check
seanhalle@29 646 format.bvolume output
seanhalle@29 647 format.number.series output
seanhalle@29 648 format.chapter.pages output
seanhalle@29 649 new.sentence
seanhalle@29 650 publisher "publisher" output.check
seanhalle@29 651 address output
seanhalle@29 652 format.edition output
seanhalle@29 653 format.date "year" output.check
seanhalle@29 654 }
seanhalle@29 655 { format.incoll.inproc.crossref output.nonnull
seanhalle@29 656 format.chapter.pages output
seanhalle@29 657 }
seanhalle@29 658 if$
seanhalle@29 659 new.block
seanhalle@29 660 note output
seanhalle@29 661 fin.entry
seanhalle@29 662 }
seanhalle@29 663
seanhalle@29 664 FUNCTION {inproceedings}
seanhalle@29 665 { output.bibitem
seanhalle@29 666 format.authors "author" output.check
seanhalle@29 667 new.block
seanhalle@29 668 format.title "title" output.check
seanhalle@29 669 new.block
seanhalle@29 670 crossref missing$
seanhalle@29 671 { format.in.ed.booktitle "booktitle" output.check
seanhalle@29 672 format.bvolume output
seanhalle@29 673 format.number.series output
seanhalle@29 674 format.pages output
seanhalle@29 675 address empty$
seanhalle@29 676 { organization publisher new.sentence.checkb
seanhalle@29 677 organization output
seanhalle@29 678 publisher output
seanhalle@29 679 format.date "year" output.check
seanhalle@29 680 }
seanhalle@29 681 { address output.nonnull
seanhalle@29 682 format.date "year" output.check
seanhalle@29 683 new.sentence
seanhalle@29 684 organization output
seanhalle@29 685 publisher output
seanhalle@29 686 }
seanhalle@29 687 if$
seanhalle@29 688 }
seanhalle@29 689 { format.incoll.inproc.crossref output.nonnull
seanhalle@29 690 format.pages output
seanhalle@29 691 }
seanhalle@29 692 if$
seanhalle@29 693 new.block
seanhalle@29 694 note output
seanhalle@29 695 fin.entry
seanhalle@29 696 }
seanhalle@29 697
seanhalle@29 698 FUNCTION {conference} { inproceedings }
seanhalle@29 699
seanhalle@29 700 FUNCTION {manual}
seanhalle@29 701 { output.bibitem
seanhalle@29 702 author empty$
seanhalle@29 703 { organization empty$
seanhalle@29 704 'skip$
seanhalle@29 705 { organization output.nonnull
seanhalle@29 706 address output
seanhalle@29 707 }
seanhalle@29 708 if$
seanhalle@29 709 }
seanhalle@29 710 { format.authors output.nonnull }
seanhalle@29 711 if$
seanhalle@29 712 new.block
seanhalle@29 713 format.btitle "title" output.check
seanhalle@29 714 author empty$
seanhalle@29 715 { organization empty$
seanhalle@29 716 { address new.block.checka
seanhalle@29 717 address output
seanhalle@29 718 }
seanhalle@29 719 'skip$
seanhalle@29 720 if$
seanhalle@29 721 }
seanhalle@29 722 { organization address new.block.checkb
seanhalle@29 723 organization output
seanhalle@29 724 address output
seanhalle@29 725 }
seanhalle@29 726 if$
seanhalle@29 727 format.edition output
seanhalle@29 728 format.date output
seanhalle@29 729 new.block
seanhalle@29 730 note output
seanhalle@29 731 fin.entry
seanhalle@29 732 }
seanhalle@29 733
seanhalle@29 734 FUNCTION {mastersthesis}
seanhalle@29 735 { output.bibitem
seanhalle@29 736 format.authors "author" output.check
seanhalle@29 737 new.block
seanhalle@29 738 format.title "title" output.check
seanhalle@29 739 new.block
seanhalle@29 740 "Master's thesis" format.thesis.type output.nonnull
seanhalle@29 741 school "school" output.check
seanhalle@29 742 address output
seanhalle@29 743 format.date "year" output.check
seanhalle@29 744 new.block
seanhalle@29 745 note output
seanhalle@29 746 fin.entry
seanhalle@29 747 }
seanhalle@29 748
seanhalle@29 749 FUNCTION {misc}
seanhalle@29 750 { output.bibitem
seanhalle@29 751 format.authors output
seanhalle@29 752 title howpublished new.block.checkb
seanhalle@29 753 format.title output
seanhalle@29 754 howpublished new.block.checka
seanhalle@29 755 howpublished output
seanhalle@29 756 format.date output
seanhalle@29 757 new.block
seanhalle@29 758 note output
seanhalle@29 759 fin.entry
seanhalle@29 760 empty.misc.check
seanhalle@29 761 }
seanhalle@29 762
seanhalle@29 763 FUNCTION {phdthesis}
seanhalle@29 764 { output.bibitem
seanhalle@29 765 format.authors "author" output.check
seanhalle@29 766 new.block
seanhalle@29 767 format.btitle "title" output.check
seanhalle@29 768 new.block
seanhalle@29 769 "PhD thesis" format.thesis.type output.nonnull
seanhalle@29 770 school "school" output.check
seanhalle@29 771 address output
seanhalle@29 772 format.date "year" output.check
seanhalle@29 773 new.block
seanhalle@29 774 note output
seanhalle@29 775 fin.entry
seanhalle@29 776 }
seanhalle@29 777
seanhalle@29 778 FUNCTION {proceedings}
seanhalle@29 779 { output.bibitem
seanhalle@29 780 editor empty$
seanhalle@29 781 { organization output }
seanhalle@29 782 { format.editors output.nonnull }
seanhalle@29 783 if$
seanhalle@29 784 new.block
seanhalle@29 785 format.btitle "title" output.check
seanhalle@29 786 format.bvolume output
seanhalle@29 787 format.number.series output
seanhalle@29 788 address empty$
seanhalle@29 789 { editor empty$
seanhalle@29 790 { publisher new.sentence.checka }
seanhalle@29 791 { organization publisher new.sentence.checkb
seanhalle@29 792 organization output
seanhalle@29 793 }
seanhalle@29 794 if$
seanhalle@29 795 publisher output
seanhalle@29 796 format.date "year" output.check
seanhalle@29 797 }
seanhalle@29 798 { address output.nonnull
seanhalle@29 799 format.date "year" output.check
seanhalle@29 800 new.sentence
seanhalle@29 801 editor empty$
seanhalle@29 802 'skip$
seanhalle@29 803 { organization output }
seanhalle@29 804 if$
seanhalle@29 805 publisher output
seanhalle@29 806 }
seanhalle@29 807 if$
seanhalle@29 808 new.block
seanhalle@29 809 note output
seanhalle@29 810 fin.entry
seanhalle@29 811 }
seanhalle@29 812
seanhalle@29 813 FUNCTION {techreport}
seanhalle@29 814 { output.bibitem
seanhalle@29 815 format.authors "author" output.check
seanhalle@29 816 new.block
seanhalle@29 817 format.title "title" output.check
seanhalle@29 818 new.block
seanhalle@29 819 format.tr.number output.nonnull
seanhalle@29 820 institution "institution" output.check
seanhalle@29 821 address output
seanhalle@29 822 format.date "year" output.check
seanhalle@29 823 new.block
seanhalle@29 824 note output
seanhalle@29 825 fin.entry
seanhalle@29 826 }
seanhalle@29 827
seanhalle@29 828 FUNCTION {unpublished}
seanhalle@29 829 { output.bibitem
seanhalle@29 830 format.authors "author" output.check
seanhalle@29 831 new.block
seanhalle@29 832 format.title "title" output.check
seanhalle@29 833 new.block
seanhalle@29 834 note "note" output.check
seanhalle@29 835 format.date output
seanhalle@29 836 fin.entry
seanhalle@29 837 }
seanhalle@29 838
seanhalle@29 839 FUNCTION {default.type} { misc }
seanhalle@29 840
seanhalle@29 841 MACRO {jan} {"January"}
seanhalle@29 842
seanhalle@29 843 MACRO {feb} {"February"}
seanhalle@29 844
seanhalle@29 845 MACRO {mar} {"March"}
seanhalle@29 846
seanhalle@29 847 MACRO {apr} {"April"}
seanhalle@29 848
seanhalle@29 849 MACRO {may} {"May"}
seanhalle@29 850
seanhalle@29 851 MACRO {jun} {"June"}
seanhalle@29 852
seanhalle@29 853 MACRO {jul} {"July"}
seanhalle@29 854
seanhalle@29 855 MACRO {aug} {"August"}
seanhalle@29 856
seanhalle@29 857 MACRO {sep} {"September"}
seanhalle@29 858
seanhalle@29 859 MACRO {oct} {"October"}
seanhalle@29 860
seanhalle@29 861 MACRO {nov} {"November"}
seanhalle@29 862
seanhalle@29 863 MACRO {dec} {"December"}
seanhalle@29 864
seanhalle@29 865 MACRO {acmcs} {"ACM Computing Surveys"}
seanhalle@29 866
seanhalle@29 867 MACRO {acta} {"Acta Informatica"}
seanhalle@29 868
seanhalle@29 869 MACRO {cacm} {"Communications of the ACM"}
seanhalle@29 870
seanhalle@29 871 MACRO {ibmjrd} {"IBM Journal of Research and Development"}
seanhalle@29 872
seanhalle@29 873 MACRO {ibmsj} {"IBM Systems Journal"}
seanhalle@29 874
seanhalle@29 875 MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
seanhalle@29 876
seanhalle@29 877 MACRO {ieeetc} {"IEEE Transactions on Computers"}
seanhalle@29 878
seanhalle@29 879 MACRO {ieeetcad}
seanhalle@29 880 {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
seanhalle@29 881
seanhalle@29 882 MACRO {ipl} {"Information Processing Letters"}
seanhalle@29 883
seanhalle@29 884 MACRO {jacm} {"Journal of the ACM"}
seanhalle@29 885
seanhalle@29 886 MACRO {jcss} {"Journal of Computer and System Sciences"}
seanhalle@29 887
seanhalle@29 888 MACRO {scp} {"Science of Computer Programming"}
seanhalle@29 889
seanhalle@29 890 MACRO {sicomp} {"SIAM Journal on Computing"}
seanhalle@29 891
seanhalle@29 892 MACRO {tocs} {"ACM Transactions on Computer Systems"}
seanhalle@29 893
seanhalle@29 894 MACRO {tods} {"ACM Transactions on Database Systems"}
seanhalle@29 895
seanhalle@29 896 MACRO {tog} {"ACM Transactions on Graphics"}
seanhalle@29 897
seanhalle@29 898 MACRO {toms} {"ACM Transactions on Mathematical Software"}
seanhalle@29 899
seanhalle@29 900 MACRO {toois} {"ACM Transactions on Office Information Systems"}
seanhalle@29 901
seanhalle@29 902 MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
seanhalle@29 903
seanhalle@29 904 MACRO {tcs} {"Theoretical Computer Science"}
seanhalle@29 905
seanhalle@29 906 READ
seanhalle@29 907
seanhalle@29 908 FUNCTION {sortify}
seanhalle@29 909 { purify$
seanhalle@29 910 "l" change.case$
seanhalle@29 911 }
seanhalle@29 912
seanhalle@29 913 INTEGERS { len }
seanhalle@29 914
seanhalle@29 915 FUNCTION {chop.word}
seanhalle@29 916 { 's :=
seanhalle@29 917 'len :=
seanhalle@29 918 s #1 len substring$ =
seanhalle@29 919 { s len #1 + global.max$ substring$ }
seanhalle@29 920 's
seanhalle@29 921 if$
seanhalle@29 922 }
seanhalle@29 923
seanhalle@29 924 FUNCTION {sort.format.names}
seanhalle@29 925 { 's :=
seanhalle@29 926 #1 'nameptr :=
seanhalle@29 927 ""
seanhalle@29 928 s num.names$ 'numnames :=
seanhalle@29 929 numnames 'namesleft :=
seanhalle@29 930 { namesleft #0 > }
seanhalle@29 931 { nameptr #1 >
seanhalle@29 932 { " " * }
seanhalle@29 933 'skip$
seanhalle@29 934 if$
seanhalle@29 935 s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
seanhalle@29 936 nameptr numnames = t "others" = and
seanhalle@29 937 { "et al" * }
seanhalle@29 938 { t sortify * }
seanhalle@29 939 if$
seanhalle@29 940 nameptr #1 + 'nameptr :=
seanhalle@29 941 namesleft #1 - 'namesleft :=
seanhalle@29 942 }
seanhalle@29 943 while$
seanhalle@29 944 }
seanhalle@29 945
seanhalle@29 946 FUNCTION {sort.format.title}
seanhalle@29 947 { 't :=
seanhalle@29 948 "A " #2
seanhalle@29 949 "An " #3
seanhalle@29 950 "The " #4 t chop.word
seanhalle@29 951 chop.word
seanhalle@29 952 chop.word
seanhalle@29 953 sortify
seanhalle@29 954 #1 global.max$ substring$
seanhalle@29 955 }
seanhalle@29 956
seanhalle@29 957 FUNCTION {author.sort}
seanhalle@29 958 { author empty$
seanhalle@29 959 { key empty$
seanhalle@29 960 { "to sort, need author or key in " cite$ * warning$
seanhalle@29 961 ""
seanhalle@29 962 }
seanhalle@29 963 { key sortify }
seanhalle@29 964 if$
seanhalle@29 965 }
seanhalle@29 966 { author sort.format.names }
seanhalle@29 967 if$
seanhalle@29 968 }
seanhalle@29 969
seanhalle@29 970 FUNCTION {author.editor.sort}
seanhalle@29 971 { author empty$
seanhalle@29 972 { editor empty$
seanhalle@29 973 { key empty$
seanhalle@29 974 { "to sort, need author, editor, or key in " cite$ * warning$
seanhalle@29 975 ""
seanhalle@29 976 }
seanhalle@29 977 { key sortify }
seanhalle@29 978 if$
seanhalle@29 979 }
seanhalle@29 980 { editor sort.format.names }
seanhalle@29 981 if$
seanhalle@29 982 }
seanhalle@29 983 { author sort.format.names }
seanhalle@29 984 if$
seanhalle@29 985 }
seanhalle@29 986
seanhalle@29 987 FUNCTION {author.organization.sort}
seanhalle@29 988 { author empty$
seanhalle@29 989 { organization empty$
seanhalle@29 990 { key empty$
seanhalle@29 991 { "to sort, need author, organization, or key in " cite$ * warning$
seanhalle@29 992 ""
seanhalle@29 993 }
seanhalle@29 994 { key sortify }
seanhalle@29 995 if$
seanhalle@29 996 }
seanhalle@29 997 { "The " #4 organization chop.word sortify }
seanhalle@29 998 if$
seanhalle@29 999 }
seanhalle@29 1000 { author sort.format.names }
seanhalle@29 1001 if$
seanhalle@29 1002 }
seanhalle@29 1003
seanhalle@29 1004 FUNCTION {editor.organization.sort}
seanhalle@29 1005 { editor empty$
seanhalle@29 1006 { organization empty$
seanhalle@29 1007 { key empty$
seanhalle@29 1008 { "to sort, need editor, organization, or key in " cite$ * warning$
seanhalle@29 1009 ""
seanhalle@29 1010 }
seanhalle@29 1011 { key sortify }
seanhalle@29 1012 if$
seanhalle@29 1013 }
seanhalle@29 1014 { "The " #4 organization chop.word sortify }
seanhalle@29 1015 if$
seanhalle@29 1016 }
seanhalle@29 1017 { editor sort.format.names }
seanhalle@29 1018 if$
seanhalle@29 1019 }
seanhalle@29 1020
seanhalle@29 1021 FUNCTION {presort}
seanhalle@29 1022 { type$ "book" =
seanhalle@29 1023 type$ "inbook" =
seanhalle@29 1024 or
seanhalle@29 1025 'author.editor.sort
seanhalle@29 1026 { type$ "proceedings" =
seanhalle@29 1027 'editor.organization.sort
seanhalle@29 1028 { type$ "manual" =
seanhalle@29 1029 'author.organization.sort
seanhalle@29 1030 'author.sort
seanhalle@29 1031 if$
seanhalle@29 1032 }
seanhalle@29 1033 if$
seanhalle@29 1034 }
seanhalle@29 1035 if$
seanhalle@29 1036 " "
seanhalle@29 1037 *
seanhalle@29 1038 year field.or.null sortify
seanhalle@29 1039 *
seanhalle@29 1040 " "
seanhalle@29 1041 *
seanhalle@29 1042 title field.or.null
seanhalle@29 1043 sort.format.title
seanhalle@29 1044 *
seanhalle@29 1045 #1 entry.max$ substring$
seanhalle@29 1046 'sort.key$ :=
seanhalle@29 1047 }
seanhalle@29 1048
seanhalle@29 1049 ITERATE {presort}
seanhalle@29 1050
seanhalle@29 1051 SORT
seanhalle@29 1052
seanhalle@29 1053 STRINGS { longest.label }
seanhalle@29 1054
seanhalle@29 1055 INTEGERS { number.label longest.label.width }
seanhalle@29 1056
seanhalle@29 1057 FUNCTION {initialize.longest.label}
seanhalle@29 1058 { "" 'longest.label :=
seanhalle@29 1059 #1 'number.label :=
seanhalle@29 1060 #0 'longest.label.width :=
seanhalle@29 1061 }
seanhalle@29 1062
seanhalle@29 1063 FUNCTION {longest.label.pass}
seanhalle@29 1064 { number.label int.to.str$ 'label :=
seanhalle@29 1065 number.label #1 + 'number.label :=
seanhalle@29 1066 label width$ longest.label.width >
seanhalle@29 1067 { label 'longest.label :=
seanhalle@29 1068 label width$ 'longest.label.width :=
seanhalle@29 1069 }
seanhalle@29 1070 'skip$
seanhalle@29 1071 if$
seanhalle@29 1072 }
seanhalle@29 1073
seanhalle@29 1074 EXECUTE {initialize.longest.label}
seanhalle@29 1075
seanhalle@29 1076 ITERATE {longest.label.pass}
seanhalle@29 1077
seanhalle@29 1078 FUNCTION {begin.bib}
seanhalle@29 1079 { preamble$ empty$
seanhalle@29 1080 'skip$
seanhalle@29 1081 { preamble$ write$ newline$ }
seanhalle@29 1082 if$
seanhalle@29 1083 "\begin{thebibliography}{" longest.label * "}" * write$ newline$
seanhalle@29 1084 }
seanhalle@29 1085
seanhalle@29 1086 EXECUTE {begin.bib}
seanhalle@29 1087
seanhalle@29 1088 EXECUTE {init.state.consts}
seanhalle@29 1089
seanhalle@29 1090 ITERATE {call.type$}
seanhalle@29 1091
seanhalle@29 1092 FUNCTION {end.bib}
seanhalle@29 1093 { newline$
seanhalle@29 1094 "\end{thebibliography}" write$ newline$
seanhalle@29 1095 }
seanhalle@29 1096
seanhalle@29 1097 EXECUTE {end.bib}
seanhalle@29 1098