IEEEtran.bst 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410
  1. %%
  2. %% IEEEtran.bst
  3. %% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted)
  4. %% Version 1.14 (2015/08/26)
  5. %%
  6. %% Copyright (c) 2003-2015 Michael Shell
  7. %%
  8. %% Original starting code base and algorithms obtained from the output of
  9. %% Patrick W. Daly's makebst package as well as from prior versions of
  10. %% IEEE BibTeX styles:
  11. %%
  12. %% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988)
  13. %% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
  14. %%
  15. %% Support sites:
  16. %% http://www.michaelshell.org/tex/ieeetran/
  17. %% http://www.ctan.org/pkg/ieeetran
  18. %% and/or
  19. %% http://www.ieee.org/
  20. %%
  21. %% For use with BibTeX version 0.99a or later
  22. %%
  23. %% This is a numerical citation style.
  24. %%
  25. %%*************************************************************************
  26. %% Legal Notice:
  27. %% This code is offered as-is without any warranty either expressed or
  28. %% implied; without even the implied warranty of MERCHANTABILITY or
  29. %% FITNESS FOR A PARTICULAR PURPOSE!
  30. %% User assumes all risk.
  31. %% In no event shall the IEEE or any contributor to this code be liable for
  32. %% any damages or losses, including, but not limited to, incidental,
  33. %% consequential, or any other damages, resulting from the use or misuse
  34. %% of any information contained here.
  35. %%
  36. %% All comments are the opinions of their respective authors and are not
  37. %% necessarily endorsed by the IEEE.
  38. %%
  39. %% This work is distributed under the LaTeX Project Public License (LPPL)
  40. %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
  41. %% distributed and modified. A copy of the LPPL, version 1.3, is included
  42. %% in the base LaTeX documentation of all distributions of LaTeX released
  43. %% 2003/12/01 or later.
  44. %% Retain all contribution notices and credits.
  45. %% ** Modified files should be clearly indicated as such, including **
  46. %% ** renaming them and changing author support contact information. **
  47. %%*************************************************************************
  48. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  49. %% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
  50. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  51. % These are the defaults for the user adjustable controls. The values used
  52. % here can be overridden by the user via IEEEtranBSTCTL entry type.
  53. % NOTE: The recommended LaTeX command to invoke a control entry type is:
  54. %
  55. %\makeatletter
  56. %\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
  57. %\def\@bstctlcite[#1]#2{\@bsphack
  58. % \@for\@citeb:=#2\do{%
  59. % \edef\@citeb{\expandafter\@firstofone\@citeb}%
  60. % \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
  61. % \@esphack}
  62. %\makeatother
  63. %
  64. % It is called at the start of the document, before the first \cite, like:
  65. % \bstctlcite{IEEEexample:BSTcontrol}
  66. %
  67. % IEEEtran.cls V1.6 and later does provide this command.
  68. % #0 turns off the display of the number for articles.
  69. % #1 enables
  70. FUNCTION {default.is.use.number.for.article} { #1 }
  71. % #0 turns off the display of the paper and type fields in @inproceedings.
  72. % #1 enables
  73. FUNCTION {default.is.use.paper} { #1 }
  74. % #0 turns off the display of urls
  75. % #1 enables
  76. FUNCTION {default.is.use.url} { #1 }
  77. % #0 turns off the forced use of "et al."
  78. % #1 enables
  79. FUNCTION {default.is.forced.et.al} { #0 }
  80. % The maximum number of names that can be present beyond which an "et al."
  81. % usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
  82. % is not greater than this value!
  83. % Note: There are many instances of references in IEEE journals which have
  84. % a very large number of authors as well as instances in which "et al." is
  85. % used profusely.
  86. FUNCTION {default.max.num.names.before.forced.et.al} { #10 }
  87. % The number of names that will be shown with a forced "et al.".
  88. % Must be less than or equal to max.num.names.before.forced.et.al
  89. FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }
  90. % #0 turns off the alternate interword spacing for entries with URLs.
  91. % #1 enables
  92. FUNCTION {default.is.use.alt.interword.spacing} { #1 }
  93. % If alternate interword spacing for entries with URLs is enabled, this is
  94. % the interword spacing stretch factor that will be used. For example, the
  95. % default "4" here means that the interword spacing in entries with URLs can
  96. % stretch to four times normal. Does not have to be an integer. Note that
  97. % the value specified here can be overridden by the user in their LaTeX
  98. % code via a command such as:
  99. % "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
  100. % that via the IEEEtranBSTCTL entry type.
  101. FUNCTION {default.ALTinterwordstretchfactor} { "4" }
  102. % #0 turns off the "dashification" of repeated (i.e., identical to those
  103. % of the previous entry) names. The IEEE normally does this.
  104. % #1 enables
  105. FUNCTION {default.is.dash.repeated.names} { #1 }
  106. % The default name format control string.
  107. FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" }
  108. % The default LaTeX font command for the names.
  109. FUNCTION {default.name.latex.cmd}{ "" }
  110. % The default URL prefix.
  111. FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }
  112. % Other controls that cannot be accessed via IEEEtranBSTCTL entry type.
  113. % #0 turns off the terminal startup banner/completed message so as to
  114. % operate more quietly.
  115. % #1 enables
  116. FUNCTION {is.print.banners.to.terminal} { #1 }
  117. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  118. %% FILE VERSION AND BANNER %%
  119. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  120. FUNCTION{bst.file.version} { "1.14" }
  121. FUNCTION{bst.file.date} { "2015/08/26" }
  122. FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" }
  123. FUNCTION {banner.message}
  124. { is.print.banners.to.terminal
  125. { "-- IEEEtran.bst version" " " * bst.file.version *
  126. " (" * bst.file.date * ") " * "by Michael Shell." *
  127. top$
  128. "-- " bst.file.website *
  129. top$
  130. "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." *
  131. top$
  132. }
  133. { skip$ }
  134. if$
  135. }
  136. FUNCTION {completed.message}
  137. { is.print.banners.to.terminal
  138. { ""
  139. top$
  140. "Done."
  141. top$
  142. }
  143. { skip$ }
  144. if$
  145. }
  146. %%%%%%%%%%%%%%%%%%%%%%
  147. %% STRING CONSTANTS %%
  148. %%%%%%%%%%%%%%%%%%%%%%
  149. FUNCTION {bbl.and}{ "and" }
  150. FUNCTION {bbl.etal}{ "et~al." }
  151. FUNCTION {bbl.editors}{ "eds." }
  152. FUNCTION {bbl.editor}{ "ed." }
  153. FUNCTION {bbl.edition}{ "ed." }
  154. FUNCTION {bbl.volume}{ "vol." }
  155. FUNCTION {bbl.of}{ "of" }
  156. FUNCTION {bbl.number}{ "no." }
  157. FUNCTION {bbl.in}{ "in" }
  158. FUNCTION {bbl.pages}{ "pp." }
  159. FUNCTION {bbl.page}{ "p." }
  160. FUNCTION {bbl.chapter}{ "ch." }
  161. FUNCTION {bbl.paper}{ "paper" }
  162. FUNCTION {bbl.part}{ "pt." }
  163. FUNCTION {bbl.patent}{ "Patent" }
  164. FUNCTION {bbl.patentUS}{ "U.S." }
  165. FUNCTION {bbl.revision}{ "Rev." }
  166. FUNCTION {bbl.series}{ "ser." }
  167. FUNCTION {bbl.standard}{ "Std." }
  168. FUNCTION {bbl.techrep}{ "Tech. Rep." }
  169. FUNCTION {bbl.mthesis}{ "Master's thesis" }
  170. FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
  171. FUNCTION {bbl.st}{ "st" }
  172. FUNCTION {bbl.nd}{ "nd" }
  173. FUNCTION {bbl.rd}{ "rd" }
  174. FUNCTION {bbl.th}{ "th" }
  175. % This is the LaTeX spacer that is used when a larger than normal space
  176. % is called for (such as just before the address:publisher).
  177. FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }
  178. % The LaTeX code for dashes that are used to represent repeated names.
  179. % Note: Some older IEEE journals used something like
  180. % "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
  181. % the baseline. However, the IEEE now uses a thinner, above baseline,
  182. % six dash long sequence.
  183. FUNCTION {repeated.name.dashes} { "------" }
  184. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  185. %% PREDEFINED STRING MACROS %%
  186. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  187. MACRO {jan} {"Jan."}
  188. MACRO {feb} {"Feb."}
  189. MACRO {mar} {"Mar."}
  190. MACRO {apr} {"Apr."}
  191. MACRO {may} {"May"}
  192. MACRO {jun} {"Jun."}
  193. MACRO {jul} {"Jul."}
  194. MACRO {aug} {"Aug."}
  195. MACRO {sep} {"Sep."}
  196. MACRO {oct} {"Oct."}
  197. MACRO {nov} {"Nov."}
  198. MACRO {dec} {"Dec."}
  199. %%%%%%%%%%%%%%%%%%
  200. %% ENTRY FIELDS %%
  201. %%%%%%%%%%%%%%%%%%
  202. ENTRY
  203. { address
  204. assignee
  205. author
  206. booktitle
  207. chapter
  208. day
  209. dayfiled
  210. edition
  211. editor
  212. howpublished
  213. institution
  214. intype
  215. journal
  216. key
  217. language
  218. month
  219. monthfiled
  220. nationality
  221. note
  222. number
  223. organization
  224. pages
  225. paper
  226. publisher
  227. school
  228. series
  229. revision
  230. title
  231. type
  232. url
  233. volume
  234. year
  235. yearfiled
  236. CTLuse_article_number
  237. CTLuse_paper
  238. CTLuse_url
  239. CTLuse_forced_etal
  240. CTLmax_names_forced_etal
  241. CTLnames_show_etal
  242. CTLuse_alt_spacing
  243. CTLalt_stretch_factor
  244. CTLdash_repeated_names
  245. CTLname_format_string
  246. CTLname_latex_cmd
  247. CTLname_url_prefix
  248. }
  249. {}
  250. { label }
  251. %%%%%%%%%%%%%%%%%%%%%%%
  252. %% INTEGER VARIABLES %%
  253. %%%%%%%%%%%%%%%%%%%%%%%
  254. INTEGERS { prev.status.punct this.status.punct punct.std
  255. punct.no punct.comma punct.period
  256. prev.status.space this.status.space space.std
  257. space.no space.normal space.large
  258. prev.status.quote this.status.quote quote.std
  259. quote.no quote.close
  260. prev.status.nline this.status.nline nline.std
  261. nline.no nline.newblock
  262. status.cap cap.std
  263. cap.no cap.yes}
  264. INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames }
  265. INTEGERS { is.use.number.for.article
  266. is.use.paper
  267. is.use.url
  268. is.forced.et.al
  269. max.num.names.before.forced.et.al
  270. num.names.shown.with.forced.et.al
  271. is.use.alt.interword.spacing
  272. is.dash.repeated.names}
  273. %%%%%%%%%%%%%%%%%%%%%%
  274. %% STRING VARIABLES %%
  275. %%%%%%%%%%%%%%%%%%%%%%
  276. STRINGS { bibinfo
  277. longest.label
  278. oldname
  279. s
  280. t
  281. ALTinterwordstretchfactor
  282. name.format.string
  283. name.latex.cmd
  284. name.url.prefix}
  285. %%%%%%%%%%%%%%%%%%%%%%%%%
  286. %% LOW LEVEL FUNCTIONS %%
  287. %%%%%%%%%%%%%%%%%%%%%%%%%
  288. FUNCTION {initialize.controls}
  289. { default.is.use.number.for.article 'is.use.number.for.article :=
  290. default.is.use.paper 'is.use.paper :=
  291. default.is.use.url 'is.use.url :=
  292. default.is.forced.et.al 'is.forced.et.al :=
  293. default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
  294. default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
  295. default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
  296. default.is.dash.repeated.names 'is.dash.repeated.names :=
  297. default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
  298. default.name.format.string 'name.format.string :=
  299. default.name.latex.cmd 'name.latex.cmd :=
  300. default.name.url.prefix 'name.url.prefix :=
  301. }
  302. % This IEEEtran.bst features a very powerful and flexible mechanism for
  303. % controlling the capitalization, punctuation, spacing, quotation, and
  304. % newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
  305. % or use the newline/newblock feature, but it has been implemented for
  306. % possible future use.) The output states of IEEEtran.bst consist of
  307. % multiple independent attributes and, as such, can be thought of as being
  308. % vectors, rather than the simple scalar values ("before.all",
  309. % "mid.sentence", etc.) used in most other .bst files.
  310. %
  311. % The more flexible and complex design used here was motivated in part by
  312. % the IEEE's rather unusual bibliography style. For example, the IEEE ends the
  313. % previous field item with a period and large space prior to the publisher
  314. % address; the @electronic entry types use periods as inter-item punctuation
  315. % rather than the commas used by the other entry types; and URLs are never
  316. % followed by periods even though they are the last item in the entry.
  317. % Although it is possible to accommodate these features with the conventional
  318. % output state system, the seemingly endless exceptions make for convoluted,
  319. % unreliable and difficult to maintain code.
  320. %
  321. % IEEEtran.bst's output state system can be easily understood via a simple
  322. % illustration of two most recently formatted entry fields (on the stack):
  323. %
  324. % CURRENT_ITEM
  325. % "PREVIOUS_ITEM
  326. %
  327. % which, in this example, is to eventually appear in the bibliography as:
  328. %
  329. % "PREVIOUS_ITEM," CURRENT_ITEM
  330. %
  331. % It is the job of the output routine to take the previous item off of the
  332. % stack (while leaving the current item at the top of the stack), apply its
  333. % trailing punctuation (including closing quote marks) and spacing, and then
  334. % to write the result to BibTeX's output buffer:
  335. %
  336. % "PREVIOUS_ITEM,"
  337. %
  338. % Punctuation (and spacing) between items is often determined by both of the
  339. % items rather than just the first one. The presence of quotation marks
  340. % further complicates the situation because, in standard English, trailing
  341. % punctuation marks are supposed to be contained within the quotes.
  342. %
  343. % IEEEtran.bst maintains two output state (aka "status") vectors which
  344. % correspond to the previous and current (aka "this") items. Each vector
  345. % consists of several independent attributes which track punctuation,
  346. % spacing, quotation, and newlines. Capitalization status is handled by a
  347. % separate scalar because the format routines, not the output routine,
  348. % handle capitalization and, therefore, there is no need to maintain the
  349. % capitalization attribute for both the "previous" and "this" items.
  350. %
  351. % When a format routine adds a new item, it copies the current output status
  352. % vector to the previous output status vector and (usually) resets the
  353. % current (this) output status vector to a "standard status" vector. Using a
  354. % "standard status" vector in this way allows us to redefine what we mean by
  355. % "standard status" at the start of each entry handler and reuse the same
  356. % format routines under the various inter-item separation schemes. For
  357. % example, the standard status vector for the @book entry type may use
  358. % commas for item separators, while the @electronic type may use periods,
  359. % yet both entry handlers exploit many of the exact same format routines.
  360. %
  361. % Because format routines have write access to the output status vector of
  362. % the previous item, they can override the punctuation choices of the
  363. % previous format routine! Therefore, it becomes trivial to implement rules
  364. % such as "Always use a period and a large space before the publisher." By
  365. % pushing the generation of the closing quote mark to the output routine, we
  366. % avoid all the problems caused by having to close a quote before having all
  367. % the information required to determine what the punctuation should be.
  368. %
  369. % The IEEEtran.bst output state system can easily be expanded if needed.
  370. % For instance, it is easy to add a "space.tie" attribute value if the
  371. % bibliography rules mandate that two items have to be joined with an
  372. % unbreakable space.
  373. FUNCTION {initialize.status.constants}
  374. { #0 'punct.no :=
  375. #1 'punct.comma :=
  376. #2 'punct.period :=
  377. #0 'space.no :=
  378. #1 'space.normal :=
  379. #2 'space.large :=
  380. #0 'quote.no :=
  381. #1 'quote.close :=
  382. #0 'cap.no :=
  383. #1 'cap.yes :=
  384. #0 'nline.no :=
  385. #1 'nline.newblock :=
  386. }
  387. FUNCTION {std.status.using.comma}
  388. { punct.comma 'punct.std :=
  389. space.normal 'space.std :=
  390. quote.no 'quote.std :=
  391. nline.no 'nline.std :=
  392. cap.no 'cap.std :=
  393. }
  394. FUNCTION {std.status.using.period}
  395. { punct.period 'punct.std :=
  396. space.normal 'space.std :=
  397. quote.no 'quote.std :=
  398. nline.no 'nline.std :=
  399. cap.yes 'cap.std :=
  400. }
  401. FUNCTION {initialize.prev.this.status}
  402. { punct.no 'prev.status.punct :=
  403. space.no 'prev.status.space :=
  404. quote.no 'prev.status.quote :=
  405. nline.no 'prev.status.nline :=
  406. punct.no 'this.status.punct :=
  407. space.no 'this.status.space :=
  408. quote.no 'this.status.quote :=
  409. nline.no 'this.status.nline :=
  410. cap.yes 'status.cap :=
  411. }
  412. FUNCTION {this.status.std}
  413. { punct.std 'this.status.punct :=
  414. space.std 'this.status.space :=
  415. quote.std 'this.status.quote :=
  416. nline.std 'this.status.nline :=
  417. }
  418. FUNCTION {cap.status.std}{ cap.std 'status.cap := }
  419. FUNCTION {this.to.prev.status}
  420. { this.status.punct 'prev.status.punct :=
  421. this.status.space 'prev.status.space :=
  422. this.status.quote 'prev.status.quote :=
  423. this.status.nline 'prev.status.nline :=
  424. }
  425. FUNCTION {not}
  426. { { #0 }
  427. { #1 }
  428. if$
  429. }
  430. FUNCTION {and}
  431. { { skip$ }
  432. { pop$ #0 }
  433. if$
  434. }
  435. FUNCTION {or}
  436. { { pop$ #1 }
  437. { skip$ }
  438. if$
  439. }
  440. % convert the strings "yes" or "no" to #1 or #0 respectively
  441. FUNCTION {yes.no.to.int}
  442. { "l" change.case$ duplicate$
  443. "yes" =
  444. { pop$ #1 }
  445. { duplicate$ "no" =
  446. { pop$ #0 }
  447. { "unknown boolean " quote$ * swap$ * quote$ *
  448. " in " * cite$ * warning$
  449. #0
  450. }
  451. if$
  452. }
  453. if$
  454. }
  455. % pushes true if the single char string on the stack is in the
  456. % range of "0" to "9"
  457. FUNCTION {is.num}
  458. { chr.to.int$
  459. duplicate$ "0" chr.to.int$ < not
  460. swap$ "9" chr.to.int$ > not and
  461. }
  462. % multiplies the integer on the stack by a factor of 10
  463. FUNCTION {bump.int.mag}
  464. { #0 'multiresult :=
  465. { duplicate$ #0 > }
  466. { #1 -
  467. multiresult #10 +
  468. 'multiresult :=
  469. }
  470. while$
  471. pop$
  472. multiresult
  473. }
  474. % converts a single character string on the stack to an integer
  475. FUNCTION {char.to.integer}
  476. { duplicate$
  477. is.num
  478. { chr.to.int$ "0" chr.to.int$ - }
  479. {"noninteger character " quote$ * swap$ * quote$ *
  480. " in integer field of " * cite$ * warning$
  481. #0
  482. }
  483. if$
  484. }
  485. % converts a string on the stack to an integer
  486. FUNCTION {string.to.integer}
  487. { duplicate$ text.length$ 'namesleft :=
  488. #1 'nameptr :=
  489. #0 'numnames :=
  490. { nameptr namesleft > not }
  491. { duplicate$ nameptr #1 substring$
  492. char.to.integer numnames bump.int.mag +
  493. 'numnames :=
  494. nameptr #1 +
  495. 'nameptr :=
  496. }
  497. while$
  498. pop$
  499. numnames
  500. }
  501. % The output routines write out the *next* to the top (previous) item on the
  502. % stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
  503. % the output status for the top two items on the stack, these output
  504. % routines have to consider the previous output status (which corresponds to
  505. % the item that is being output). Full independent control of punctuation,
  506. % closing quote marks, spacing, and newblock is provided.
  507. %
  508. % "output.nonnull" does not check for the presence of a previous empty
  509. % item.
  510. %
  511. % "output" does check for the presence of a previous empty item and will
  512. % remove an empty item rather than outputing it.
  513. %
  514. % "output.warn" is like "output", but will issue a warning if it detects
  515. % an empty item.
  516. FUNCTION {output.nonnull}
  517. { swap$
  518. prev.status.punct punct.comma =
  519. { "," * }
  520. { skip$ }
  521. if$
  522. prev.status.punct punct.period =
  523. { add.period$ }
  524. { skip$ }
  525. if$
  526. prev.status.quote quote.close =
  527. { "''" * }
  528. { skip$ }
  529. if$
  530. prev.status.space space.normal =
  531. { " " * }
  532. { skip$ }
  533. if$
  534. prev.status.space space.large =
  535. { large.space * }
  536. { skip$ }
  537. if$
  538. write$
  539. prev.status.nline nline.newblock =
  540. { newline$ "\newblock " write$ }
  541. { skip$ }
  542. if$
  543. }
  544. FUNCTION {output}
  545. { duplicate$ empty$
  546. 'pop$
  547. 'output.nonnull
  548. if$
  549. }
  550. FUNCTION {output.warn}
  551. { 't :=
  552. duplicate$ empty$
  553. { pop$ "empty " t * " in " * cite$ * warning$ }
  554. 'output.nonnull
  555. if$
  556. }
  557. % "fin.entry" is the output routine that handles the last item of the entry
  558. % (which will be on the top of the stack when "fin.entry" is called).
  559. FUNCTION {fin.entry}
  560. { this.status.punct punct.no =
  561. { skip$ }
  562. { add.period$ }
  563. if$
  564. this.status.quote quote.close =
  565. { "''" * }
  566. { skip$ }
  567. if$
  568. write$
  569. newline$
  570. }
  571. FUNCTION {is.last.char.not.punct}
  572. { duplicate$
  573. "}" * add.period$
  574. #-1 #1 substring$ "." =
  575. }
  576. FUNCTION {is.multiple.pages}
  577. { 't :=
  578. #0 'multiresult :=
  579. { multiresult not
  580. t empty$ not
  581. and
  582. }
  583. { t #1 #1 substring$
  584. duplicate$ "-" =
  585. swap$ duplicate$ "," =
  586. swap$ "+" =
  587. or or
  588. { #1 'multiresult := }
  589. { t #2 global.max$ substring$ 't := }
  590. if$
  591. }
  592. while$
  593. multiresult
  594. }
  595. FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }
  596. FUNCTION {emphasize}
  597. { duplicate$ empty$
  598. { pop$ "" }
  599. { "\emph{" swap$ * "}" * }
  600. if$
  601. }
  602. FUNCTION {do.name.latex.cmd}
  603. { name.latex.cmd
  604. empty$
  605. { skip$ }
  606. { name.latex.cmd "{" * swap$ * "}" * }
  607. if$
  608. }
  609. % IEEEtran.bst uses its own \BIBforeignlanguage command which directly
  610. % invokes the TeX hyphenation patterns without the need of the Babel
  611. % package. Babel does a lot more than switch hyphenation patterns and
  612. % its loading can cause unintended effects in many class files (such as
  613. % IEEEtran.cls).
  614. FUNCTION {select.language}
  615. { duplicate$ empty$ 'pop$
  616. { language empty$ 'skip$
  617. { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
  618. if$
  619. }
  620. if$
  621. }
  622. FUNCTION {tie.or.space.prefix}
  623. { duplicate$ text.length$ #3 <
  624. { "~" }
  625. { " " }
  626. if$
  627. swap$
  628. }
  629. FUNCTION {get.bbl.editor}
  630. { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
  631. FUNCTION {space.word}{ " " swap$ * " " * }
  632. % Field Conditioners, Converters, Checkers and External Interfaces
  633. FUNCTION {empty.field.to.null.string}
  634. { duplicate$ empty$
  635. { pop$ "" }
  636. { skip$ }
  637. if$
  638. }
  639. FUNCTION {either.or.check}
  640. { empty$
  641. { pop$ }
  642. { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  643. if$
  644. }
  645. FUNCTION {empty.entry.warn}
  646. { author empty$ title empty$ howpublished empty$
  647. month empty$ year empty$ note empty$ url empty$
  648. and and and and and and
  649. { "all relevant fields are empty in " cite$ * warning$ }
  650. 'skip$
  651. if$
  652. }
  653. % The bibinfo system provides a way for the electronic parsing/acquisition
  654. % of a bibliography's contents as is done by ReVTeX. For example, a field
  655. % could be entered into the bibliography as:
  656. % \bibinfo{volume}{2}
  657. % Only the "2" would show up in the document, but the LaTeX \bibinfo command
  658. % could do additional things with the information. IEEEtran.bst does provide
  659. % a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
  660. % currently not used as the bogus bibinfo functions defined here output the
  661. % entry values directly without the \bibinfo wrapper. The bibinfo functions
  662. % themselves (and the calls to them) are retained for possible future use.
  663. %
  664. % bibinfo.check avoids acting on missing fields while bibinfo.warn will
  665. % issue a warning message if a missing field is detected. Prior to calling
  666. % the bibinfo functions, the user should push the field value and then its
  667. % name string, in that order.
  668. FUNCTION {bibinfo.check}
  669. { swap$ duplicate$ missing$
  670. { pop$ pop$ "" }
  671. { duplicate$ empty$
  672. { swap$ pop$ }
  673. { swap$ pop$ }
  674. if$
  675. }
  676. if$
  677. }
  678. FUNCTION {bibinfo.warn}
  679. { swap$ duplicate$ missing$
  680. { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
  681. { duplicate$ empty$
  682. { swap$ "empty " swap$ * " in " * cite$ * warning$ }
  683. { swap$ pop$ }
  684. if$
  685. }
  686. if$
  687. }
  688. % The IEEE separates large numbers with more than 4 digits into groups of
  689. % three. The IEEE uses a small space to separate these number groups.
  690. % Typical applications include patent and page numbers.
  691. % number of consecutive digits required to trigger the group separation.
  692. FUNCTION {large.number.trigger}{ #5 }
  693. % For numbers longer than the trigger, this is the blocksize of the groups.
  694. % The blocksize must be less than the trigger threshold, and 2 * blocksize
  695. % must be greater than the trigger threshold (can't do more than one
  696. % separation on the initial trigger).
  697. FUNCTION {large.number.blocksize}{ #3 }
  698. % What is actually inserted between the number groups.
  699. FUNCTION {large.number.separator}{ "\," }
  700. % So as to save on integer variables by reusing existing ones, numnames
  701. % holds the current number of consecutive digits read and nameptr holds
  702. % the number that will trigger an inserted space.
  703. FUNCTION {large.number.separate}
  704. { 't :=
  705. ""
  706. #0 'numnames :=
  707. large.number.trigger 'nameptr :=
  708. { t empty$ not }
  709. { t #-1 #1 substring$ is.num
  710. { numnames #1 + 'numnames := }
  711. { #0 'numnames :=
  712. large.number.trigger 'nameptr :=
  713. }
  714. if$
  715. t #-1 #1 substring$ swap$ *
  716. t #-2 global.max$ substring$ 't :=
  717. numnames nameptr =
  718. { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
  719. nameptr large.number.blocksize - #1 + global.max$ substring$
  720. large.number.separator swap$ * *
  721. nameptr large.number.blocksize - 'numnames :=
  722. large.number.blocksize #1 + 'nameptr :=
  723. }
  724. { skip$ }
  725. if$
  726. }
  727. while$
  728. }
  729. % Converts all single dashes "-" to double dashes "--".
  730. FUNCTION {n.dashify}
  731. { large.number.separate
  732. 't :=
  733. ""
  734. { t empty$ not }
  735. { t #1 #1 substring$ "-" =
  736. { t #1 #2 substring$ "--" = not
  737. { "--" *
  738. t #2 global.max$ substring$ 't :=
  739. }
  740. { { t #1 #1 substring$ "-" = }
  741. { "-" *
  742. t #2 global.max$ substring$ 't :=
  743. }
  744. while$
  745. }
  746. if$
  747. }
  748. { t #1 #1 substring$ *
  749. t #2 global.max$ substring$ 't :=
  750. }
  751. if$
  752. }
  753. while$
  754. }
  755. % This function detects entries with names that are identical to that of
  756. % the previous entry and replaces the repeated names with dashes (if the
  757. % "is.dash.repeated.names" user control is nonzero).
  758. FUNCTION {name.or.dash}
  759. { 's :=
  760. oldname empty$
  761. { s 'oldname := s }
  762. { s oldname =
  763. { is.dash.repeated.names
  764. { repeated.name.dashes }
  765. { s 'oldname := s }
  766. if$
  767. }
  768. { s 'oldname := s }
  769. if$
  770. }
  771. if$
  772. }
  773. % Converts the number string on the top of the stack to
  774. % "numerical ordinal form" (e.g., "7" to "7th"). There is
  775. % no artificial limit to the upper bound of the numbers as the
  776. % two least significant digits determine the ordinal form.
  777. FUNCTION {num.to.ordinal}
  778. { duplicate$ #-2 #1 substring$ "1" =
  779. { bbl.th * }
  780. { duplicate$ #-1 #1 substring$ "1" =
  781. { bbl.st * }
  782. { duplicate$ #-1 #1 substring$ "2" =
  783. { bbl.nd * }
  784. { duplicate$ #-1 #1 substring$ "3" =
  785. { bbl.rd * }
  786. { bbl.th * }
  787. if$
  788. }
  789. if$
  790. }
  791. if$
  792. }
  793. if$
  794. }
  795. % If the string on the top of the stack begins with a number,
  796. % (e.g., 11th) then replace the string with the leading number
  797. % it contains. Otherwise retain the string as-is. s holds the
  798. % extracted number, t holds the part of the string that remains
  799. % to be scanned.
  800. FUNCTION {extract.num}
  801. { duplicate$ 't :=
  802. "" 's :=
  803. { t empty$ not }
  804. { t #1 #1 substring$
  805. t #2 global.max$ substring$ 't :=
  806. duplicate$ is.num
  807. { s swap$ * 's := }
  808. { pop$ "" 't := }
  809. if$
  810. }
  811. while$
  812. s empty$
  813. 'skip$
  814. { pop$ s }
  815. if$
  816. }
  817. % Converts the word number string on the top of the stack to
  818. % Arabic string form. Will be successful up to "tenth".
  819. FUNCTION {word.to.num}
  820. { duplicate$ "l" change.case$ 's :=
  821. s "first" =
  822. { pop$ "1" }
  823. { skip$ }
  824. if$
  825. s "second" =
  826. { pop$ "2" }
  827. { skip$ }
  828. if$
  829. s "third" =
  830. { pop$ "3" }
  831. { skip$ }
  832. if$
  833. s "fourth" =
  834. { pop$ "4" }
  835. { skip$ }
  836. if$
  837. s "fifth" =
  838. { pop$ "5" }
  839. { skip$ }
  840. if$
  841. s "sixth" =
  842. { pop$ "6" }
  843. { skip$ }
  844. if$
  845. s "seventh" =
  846. { pop$ "7" }
  847. { skip$ }
  848. if$
  849. s "eighth" =
  850. { pop$ "8" }
  851. { skip$ }
  852. if$
  853. s "ninth" =
  854. { pop$ "9" }
  855. { skip$ }
  856. if$
  857. s "tenth" =
  858. { pop$ "10" }
  859. { skip$ }
  860. if$
  861. }
  862. % Converts the string on the top of the stack to numerical
  863. % ordinal (e.g., "11th") form.
  864. FUNCTION {convert.edition}
  865. { duplicate$ empty$ 'skip$
  866. { duplicate$ #1 #1 substring$ is.num
  867. { extract.num
  868. num.to.ordinal
  869. }
  870. { word.to.num
  871. duplicate$ #1 #1 substring$ is.num
  872. { num.to.ordinal }
  873. { "edition ordinal word " quote$ * edition * quote$ *
  874. " may be too high (or improper) for conversion" * " in " * cite$ * warning$
  875. }
  876. if$
  877. }
  878. if$
  879. }
  880. if$
  881. }
  882. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  883. %% LATEX BIBLIOGRAPHY CODE %%
  884. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  885. FUNCTION {start.entry}
  886. { newline$
  887. "\bibitem{" write$
  888. cite$ write$
  889. "}" write$
  890. newline$
  891. ""
  892. initialize.prev.this.status
  893. }
  894. % Here we write out all the LaTeX code that we will need. The most involved
  895. % code sequences are those that control the alternate interword spacing and
  896. % foreign language hyphenation patterns. The heavy use of \providecommand
  897. % gives users a way to override the defaults. Special thanks to Javier Bezos,
  898. % Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
  899. % the other gurus on comp.text.tex for their help and advice on the topic of
  900. % \selectlanguage, Babel and BibTeX.
  901. FUNCTION {begin.bib}
  902. { "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
  903. write$ newline$
  904. preamble$ empty$ 'skip$
  905. { preamble$ write$ newline$ }
  906. if$
  907. "\begin{thebibliography}{" longest.label * "}" *
  908. write$ newline$
  909. "\providecommand{\url}[1]{#1}"
  910. write$ newline$
  911. "\csname url@samestyle\endcsname"
  912. write$ newline$
  913. "\providecommand{\newblock}{\relax}"
  914. write$ newline$
  915. "\providecommand{\bibinfo}[2]{#2}"
  916. write$ newline$
  917. "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
  918. write$ newline$
  919. "\providecommand{\BIBentryALTinterwordstretchfactor}{"
  920. ALTinterwordstretchfactor * "}" *
  921. write$ newline$
  922. "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
  923. write$ newline$
  924. "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
  925. write$ newline$
  926. "\providecommand{\BIBforeignlanguage}[2]{{%"
  927. write$ newline$
  928. "\expandafter\ifx\csname l@#1\endcsname\relax"
  929. write$ newline$
  930. "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%"
  931. write$ newline$
  932. "\typeout{** loaded for the language `#1'. Using the pattern for}%"
  933. write$ newline$
  934. "\typeout{** the default language instead.}%"
  935. write$ newline$
  936. "\else"
  937. write$ newline$
  938. "\language=\csname l@#1\endcsname"
  939. write$ newline$
  940. "\fi"
  941. write$ newline$
  942. "#2}}"
  943. write$ newline$
  944. "\providecommand{\BIBdecl}{\relax}"
  945. write$ newline$
  946. "\BIBdecl"
  947. write$ newline$
  948. }
  949. FUNCTION {end.bib}
  950. { newline$ "\end{thebibliography}" write$ newline$ }
  951. FUNCTION {if.url.alt.interword.spacing}
  952. { is.use.alt.interword.spacing
  953. { is.use.url
  954. { url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$ }
  955. { skip$ }
  956. if$
  957. }
  958. { skip$ }
  959. if$
  960. }
  961. FUNCTION {if.url.std.interword.spacing}
  962. { is.use.alt.interword.spacing
  963. { is.use.url
  964. { url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$ }
  965. { skip$ }
  966. if$
  967. }
  968. { skip$ }
  969. if$
  970. }
  971. %%%%%%%%%%%%%%%%%%%%%%%%
  972. %% LONGEST LABEL PASS %%
  973. %%%%%%%%%%%%%%%%%%%%%%%%
  974. FUNCTION {initialize.longest.label}
  975. { "" 'longest.label :=
  976. #1 'number.label :=
  977. #0 'longest.label.width :=
  978. }
  979. FUNCTION {longest.label.pass}
  980. { type$ "ieeetranbstctl" =
  981. { skip$ }
  982. { number.label int.to.str$ 'label :=
  983. number.label #1 + 'number.label :=
  984. label width$ longest.label.width >
  985. { label 'longest.label :=
  986. label width$ 'longest.label.width :=
  987. }
  988. { skip$ }
  989. if$
  990. }
  991. if$
  992. }
  993. %%%%%%%%%%%%%%%%%%%%%
  994. %% FORMAT HANDLERS %%
  995. %%%%%%%%%%%%%%%%%%%%%
  996. %% Lower Level Formats (used by higher level formats)
  997. FUNCTION {format.address.org.or.pub.date}
  998. { 't :=
  999. ""
  1000. year empty$
  1001. { "empty year in " cite$ * warning$ }
  1002. { skip$ }
  1003. if$
  1004. address empty$ t empty$ and
  1005. year empty$ and month empty$ and
  1006. { skip$ }
  1007. { this.to.prev.status
  1008. this.status.std
  1009. cap.status.std
  1010. address "address" bibinfo.check *
  1011. t empty$
  1012. { skip$ }
  1013. { punct.period 'prev.status.punct :=
  1014. space.large 'prev.status.space :=
  1015. address empty$
  1016. { skip$ }
  1017. { ": " * }
  1018. if$
  1019. t *
  1020. }
  1021. if$
  1022. year empty$ month empty$ and
  1023. { skip$ }
  1024. { t empty$ address empty$ and
  1025. { skip$ }
  1026. { ", " * }
  1027. if$
  1028. month empty$
  1029. { year empty$
  1030. { skip$ }
  1031. { year "year" bibinfo.check * }
  1032. if$
  1033. }
  1034. { month "month" bibinfo.check *
  1035. year empty$
  1036. { skip$ }
  1037. { " " * year "year" bibinfo.check * }
  1038. if$
  1039. }
  1040. if$
  1041. }
  1042. if$
  1043. }
  1044. if$
  1045. }
  1046. FUNCTION {format.names}
  1047. { 'bibinfo :=
  1048. duplicate$ empty$ 'skip$ {
  1049. this.to.prev.status
  1050. this.status.std
  1051. 's :=
  1052. "" 't :=
  1053. #1 'nameptr :=
  1054. s num.names$ 'numnames :=
  1055. numnames 'namesleft :=
  1056. { namesleft #0 > }
  1057. { s nameptr
  1058. name.format.string
  1059. format.name$
  1060. bibinfo bibinfo.check
  1061. 't :=
  1062. nameptr #1 >
  1063. { nameptr num.names.shown.with.forced.et.al #1 + =
  1064. numnames max.num.names.before.forced.et.al >
  1065. is.forced.et.al and and
  1066. { "others" 't :=
  1067. #1 'namesleft :=
  1068. }
  1069. { skip$ }
  1070. if$
  1071. namesleft #1 >
  1072. { ", " * t do.name.latex.cmd * }
  1073. { s nameptr "{ll}" format.name$ duplicate$ "others" =
  1074. { 't := }
  1075. { pop$ }
  1076. if$
  1077. t "others" =
  1078. { " " * bbl.etal emphasize * }
  1079. { numnames #2 >
  1080. { "," * }
  1081. { skip$ }
  1082. if$
  1083. bbl.and
  1084. space.word * t do.name.latex.cmd *
  1085. }
  1086. if$
  1087. }
  1088. if$
  1089. }
  1090. { t do.name.latex.cmd }
  1091. if$
  1092. nameptr #1 + 'nameptr :=
  1093. namesleft #1 - 'namesleft :=
  1094. }
  1095. while$
  1096. cap.status.std
  1097. } if$
  1098. }
  1099. %% Higher Level Formats
  1100. %% addresses/locations
  1101. FUNCTION {format.address}
  1102. { address duplicate$ empty$ 'skip$
  1103. { this.to.prev.status
  1104. this.status.std
  1105. cap.status.std
  1106. }
  1107. if$
  1108. }
  1109. %% author/editor names
  1110. FUNCTION {format.authors}{ author "author" format.names }
  1111. FUNCTION {format.editors}
  1112. { editor "editor" format.names duplicate$ empty$ 'skip$
  1113. { ", " *
  1114. get.bbl.editor
  1115. capitalize
  1116. *
  1117. }
  1118. if$
  1119. }
  1120. %% date
  1121. FUNCTION {format.date}
  1122. {
  1123. month "month" bibinfo.check duplicate$ empty$
  1124. year "year" bibinfo.check duplicate$ empty$
  1125. { swap$ 'skip$
  1126. { this.to.prev.status
  1127. this.status.std
  1128. cap.status.std
  1129. "there's a month but no year in " cite$ * warning$ }
  1130. if$
  1131. *
  1132. }
  1133. { this.to.prev.status
  1134. this.status.std
  1135. cap.status.std
  1136. swap$ 'skip$
  1137. {
  1138. swap$
  1139. " " * swap$
  1140. }
  1141. if$
  1142. *
  1143. }
  1144. if$
  1145. }
  1146. FUNCTION {format.date.electronic}
  1147. { month "month" bibinfo.check duplicate$ empty$
  1148. year "year" bibinfo.check duplicate$ empty$
  1149. { swap$
  1150. { pop$ }
  1151. { "there's a month but no year in " cite$ * warning$
  1152. pop$ ")" * "(" swap$ *
  1153. this.to.prev.status
  1154. punct.no 'this.status.punct :=
  1155. space.normal 'this.status.space :=
  1156. quote.no 'this.status.quote :=
  1157. cap.yes 'status.cap :=
  1158. }
  1159. if$
  1160. }
  1161. { swap$
  1162. { swap$ pop$ ")" * "(" swap$ * }
  1163. { "(" swap$ * ", " * swap$ * ")" * }
  1164. if$
  1165. this.to.prev.status
  1166. punct.no 'this.status.punct :=
  1167. space.normal 'this.status.space :=
  1168. quote.no 'this.status.quote :=
  1169. cap.yes 'status.cap :=
  1170. }
  1171. if$
  1172. }
  1173. %% edition/title
  1174. % Note: The IEEE considers the edition to be closely associated with
  1175. % the title of a book. So, in IEEEtran.bst the edition is normally handled
  1176. % within the formatting of the title. The format.edition function is
  1177. % retained here for possible future use.
  1178. FUNCTION {format.edition}
  1179. { edition duplicate$ empty$ 'skip$
  1180. { this.to.prev.status
  1181. this.status.std
  1182. convert.edition
  1183. status.cap
  1184. { "t" }
  1185. { "l" }
  1186. if$ change.case$
  1187. "edition" bibinfo.check
  1188. "~" * bbl.edition *
  1189. cap.status.std
  1190. }
  1191. if$
  1192. }
  1193. % This is used to format the booktitle of a conference proceedings.
  1194. % Here we use the "intype" field to provide the user a way to
  1195. % override the word "in" (e.g., with things like "presented at")
  1196. % Use of intype stops the emphasis of the booktitle to indicate that
  1197. % we no longer mean the written conference proceedings, but the
  1198. % conference itself.
  1199. FUNCTION {format.in.booktitle}
  1200. { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
  1201. { this.to.prev.status
  1202. this.status.std
  1203. select.language
  1204. intype missing$
  1205. { emphasize
  1206. bbl.in " " *
  1207. }
  1208. { intype " " * }
  1209. if$
  1210. swap$ *
  1211. cap.status.std
  1212. }
  1213. if$
  1214. }
  1215. % This is used to format the booktitle of collection.
  1216. % Here the "intype" field is not supported, but "edition" is.
  1217. FUNCTION {format.in.booktitle.edition}
  1218. { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
  1219. { this.to.prev.status
  1220. this.status.std
  1221. select.language
  1222. emphasize
  1223. edition empty$ 'skip$
  1224. { ", " *
  1225. edition
  1226. convert.edition
  1227. "l" change.case$
  1228. * "~" * bbl.edition *
  1229. }
  1230. if$
  1231. bbl.in " " * swap$ *
  1232. cap.status.std
  1233. }
  1234. if$
  1235. }
  1236. FUNCTION {format.article.title}
  1237. { title duplicate$ empty$ 'skip$
  1238. { this.to.prev.status
  1239. this.status.std
  1240. "t" change.case$
  1241. }
  1242. if$
  1243. "title" bibinfo.check
  1244. duplicate$ empty$ 'skip$
  1245. { quote.close 'this.status.quote :=
  1246. is.last.char.not.punct
  1247. { punct.std 'this.status.punct := }
  1248. { punct.no 'this.status.punct := }
  1249. if$
  1250. select.language
  1251. "``" swap$ *
  1252. cap.status.std
  1253. }
  1254. if$
  1255. }
  1256. FUNCTION {format.article.title.electronic}
  1257. { title duplicate$ empty$ 'skip$
  1258. { this.to.prev.status
  1259. this.status.std
  1260. cap.status.std
  1261. "t" change.case$
  1262. }
  1263. if$
  1264. "title" bibinfo.check
  1265. duplicate$ empty$
  1266. { skip$ }
  1267. { select.language }
  1268. if$
  1269. }
  1270. FUNCTION {format.book.title.edition}
  1271. { title "title" bibinfo.check
  1272. duplicate$ empty$
  1273. { "empty title in " cite$ * warning$ }
  1274. { this.to.prev.status
  1275. this.status.std
  1276. select.language
  1277. emphasize
  1278. edition empty$ 'skip$
  1279. { ", " *
  1280. edition
  1281. convert.edition
  1282. status.cap
  1283. { "t" }
  1284. { "l" }
  1285. if$
  1286. change.case$
  1287. * "~" * bbl.edition *
  1288. }
  1289. if$
  1290. cap.status.std
  1291. }
  1292. if$
  1293. }
  1294. FUNCTION {format.book.title}
  1295. { title "title" bibinfo.check
  1296. duplicate$ empty$ 'skip$
  1297. { this.to.prev.status
  1298. this.status.std
  1299. cap.status.std
  1300. select.language
  1301. emphasize
  1302. }
  1303. if$
  1304. }
  1305. %% journal
  1306. FUNCTION {format.journal}
  1307. { journal duplicate$ empty$ 'skip$
  1308. { this.to.prev.status
  1309. this.status.std
  1310. cap.status.std
  1311. select.language
  1312. emphasize
  1313. }
  1314. if$
  1315. }
  1316. %% how published
  1317. FUNCTION {format.howpublished}
  1318. { howpublished duplicate$ empty$ 'skip$
  1319. { this.to.prev.status
  1320. this.status.std
  1321. cap.status.std
  1322. }
  1323. if$
  1324. }
  1325. %% institutions/organization/publishers/school
  1326. FUNCTION {format.institution}
  1327. { institution duplicate$ empty$ 'skip$
  1328. { this.to.prev.status
  1329. this.status.std
  1330. cap.status.std
  1331. }
  1332. if$
  1333. }
  1334. FUNCTION {format.organization}
  1335. { organization duplicate$ empty$ 'skip$
  1336. { this.to.prev.status
  1337. this.status.std
  1338. cap.status.std
  1339. }
  1340. if$
  1341. }
  1342. FUNCTION {format.address.publisher.date}
  1343. { publisher "publisher" bibinfo.warn format.address.org.or.pub.date }
  1344. FUNCTION {format.address.publisher.date.nowarn}
  1345. { publisher "publisher" bibinfo.check format.address.org.or.pub.date }
  1346. FUNCTION {format.address.organization.date}
  1347. { organization "organization" bibinfo.check format.address.org.or.pub.date }
  1348. FUNCTION {format.school}
  1349. { school duplicate$ empty$ 'skip$
  1350. { this.to.prev.status
  1351. this.status.std
  1352. cap.status.std
  1353. }
  1354. if$
  1355. }
  1356. %% volume/number/series/chapter/pages
  1357. FUNCTION {format.volume}
  1358. { volume empty.field.to.null.string
  1359. duplicate$ empty$ 'skip$
  1360. { this.to.prev.status
  1361. this.status.std
  1362. bbl.volume
  1363. status.cap
  1364. { capitalize }
  1365. { skip$ }
  1366. if$
  1367. swap$ tie.or.space.prefix
  1368. "volume" bibinfo.check
  1369. * *
  1370. cap.status.std
  1371. }
  1372. if$
  1373. }
  1374. FUNCTION {format.number}
  1375. { number empty.field.to.null.string
  1376. duplicate$ empty$ 'skip$
  1377. { this.to.prev.status
  1378. this.status.std
  1379. status.cap
  1380. { bbl.number capitalize }
  1381. { bbl.number }
  1382. if$
  1383. swap$ tie.or.space.prefix
  1384. "number" bibinfo.check
  1385. * *
  1386. cap.status.std
  1387. }
  1388. if$
  1389. }
  1390. FUNCTION {format.number.if.use.for.article}
  1391. { is.use.number.for.article
  1392. { format.number }
  1393. { "" }
  1394. if$
  1395. }
  1396. % The IEEE does not seem to tie the series so closely with the volume
  1397. % and number as is done in other bibliography styles. Instead the
  1398. % series is treated somewhat like an extension of the title.
  1399. FUNCTION {format.series}
  1400. { series empty$
  1401. { "" }
  1402. { this.to.prev.status
  1403. this.status.std
  1404. bbl.series " " *
  1405. series "series" bibinfo.check *
  1406. cap.status.std
  1407. }
  1408. if$
  1409. }
  1410. FUNCTION {format.chapter}
  1411. { chapter empty$
  1412. { "" }
  1413. { this.to.prev.status
  1414. this.status.std
  1415. type empty$
  1416. { bbl.chapter }
  1417. { type "l" change.case$
  1418. "type" bibinfo.check
  1419. }
  1420. if$
  1421. chapter tie.or.space.prefix
  1422. "chapter" bibinfo.check
  1423. * *
  1424. cap.status.std
  1425. }
  1426. if$
  1427. }
  1428. % The intended use of format.paper is for paper numbers of inproceedings.
  1429. % The paper type can be overridden via the type field.
  1430. % We allow the type to be displayed even if the paper number is absent
  1431. % for things like "postdeadline paper"
  1432. FUNCTION {format.paper}
  1433. { is.use.paper
  1434. { paper empty$
  1435. { type empty$
  1436. { "" }
  1437. { this.to.prev.status
  1438. this.status.std
  1439. type "type" bibinfo.check
  1440. cap.status.std
  1441. }
  1442. if$
  1443. }
  1444. { this.to.prev.status
  1445. this.status.std
  1446. type empty$
  1447. { bbl.paper }
  1448. { type "type" bibinfo.check }
  1449. if$
  1450. " " * paper
  1451. "paper" bibinfo.check
  1452. *
  1453. cap.status.std
  1454. }
  1455. if$
  1456. }
  1457. { "" }
  1458. if$
  1459. }
  1460. FUNCTION {format.pages}
  1461. { pages duplicate$ empty$ 'skip$
  1462. { this.to.prev.status
  1463. this.status.std
  1464. duplicate$ is.multiple.pages
  1465. {
  1466. bbl.pages swap$
  1467. n.dashify
  1468. }
  1469. {
  1470. bbl.page swap$
  1471. }
  1472. if$
  1473. tie.or.space.prefix
  1474. "pages" bibinfo.check
  1475. * *
  1476. cap.status.std
  1477. }
  1478. if$
  1479. }
  1480. %% technical report number
  1481. FUNCTION {format.tech.report.number}
  1482. { number "number" bibinfo.check
  1483. this.to.prev.status
  1484. this.status.std
  1485. cap.status.std
  1486. type duplicate$ empty$
  1487. { pop$
  1488. bbl.techrep
  1489. }
  1490. { skip$ }
  1491. if$
  1492. "type" bibinfo.check
  1493. swap$ duplicate$ empty$
  1494. { pop$ }
  1495. { tie.or.space.prefix * * }
  1496. if$
  1497. }
  1498. %% note
  1499. FUNCTION {format.note}
  1500. { note empty$
  1501. { "" }
  1502. { this.to.prev.status
  1503. this.status.std
  1504. punct.period 'this.status.punct :=
  1505. note #1 #1 substring$
  1506. duplicate$ "{" =
  1507. { skip$ }
  1508. { status.cap
  1509. { "u" }
  1510. { "l" }
  1511. if$
  1512. change.case$
  1513. }
  1514. if$
  1515. note #2 global.max$ substring$ * "note" bibinfo.check
  1516. cap.yes 'status.cap :=
  1517. }
  1518. if$
  1519. }
  1520. %% patent
  1521. FUNCTION {format.patent.date}
  1522. { this.to.prev.status
  1523. this.status.std
  1524. year empty$
  1525. { monthfiled duplicate$ empty$
  1526. { "monthfiled" bibinfo.check pop$ "" }
  1527. { "monthfiled" bibinfo.check }
  1528. if$
  1529. dayfiled duplicate$ empty$
  1530. { "dayfiled" bibinfo.check pop$ "" * }
  1531. { "dayfiled" bibinfo.check
  1532. monthfiled empty$
  1533. { "dayfiled without a monthfiled in " cite$ * warning$
  1534. *
  1535. }
  1536. { " " swap$ * * }
  1537. if$
  1538. }
  1539. if$
  1540. yearfiled empty$
  1541. { "no year or yearfiled in " cite$ * warning$ }
  1542. { yearfiled "yearfiled" bibinfo.check
  1543. swap$
  1544. duplicate$ empty$
  1545. { pop$ }
  1546. { ", " * swap$ * }
  1547. if$
  1548. }
  1549. if$
  1550. }
  1551. { month duplicate$ empty$
  1552. { "month" bibinfo.check pop$ "" }
  1553. { "month" bibinfo.check }
  1554. if$
  1555. day duplicate$ empty$
  1556. { "day" bibinfo.check pop$ "" * }
  1557. { "day" bibinfo.check
  1558. month empty$
  1559. { "day without a month in " cite$ * warning$
  1560. *
  1561. }
  1562. { " " swap$ * * }
  1563. if$
  1564. }
  1565. if$
  1566. year "year" bibinfo.check
  1567. swap$
  1568. duplicate$ empty$
  1569. { pop$ }
  1570. { ", " * swap$ * }
  1571. if$
  1572. }
  1573. if$
  1574. cap.status.std
  1575. }
  1576. FUNCTION {format.patent.nationality.type.number}
  1577. { this.to.prev.status
  1578. this.status.std
  1579. nationality duplicate$ empty$
  1580. { "nationality" bibinfo.warn pop$ "" }
  1581. { "nationality" bibinfo.check
  1582. duplicate$ "l" change.case$ "united states" =
  1583. { pop$ bbl.patentUS }
  1584. { skip$ }
  1585. if$
  1586. " " *
  1587. }
  1588. if$
  1589. type empty$
  1590. { bbl.patent "type" bibinfo.check }
  1591. { type "type" bibinfo.check }
  1592. if$
  1593. *
  1594. number duplicate$ empty$
  1595. { "number" bibinfo.warn pop$ }
  1596. { "number" bibinfo.check
  1597. large.number.separate
  1598. swap$ " " * swap$ *
  1599. }
  1600. if$
  1601. cap.status.std
  1602. }
  1603. %% standard
  1604. FUNCTION {format.organization.institution.standard.type.number}
  1605. { this.to.prev.status
  1606. this.status.std
  1607. organization duplicate$ empty$
  1608. { pop$
  1609. institution duplicate$ empty$
  1610. { "institution" bibinfo.warn }
  1611. { "institution" bibinfo.warn " " * }
  1612. if$
  1613. }
  1614. { "organization" bibinfo.warn " " * }
  1615. if$
  1616. type empty$
  1617. { bbl.standard "type" bibinfo.check }
  1618. { type "type" bibinfo.check }
  1619. if$
  1620. *
  1621. number duplicate$ empty$
  1622. { "number" bibinfo.check pop$ }
  1623. { "number" bibinfo.check
  1624. large.number.separate
  1625. swap$ " " * swap$ *
  1626. }
  1627. if$
  1628. cap.status.std
  1629. }
  1630. FUNCTION {format.revision}
  1631. { revision empty$
  1632. { "" }
  1633. { this.to.prev.status
  1634. this.status.std
  1635. bbl.revision
  1636. revision tie.or.space.prefix
  1637. "revision" bibinfo.check
  1638. * *
  1639. cap.status.std
  1640. }
  1641. if$
  1642. }
  1643. %% thesis
  1644. FUNCTION {format.master.thesis.type}
  1645. { this.to.prev.status
  1646. this.status.std
  1647. type empty$
  1648. {
  1649. bbl.mthesis
  1650. }
  1651. {
  1652. type "type" bibinfo.check
  1653. }
  1654. if$
  1655. cap.status.std
  1656. }
  1657. FUNCTION {format.phd.thesis.type}
  1658. { this.to.prev.status
  1659. this.status.std
  1660. type empty$
  1661. {
  1662. bbl.phdthesis
  1663. }
  1664. {
  1665. type "type" bibinfo.check
  1666. }
  1667. if$
  1668. cap.status.std
  1669. }
  1670. %% URL
  1671. FUNCTION {format.url}
  1672. { is.use.url
  1673. { url empty$
  1674. { "" }
  1675. { this.to.prev.status
  1676. this.status.std
  1677. cap.yes 'status.cap :=
  1678. name.url.prefix " " *
  1679. "\url{" * url * "}" *
  1680. punct.no 'this.status.punct :=
  1681. punct.period 'prev.status.punct :=
  1682. space.normal 'this.status.space :=
  1683. space.normal 'prev.status.space :=
  1684. quote.no 'this.status.quote :=
  1685. }
  1686. if$
  1687. }
  1688. { "" }
  1689. if$
  1690. }
  1691. %%%%%%%%%%%%%%%%%%%%
  1692. %% ENTRY HANDLERS %%
  1693. %%%%%%%%%%%%%%%%%%%%
  1694. % Note: In many journals, the IEEE (or the authors) tend not to show the number
  1695. % for articles, so the display of the number is controlled here by the
  1696. % switch "is.use.number.for.article"
  1697. FUNCTION {article}
  1698. { std.status.using.comma
  1699. start.entry
  1700. if.url.alt.interword.spacing
  1701. format.authors "author" output.warn
  1702. name.or.dash
  1703. format.article.title "title" output.warn
  1704. format.journal "journal" bibinfo.check "journal" output.warn
  1705. format.volume output
  1706. format.number.if.use.for.article output
  1707. format.pages output
  1708. format.date "year" output.warn
  1709. format.note output
  1710. format.url output
  1711. fin.entry
  1712. if.url.std.interword.spacing
  1713. }
  1714. FUNCTION {book}
  1715. { std.status.using.comma
  1716. start.entry
  1717. if.url.alt.interword.spacing
  1718. author empty$
  1719. { format.editors "author and editor" output.warn }
  1720. { format.authors output.nonnull }
  1721. if$
  1722. name.or.dash
  1723. format.book.title.edition output
  1724. format.series output
  1725. author empty$
  1726. { skip$ }
  1727. { format.editors output }
  1728. if$
  1729. format.address.publisher.date output
  1730. format.volume output
  1731. format.number output
  1732. format.note output
  1733. format.url output
  1734. fin.entry
  1735. if.url.std.interword.spacing
  1736. }
  1737. FUNCTION {booklet}
  1738. { std.status.using.comma
  1739. start.entry
  1740. if.url.alt.interword.spacing
  1741. format.authors output
  1742. name.or.dash
  1743. format.article.title "title" output.warn
  1744. format.howpublished "howpublished" bibinfo.check output
  1745. format.organization "organization" bibinfo.check output
  1746. format.address "address" bibinfo.check output
  1747. format.date output
  1748. format.note output
  1749. format.url output
  1750. fin.entry
  1751. if.url.std.interword.spacing
  1752. }
  1753. FUNCTION {electronic}
  1754. { std.status.using.period
  1755. start.entry
  1756. if.url.alt.interword.spacing
  1757. format.authors output
  1758. name.or.dash
  1759. format.date.electronic output
  1760. format.article.title.electronic output
  1761. format.howpublished "howpublished" bibinfo.check output
  1762. format.organization "organization" bibinfo.check output
  1763. format.address "address" bibinfo.check output
  1764. format.note output
  1765. format.url output
  1766. fin.entry
  1767. empty.entry.warn
  1768. if.url.std.interword.spacing
  1769. }
  1770. FUNCTION {inbook}
  1771. { std.status.using.comma
  1772. start.entry
  1773. if.url.alt.interword.spacing
  1774. author empty$
  1775. { format.editors "author and editor" output.warn }
  1776. { format.authors output.nonnull }
  1777. if$
  1778. name.or.dash
  1779. format.book.title.edition output
  1780. format.series output
  1781. format.address.publisher.date output
  1782. format.volume output
  1783. format.number output
  1784. format.chapter output
  1785. format.pages output
  1786. format.note output
  1787. format.url output
  1788. fin.entry
  1789. if.url.std.interword.spacing
  1790. }
  1791. FUNCTION {incollection}
  1792. { std.status.using.comma
  1793. start.entry
  1794. if.url.alt.interword.spacing
  1795. format.authors "author" output.warn
  1796. name.or.dash
  1797. format.article.title "title" output.warn
  1798. format.in.booktitle.edition "booktitle" output.warn
  1799. format.series output
  1800. format.editors output
  1801. format.address.publisher.date.nowarn output
  1802. format.volume output
  1803. format.number output
  1804. format.chapter output
  1805. format.pages output
  1806. format.note output
  1807. format.url output
  1808. fin.entry
  1809. if.url.std.interword.spacing
  1810. }
  1811. FUNCTION {inproceedings}
  1812. { std.status.using.comma
  1813. start.entry
  1814. if.url.alt.interword.spacing
  1815. format.authors "author" output.warn
  1816. name.or.dash
  1817. format.article.title "title" output.warn
  1818. format.in.booktitle "booktitle" output.warn
  1819. format.series output
  1820. format.editors output
  1821. format.volume output
  1822. format.number output
  1823. publisher empty$
  1824. { format.address.organization.date output }
  1825. { format.organization "organization" bibinfo.check output
  1826. format.address.publisher.date output
  1827. }
  1828. if$
  1829. format.paper output
  1830. format.pages output
  1831. format.note output
  1832. format.url output
  1833. fin.entry
  1834. if.url.std.interword.spacing
  1835. }
  1836. FUNCTION {manual}
  1837. { std.status.using.comma
  1838. start.entry
  1839. if.url.alt.interword.spacing
  1840. format.authors output
  1841. name.or.dash
  1842. format.book.title.edition "title" output.warn
  1843. format.howpublished "howpublished" bibinfo.check output
  1844. format.organization "organization" bibinfo.check output
  1845. format.address "address" bibinfo.check output
  1846. format.date output
  1847. format.note output
  1848. format.url output
  1849. fin.entry
  1850. if.url.std.interword.spacing
  1851. }
  1852. FUNCTION {mastersthesis}
  1853. { std.status.using.comma
  1854. start.entry
  1855. if.url.alt.interword.spacing
  1856. format.authors "author" output.warn
  1857. name.or.dash
  1858. format.article.title "title" output.warn
  1859. format.master.thesis.type output.nonnull
  1860. format.school "school" bibinfo.warn output
  1861. format.address "address" bibinfo.check output
  1862. format.date "year" output.warn
  1863. format.note output
  1864. format.url output
  1865. fin.entry
  1866. if.url.std.interword.spacing
  1867. }
  1868. FUNCTION {misc}
  1869. { std.status.using.comma
  1870. start.entry
  1871. if.url.alt.interword.spacing
  1872. format.authors output
  1873. name.or.dash
  1874. format.article.title output
  1875. format.howpublished "howpublished" bibinfo.check output
  1876. format.organization "organization" bibinfo.check output
  1877. format.address "address" bibinfo.check output
  1878. format.pages output
  1879. format.date output
  1880. format.note output
  1881. format.url output
  1882. fin.entry
  1883. empty.entry.warn
  1884. if.url.std.interword.spacing
  1885. }
  1886. FUNCTION {patent}
  1887. { std.status.using.comma
  1888. start.entry
  1889. if.url.alt.interword.spacing
  1890. format.authors output
  1891. name.or.dash
  1892. format.article.title output
  1893. format.patent.nationality.type.number output
  1894. format.patent.date output
  1895. format.note output
  1896. format.url output
  1897. fin.entry
  1898. empty.entry.warn
  1899. if.url.std.interword.spacing
  1900. }
  1901. FUNCTION {periodical}
  1902. { std.status.using.comma
  1903. start.entry
  1904. if.url.alt.interword.spacing
  1905. format.editors output
  1906. name.or.dash
  1907. format.book.title "title" output.warn
  1908. format.series output
  1909. format.volume output
  1910. format.number output
  1911. format.organization "organization" bibinfo.check output
  1912. format.date "year" output.warn
  1913. format.note output
  1914. format.url output
  1915. fin.entry
  1916. if.url.std.interword.spacing
  1917. }
  1918. FUNCTION {phdthesis}
  1919. { std.status.using.comma
  1920. start.entry
  1921. if.url.alt.interword.spacing
  1922. format.authors "author" output.warn
  1923. name.or.dash
  1924. format.article.title "title" output.warn
  1925. format.phd.thesis.type output.nonnull
  1926. format.school "school" bibinfo.warn output
  1927. format.address "address" bibinfo.check output
  1928. format.date "year" output.warn
  1929. format.note output
  1930. format.url output
  1931. fin.entry
  1932. if.url.std.interword.spacing
  1933. }
  1934. FUNCTION {proceedings}
  1935. { std.status.using.comma
  1936. start.entry
  1937. if.url.alt.interword.spacing
  1938. format.editors output
  1939. name.or.dash
  1940. format.book.title "title" output.warn
  1941. format.series output
  1942. format.volume output
  1943. format.number output
  1944. publisher empty$
  1945. { format.address.organization.date output }
  1946. { format.organization "organization" bibinfo.check output
  1947. format.address.publisher.date output
  1948. }
  1949. if$
  1950. format.note output
  1951. format.url output
  1952. fin.entry
  1953. if.url.std.interword.spacing
  1954. }
  1955. FUNCTION {standard}
  1956. { std.status.using.comma
  1957. start.entry
  1958. if.url.alt.interword.spacing
  1959. format.authors output
  1960. name.or.dash
  1961. format.book.title "title" output.warn
  1962. format.howpublished "howpublished" bibinfo.check output
  1963. format.organization.institution.standard.type.number output
  1964. format.revision output
  1965. format.date output
  1966. format.note output
  1967. format.url output
  1968. fin.entry
  1969. if.url.std.interword.spacing
  1970. }
  1971. FUNCTION {techreport}
  1972. { std.status.using.comma
  1973. start.entry
  1974. if.url.alt.interword.spacing
  1975. format.authors "author" output.warn
  1976. name.or.dash
  1977. format.article.title "title" output.warn
  1978. format.howpublished "howpublished" bibinfo.check output
  1979. format.institution "institution" bibinfo.warn output
  1980. format.address "address" bibinfo.check output
  1981. format.tech.report.number output.nonnull
  1982. format.date "year" output.warn
  1983. format.note output
  1984. format.url output
  1985. fin.entry
  1986. if.url.std.interword.spacing
  1987. }
  1988. FUNCTION {unpublished}
  1989. { std.status.using.comma
  1990. start.entry
  1991. if.url.alt.interword.spacing
  1992. format.authors "author" output.warn
  1993. name.or.dash
  1994. format.article.title "title" output.warn
  1995. format.date output
  1996. format.note "note" output.warn
  1997. format.url output
  1998. fin.entry
  1999. if.url.std.interword.spacing
  2000. }
  2001. % The special entry type which provides the user interface to the
  2002. % BST controls
  2003. FUNCTION {IEEEtranBSTCTL}
  2004. { is.print.banners.to.terminal
  2005. { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
  2006. top$
  2007. }
  2008. { skip$ }
  2009. if$
  2010. CTLuse_article_number
  2011. empty$
  2012. { skip$ }
  2013. { CTLuse_article_number
  2014. yes.no.to.int
  2015. 'is.use.number.for.article :=
  2016. }
  2017. if$
  2018. CTLuse_paper
  2019. empty$
  2020. { skip$ }
  2021. { CTLuse_paper
  2022. yes.no.to.int
  2023. 'is.use.paper :=
  2024. }
  2025. if$
  2026. CTLuse_url
  2027. empty$
  2028. { skip$ }
  2029. { CTLuse_url
  2030. yes.no.to.int
  2031. 'is.use.url :=
  2032. }
  2033. if$
  2034. CTLuse_forced_etal
  2035. empty$
  2036. { skip$ }
  2037. { CTLuse_forced_etal
  2038. yes.no.to.int
  2039. 'is.forced.et.al :=
  2040. }
  2041. if$
  2042. CTLmax_names_forced_etal
  2043. empty$
  2044. { skip$ }
  2045. { CTLmax_names_forced_etal
  2046. string.to.integer
  2047. 'max.num.names.before.forced.et.al :=
  2048. }
  2049. if$
  2050. CTLnames_show_etal
  2051. empty$
  2052. { skip$ }
  2053. { CTLnames_show_etal
  2054. string.to.integer
  2055. 'num.names.shown.with.forced.et.al :=
  2056. }
  2057. if$
  2058. CTLuse_alt_spacing
  2059. empty$
  2060. { skip$ }
  2061. { CTLuse_alt_spacing
  2062. yes.no.to.int
  2063. 'is.use.alt.interword.spacing :=
  2064. }
  2065. if$
  2066. CTLalt_stretch_factor
  2067. empty$
  2068. { skip$ }
  2069. { CTLalt_stretch_factor
  2070. 'ALTinterwordstretchfactor :=
  2071. "\renewcommand{\BIBentryALTinterwordstretchfactor}{"
  2072. ALTinterwordstretchfactor * "}" *
  2073. write$ newline$
  2074. }
  2075. if$
  2076. CTLdash_repeated_names
  2077. empty$
  2078. { skip$ }
  2079. { CTLdash_repeated_names
  2080. yes.no.to.int
  2081. 'is.dash.repeated.names :=
  2082. }
  2083. if$
  2084. CTLname_format_string
  2085. empty$
  2086. { skip$ }
  2087. { CTLname_format_string
  2088. 'name.format.string :=
  2089. }
  2090. if$
  2091. CTLname_latex_cmd
  2092. empty$
  2093. { skip$ }
  2094. { CTLname_latex_cmd
  2095. 'name.latex.cmd :=
  2096. }
  2097. if$
  2098. CTLname_url_prefix
  2099. missing$
  2100. { skip$ }
  2101. { CTLname_url_prefix
  2102. 'name.url.prefix :=
  2103. }
  2104. if$
  2105. num.names.shown.with.forced.et.al max.num.names.before.forced.et.al >
  2106. { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$
  2107. max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
  2108. }
  2109. { skip$ }
  2110. if$
  2111. }
  2112. %%%%%%%%%%%%%%%%%%%
  2113. %% ENTRY ALIASES %%
  2114. %%%%%%%%%%%%%%%%%%%
  2115. FUNCTION {conference}{inproceedings}
  2116. FUNCTION {online}{electronic}
  2117. FUNCTION {internet}{electronic}
  2118. FUNCTION {webpage}{electronic}
  2119. FUNCTION {www}{electronic}
  2120. FUNCTION {default.type}{misc}
  2121. %%%%%%%%%%%%%%%%%%
  2122. %% MAIN PROGRAM %%
  2123. %%%%%%%%%%%%%%%%%%
  2124. READ
  2125. EXECUTE {initialize.controls}
  2126. EXECUTE {initialize.status.constants}
  2127. EXECUTE {banner.message}
  2128. EXECUTE {initialize.longest.label}
  2129. ITERATE {longest.label.pass}
  2130. EXECUTE {begin.bib}
  2131. ITERATE {call.type$}
  2132. EXECUTE {end.bib}
  2133. EXECUTE{completed.message}
  2134. %% That's all folks, mds.