falkorlib 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2174c9bbc6ebc626b201624fb6b26bb76e1eaadd
4
- data.tar.gz: a129e47f1f9ec644481b772b10339477f79ee69a
3
+ metadata.gz: 3ad3f550a62d9dfd5586fd354d7dc138f1a2a664
4
+ data.tar.gz: 43e21b29da17d2eac2ec84a87c83f78ff9a1b5a5
5
5
  SHA512:
6
- metadata.gz: d42ce3ec359f2cda55cafdcd8b1b3c9e3b4cd9aa40207829bc67f72987c15e8406f4c9329a04668955d330d2ae3381c010dffac32996f3013cabfa27c3ab9ab8
7
- data.tar.gz: 2dd4f397718652a00fc5ae35505102d7fa6f8d3ac0139d31edef029f6403d2facd7cf9475282232cfd9f10105b0ad2b5dc6b3b6cfc3f596618b9ffea1d6b5b2e
6
+ metadata.gz: 562114553dbf8047462ac6211db83ee23bac0a13cce15fa6b044aca149d0b7ff908eece17b7d2351c55c9fe55bbc3534dff68e7efd7d20b0c601ae57c872a44b
7
+ data.tar.gz: 4a665f9359a2237b8a1e3571cdc8a29aa0ab59deb660bb969d16cf7158443bb12a4a7d12e3606628349cb9af5129498228bb46b3605efef5c775dc64160da917
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- falkorlib (0.7.3)
4
+ falkorlib (0.7.4)
5
5
  activesupport (~> 4.0)
6
6
  artii (>= 2.1)
7
7
  awesome_print (~> 1.2)
data/completion/_falkor CHANGED
@@ -1,7 +1,7 @@
1
1
  #compdef falkor
2
2
  ########################################################################################
3
3
  # -*- mode:sh; -*-
4
- # Time-stamp: <Mon 2017-01-16 12:24 svarrette>
4
+ # Time-stamp: <Mon 2017-01-16 23:21 svarrette>
5
5
  #
6
6
  # ZSH completion for [FalkorLib](https://github.com/Falkor/falkorlib)
7
7
  #
@@ -96,6 +96,7 @@ __falkor_new()
96
96
  local -a _falkor_new_cmds
97
97
  _falkor_new_cmds=(
98
98
  'repo:Bootstrap a Git Repository with my favorite git-flow layout'
99
+ 'article:Bootstrap a LaTeX Article'
99
100
  'letter:LaTeX-based letter'
100
101
  'slides:Bootstrap LaTeX Beamer slides'
101
102
  'trash:Add a Trash directory for your LaTeX project'
@@ -124,7 +125,15 @@ __falkor_new()
124
125
  _arguments \
125
126
  ":Falkor new commands:($(falkor new commands))" && ret=0
126
127
  ;;
127
- (letter)
128
+ (article)
129
+ _arguments -C \
130
+ '(-n --name)'{-n,--name}'[Name of the LaTeX project]' \
131
+ '(-d --dir)'{-d,--dir}':Project directory (relative to the git root directory):_directories' \
132
+ '--ieee[Use the IEEEtran style for IEEE conference]' \
133
+ '--llncs[Use the Springer LNCS style]' \
134
+ '--acm[Use the ACM style]' && ret=0
135
+ ;;
136
+ (letter)
128
137
  _arguments -C \
129
138
  '(-n --name)'{-n,--name}'[Name of the LaTeX project]' \
130
139
  '(-d --dir)'{-d,--dir}':Project directory (relative to the git root directory):_directories' && ret=0
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2017-01-16 12:07 svarrette>
3
+ # Time-stamp: <Mon 2017-01-16 23:25 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the main Bootstrapping operations
6
6
  #
@@ -379,7 +379,7 @@ module FalkorLib
379
379
  ##
380
380
  def select_licence(default_licence = FalkorLib::Config::Bootstrap::DEFAULTS[:metadata][:license],
381
381
  _options = {})
382
- list_license = FalkorLib::Bootstrap::DEFAULTS[:licenses].keys
382
+ list_license = FalkorLib::Config::Bootstrap::DEFAULTS[:licenses].keys
383
383
  idx = list_license.index(default_licence) unless default_licence.nil?
384
384
  select_from(list_license,
385
385
  'Select the license index for this project:',
@@ -401,9 +401,9 @@ module FalkorLib
401
401
  options = {
402
402
  :filename => 'LICENSE'
403
403
  })
404
- return if (license.empty? or license == :none or license =~ /^CC/)
404
+ return if ((license.empty?) or (license == 'none') or (license =~ /^CC/))
405
405
  return unless FalkorLib::Config::Bootstrap::DEFAULTS[:licenses].keys.include?( license )
406
- info "Generate the licence file"
406
+ info "Generate the #{license} licence file"
407
407
  path = normalized_path(dir)
408
408
  use_git = FalkorLib::Git.init?(path)
409
409
  rootdir = (use_git) ? FalkorLib::Git.rootdir(path) : path
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2017-01-16 11:52 svarrette>
3
+ # Time-stamp: <Mon 2017-01-16 14:16 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the main Bootstrapping operations
6
6
  #
@@ -128,7 +128,7 @@ module FalkorLib
128
128
  # === Licence ===
129
129
  if (local_config[:project] and local_config[:project][:license])
130
130
  author = local_config[:project][:author] ? local_config[:project][:author] : FalkorLib::Config::Bootstrap::DEFAULTS[:metadata][:author]
131
- FalkorLib::Bootstrap.licence(path, local_config[:project][:license], author, options)
131
+ FalkorLib::Bootstrap.license(path, local_config[:project][:license], author, options)
132
132
  end
133
133
  #
134
134
 
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Sun 2017-01-15 22:57 svarrette>
3
+ # Time-stamp: <Mon 2017-01-16 23:15 svarrette>
4
4
  ################################################################################
5
5
  # Interface for the main Bootstrapping operations
6
6
  #
@@ -23,19 +23,21 @@ module FalkorLib
23
23
 
24
24
  ###### latex ######
25
25
  # Bootstrap a LaTeX sub-project of type <type> within a given repository <dir>.
26
- # * :beamer LaTeX Beamer Slides
27
- # * :article LaTeX article
28
- # * :ieee LaTeX IEEE conference article
29
- # * :ieee_jnl LaTeX IEEE journal
30
- # * :acm LaTeX ACM conference article
31
- # * :letter LaTeX Letter
26
+ # * :beamer LaTeX Beamer Slides
27
+ # * :article LaTeX article
28
+ # * :letter LaTeX Letter
29
+ # * :bookchapter LaTeX Book chapter
32
30
  # Supported options:
33
31
  # * :force [boolean] force action
34
32
  # * :no_interaction [boolean]: do not interact
33
+ # * :ieee LaTeX IEEE conference article
34
+ # * :ieee_jnl LaTeX IEEE journal **NOT YET IMPLEMENTED**
35
+ # * :llncs LaTeX Springer LNCS conference article
36
+ # * :acm LaTeX ACM conference article
35
37
  ##
36
38
  def latex(dir = Dir.pwd, type = :beamer, options = {})
37
39
  ap options if options[:debug]
38
- error "Unsupported type" unless [ :beamer, :article, :ieee, :letter ].include?( type )
40
+ error "Unsupported type" unless [ :beamer, :article, :letter, :bookchapter ].include?( type )
39
41
  path = normalized_path(dir)
40
42
  config = FalkorLib::Config::Bootstrap::DEFAULTS[:latex].clone
41
43
  if type == :letter
@@ -54,12 +56,12 @@ module FalkorLib
54
56
  info "Initiate a LaTeX #{type} project from the Git root directory: '#{rootdir}'"
55
57
  really_continue? unless options[:no_interaction]
56
58
  relative_path_to_root = (Pathname.new( FalkorLib::Git.rootdir(dir) ).relative_path_from Pathname.new( File.realpath(path))).to_s
57
- config[:name] = (options[:name]) ? options[:name] : ask("\tEnter the name of the #{type} LaTeX project: ", File.basename(path))
59
+ config[:name] = (options[:name]) ? options[:name] : ask("\tEnter the name of the LaTeX project (which will serve as basename for the main LaTeX file): ", File.basename(path))
58
60
  raise FalkorLib::ExecError "Empty project name" if config[:name].empty?
59
61
  default_project_dir = (Pathname.new( File.realpath(path) ).relative_path_from Pathname.new( FalkorLib::Git.rootdir(dir))).to_s
60
62
  if relative_path_to_root == '.'
61
63
  default_project_dir = case type
62
- when :article, :ieee
64
+ when :article
63
65
  "articles/#{Time.now.year}/#{config[:name]}"
64
66
  when :beamer
65
67
  "slides/#{Time.now.year}/#{config[:name]}"
@@ -86,12 +88,10 @@ module FalkorLib
86
88
  # === prepare Git submodules ===
87
89
  info " ==> prepare the relevant Git submodules"
88
90
  submodules = {}
89
- if [ :article, :beamer, :bookchapter].include?(type)
90
- submodules['Makefiles'] = { :url => 'https://github.com/Falkor/Makefiles.git',
91
- :branch => 'devel' }
92
- end
91
+ submodules['Makefiles'] = { :url => 'https://github.com/Falkor/Makefiles.git', :branch => 'devel' }
93
92
  submodules['beamerthemeFalkor'] = { :url => 'https://github.com/Falkor/beamerthemeFalkor' } if type == :beamer
94
93
  FalkorLib::Git.submodule_init(rootdir, submodules)
94
+
95
95
  info "bootstrapping the #{type} project sources in '#{src_project_dir}'"
96
96
  # Create the project directory
97
97
  Dir.chdir( rootdir ) do
@@ -117,10 +117,10 @@ module FalkorLib
117
117
  # Bootstrap the directory
118
118
  src_templatedir = File.join( FalkorLib.templates, 'latex')
119
119
  unless File.exist?( File.join(srcdir, "#{config[:name]}.tex"))
120
- info "gathering information for the LaTeX templates"
120
+ info "gathering information for the LaTeX templates (type #{type})"
121
121
  prefix = case type
122
- when :article, :ieee, :acm
123
- 'Article '
122
+ when :article
123
+ 'Article '
124
124
  when :ieee_journal
125
125
  'IEEE Journal '
126
126
  when :beamer
@@ -129,21 +129,22 @@ module FalkorLib
129
129
  'Book Chapter '
130
130
  when :letter
131
131
  'Letter '
132
- else
133
- ''
134
132
  end
133
+ prefix.prepend("LLNCS ") if options[:llncs]
134
+ prefix.prepend("IEEE ") if options[:ieee]
135
+ prefix.prepend("ACM ") if options[:acm]
136
+ prefix.prepend("IEEE Journal ") if options[:ieee_journal]
135
137
  config.each do |k, v|
136
138
  next if k == :name
139
+ next if (type == :article and [ :image, :logo, :url].include?(k) )
137
140
  config[k.to_sym] = ask( "\t" + Kernel.format("%-20s", "#{prefix}#{k.capitalize}"), v) unless options[:no_interaction]
138
141
  end
139
142
  templates = [ File.join(src_templatedir, type.to_s) ]
140
- if [ :ieee, :ieee_journal, :acm].include?( type )
141
- templates << File.join(src_templatedir, 'article')
142
- templates << File.join(src_templatedir, "article-#{type}")
143
- end
144
- if type == :article
145
- templates << File.join(src_templatedir, 'ieee')
146
- templates << File.join(src_templatedir, 'article-ieee')
143
+ if (type == :article)
144
+ style = :ieee # default style
145
+ [ :llncs, :acm ].each { |s| style = s if options[ s.to_sym ] }
146
+ templates << File.join(src_templatedir, "article-#{style}")
147
+ templates << File.join(src_templatedir, "#{style}")
147
148
  end
148
149
  templates.each do |templatedir|
149
150
  info "**** using templatedir = #{templatedir}"
@@ -173,12 +174,7 @@ module FalkorLib
173
174
  # Prepare the src/ directory
174
175
  FalkorLib::Bootstrap::Link.makefile(File.join(rootdir, project_dir), :src => true, :no_interaction => true )
175
176
 
176
-
177
- # default_project_dir = case type
178
- # when :beamer
179
- # "slides/#{Time.new.yea}"
180
- # end
181
- end # project
177
+ end # latex
182
178
 
183
179
 
184
180
 
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  ################################################################################
3
- # Time-stamp: <Mon 2017-01-16 12:20 svarrette>
3
+ # Time-stamp: <Mon 2017-01-16 23:17 svarrette>
4
4
  ################################################################################
5
5
 
6
6
  require 'thor'
@@ -68,15 +68,17 @@ By default, NAME is '.' meaning that the repository will be initialized in the c
68
68
  end # repo
69
69
 
70
70
  ###### articles ######
71
- #......................................
72
- # desc "article [options]", "Bootstrap LaTeX Article"
73
- # method_option :name, :aliases => '-n', :desc => 'Name of the LaTeX project'
74
- # method_option :dir, :aliases => '-d', :desc => 'Project directory (relative to the git root directory)'
75
- # method_option :type, :default => 'ieee', :aliases => '-t', :desc => 'LaTeX Style to apply'
76
- # #___________________
77
- # def article(path = Dir.pwd)
78
- # FalkorLib::Bootstrap.latex(path, :article, options)
79
- # end # article
71
+ method_option :name, :aliases => '-n', :desc => 'Name of the LaTeX project'
72
+ method_option :dir, :aliases => '-d', :desc => 'Project directory (relative to the git root directory)'
73
+ method_option :ieee, :type => :boolean, :default => :false, :desc => 'Use the IEEEtran style for IEEE conference'
74
+ method_option :llncs, :type => :boolean, :default => :false, :desc => 'Use the Springer LNCS style', :aliases => '--lncs'
75
+ method_option :acm, :type => :boolean, :default => :false, :desc => 'Use the ACM style'
76
+ # ......................................
77
+ desc "article [options]", "Bootstrap a LaTeX Article"
78
+ #___________________
79
+ def article(path = Dir.pwd)
80
+ FalkorLib::Bootstrap.latex(path, :article, options)
81
+ end # article
80
82
 
81
83
 
82
84
  ###### letter ######
@@ -19,7 +19,7 @@ module FalkorLib #:nodoc:
19
19
  # MAJOR: Defines the major version
20
20
  # MINOR: Defines the minor version
21
21
  # PATCH: Defines the patch version
22
- MAJOR, MINOR, PATCH = 0, 7, 3
22
+ MAJOR, MINOR, PATCH = 0, 7, 4
23
23
 
24
24
  module_function
25
25
 
@@ -0,0 +1,3412 @@
1
+ %%% -*-BibTeX-*-
2
+ %%% ====================================================================
3
+ %%% @BibTeX-style-file{
4
+ %%% author = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
5
+ %%% version = "1.18",
6
+ %%% date = "10 July 2016",
7
+ %%% filename = "ACM-Reference-Format.bst",
8
+ %%% email = "beebe@math.utah.edu, beebe@acm.org,
9
+ %%% beebe@computer.org, borisv@lk.net, murray@hq.acm.org",
10
+ %%% codetable = "ISO/ASCII",
11
+ %%% keywords = "ACM Transactions bibliography style; BibTeX",
12
+ %%% license = "public domain",
13
+ %%% supported = "yes",
14
+ %%% abstract = "",
15
+ %%% }
16
+ %%% ====================================================================
17
+
18
+ % ACM BibTeX style, ACM-Reference-Format.bst
19
+ % for BibTeX version 0.99c, LaTeX version 3.141
20
+ % ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
21
+ % Revised 17-APRIL-2008 (Nelson)
22
+ % Revised 13-MARCH-2011 (Boris/Gerry)
23
+ % Revised 23-MARCH-2011 (Boris/Gerry)
24
+ % Revised 27-MARCH-2011 (Boris/Gerry)
25
+ % Revised 15-APRIL-2011 (Boris/Gerry)
26
+ % Revised 27-SEPTEMBER-2011 (Boris)
27
+ % Revised 10-JULY-2016 (Boris)
28
+ %
29
+ %
30
+ % History (by Nelson)
31
+ %
32
+ % Based on 'acmtrans' (for ACM Journals)
33
+ % Date: 28th April 2008
34
+ %
35
+ % 1. Avoid 'repeating' the 'month' values.
36
+ % 2. Avoid incorrectly italicizing the volume number.
37
+ % 3. Avoid non italicizing certain titles (book, inproceedings etc).
38
+ % 4. NO series if there is NO volume.
39
+ % 5. Sorting of reference with first surname.
40
+ % 6. Article no added for Inproceedings.
41
+ %
42
+ % Date: 07th May 2008
43
+ %
44
+ % 1. Abbreviation list added
45
+ %
46
+ % Citation format: [author-last-name year]
47
+ % [author-last-name and author-last-name year]
48
+ % [author-last-name, author-last-name, and author-last-name year]
49
+ % [author-last-name et al. year]
50
+ % [author-last-name]
51
+ % author-last-name [year]
52
+ % [author-last-name and author-last-name]
53
+ % [author-last-name et al.]
54
+ % [year] or [year,year]
55
+ % year or year,year
56
+ %
57
+ % Reference list ordering: alphabetical by author or whatever passes
58
+ % for author in the absence of one.
59
+ %
60
+ % Features of the old acmtrans.bst:
61
+ % =================================
62
+ %
63
+ % - all authors appear last name first.
64
+ % - all pages are listed xx-xx, (no pp.) and are at the end of the reference
65
+ % - publishers are identified as publisher, address
66
+ % - conferences papers (inproceedings) may give city of conference,
67
+ % date of conference, and journal that the proceedings appear in.
68
+ % - months abbreviated to max four letters (eg. Mar.)
69
+ % - volume of a series indicated after the title of the series
70
+ % - editors appear after edited title and are identified by a trailing "Eds."
71
+ % not in parentheses. Editor names are not given in small caps.
72
+ % (unless there is no author line)
73
+ % - names terminated with a period even if there is no first name.
74
+ % - editions are indicated trailing after the work, not in parentheses.
75
+ % - "et al." citations have a protected period to avoid bad spacing (jrh)
76
+ % - "address" required when publisher given
77
+ % - series (roman) and volume are in a sentence separate from (book-)title
78
+ %
79
+ %
80
+ % Features of chicago.bst:
81
+ % =======================
82
+ %
83
+ % - full names used in citations, but abbreviated citations are available
84
+ % (see above)
85
+ % - if an entry has a "month", then the month and year are also printed
86
+ % as part of that bibitem.
87
+ % - all conjunctions use "and" instead of "\&"
88
+ % - major modification from Chicago Manual of Style (13th ed.) is that
89
+ % only the first author in a reference appears last name first-
90
+ % additional authors appear as J. Q. Public.
91
+ % - pages are listed as "pp. xx-xx" in all entry types except
92
+ % article entries.
93
+ % - book, inbook, and manual use "location: publisher" (or organization)
94
+ % for address and publisher. All other types list publishers separately.
95
+ % - "pp." are used to identify page numbers for all entry types except
96
+ % articles.
97
+ % - organization is used as a citation label if neither author nor editor
98
+ % is present (for manuals).
99
+ % - "et al." is used for long author and editor lists, or when "others"
100
+ % is used.
101
+ %
102
+ % Modifications and bug fixes from newapa.bst:
103
+ % ===========================================
104
+ %
105
+ % - added month, year to bib entries if month is present
106
+ % - fixed bug with In proceedings, added necessary comma after title
107
+ % - all conjunctions changed to "and" from "\&"
108
+ % - fixed bug with author labels in my.full.label: "et al." now is
109
+ % generated when "others" is an author name
110
+ % - major modification from Chicago Manual of Style (13th ed.) is that
111
+ % only the first author in a reference appears last name first-
112
+ % additional authors appear as J. Q. Public.
113
+ % - pages are listed as "pp. xx-xx" in all entry types except
114
+ % article entries. Unnecessary (IMHO) "()" around page numbers
115
+ % were removed, and page numbers now don't end with a period.
116
+ % - created chicago.sty for use with this bibstyle (required).
117
+ % - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
118
+ % number, and /or pages. Renamed to format.journal.volume.number.
119
+ % - fixed bug in formatting booktitles: additional period an error if
120
+ % book has a volume.
121
+ % - fixed bug: editors usually given redundant period before next clause
122
+ % (format.editors.dot) removed.
123
+ % - added label support for organizations, if both author and editor
124
+ % are missing (from alpha.bst). If organization is too long, then
125
+ % the key field is used for abbreviated citations.
126
+ % - In proceedings or books of several volumes, no comma was written
127
+ % between the "Volume x" and the page numbers (this was intentional
128
+ % in newapa.bst). Fixed.
129
+ % - Some journals may not have volumes/numbers, only month/year (eg.
130
+ % IEEE Computer). Fixed bug in article style that assumed volume/number
131
+ % was always present.
132
+ %
133
+ % Original documentation for newapa.sty:
134
+ % =====================================
135
+ %
136
+ % This version was made by modifying the master file made by
137
+ % Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX
138
+ % style of Peter F. Patel-Schneider.
139
+ %
140
+ % Copyright (C) 1985, all rights reserved.
141
+ % Copying of this file is authorized only if either
142
+ % (1) you make absolutely no changes to your copy, including name, or
143
+ % (2) if you do make changes, you name it something other than 'newapa.bst'.
144
+ % There are undoubtably bugs in this style. If you make bug fixes,
145
+ % improvements, etc. please let me know. My e-mail address is:
146
+ % spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com
147
+ %
148
+ % This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
149
+ % with lots of tweaking to make it look like APA style, along with tips
150
+ % from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
151
+ %
152
+ %
153
+ % Start of ACM-Reference-Format-Journals.bst
154
+ %
155
+ % Note: Many of the new bibentry 'fields' will only work with the
156
+ % 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
157
+ % NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
158
+ %
159
+ %
160
+ ENTRY
161
+ { address
162
+ advisor
163
+ archiveprefix
164
+ author
165
+ booktitle
166
+ chapter
167
+ city % jtb: added
168
+ date % jtb: added
169
+ edition
170
+ editor
171
+ eprint
172
+ howpublished
173
+ institution
174
+ journal
175
+ key
176
+ month
177
+ note
178
+ number
179
+ organization
180
+ pages
181
+ primaryclass
182
+ publisher
183
+ school
184
+ series
185
+ title
186
+ type
187
+ volume
188
+ year
189
+ % New keys recognized
190
+ issue % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
191
+ articleno
192
+ day % UTAH: needed for newspapers, weeklies, bi-weeklies
193
+ doi % UTAH
194
+ url % UTAH
195
+ bookpages % UTAH
196
+ numpages
197
+ lastaccessed % UTAH: used only for @Misc{...}
198
+ coden % UTAH
199
+ isbn % UTAH
200
+ isbn-13 % UTAH
201
+ issn % UTAH
202
+ lccn % UTAH
203
+ }
204
+ {}
205
+ { label.year extra.label sort.year sort.label }
206
+
207
+ INTEGERS { output.state before.all mid.sentence after.sentence after.block }
208
+
209
+ INTEGERS { show-isbn-10-and-13 } % initialized below in begin.bib
210
+
211
+ INTEGERS { nameptr namesleft numnames }
212
+
213
+ INTEGERS { multiresult }
214
+
215
+ INTEGERS { len }
216
+
217
+ INTEGERS { last.extra.num }
218
+
219
+ STRINGS { s t t.org u }
220
+
221
+ STRINGS { last.label next.extra }
222
+
223
+ STRINGS { p1 p2 p3 page.count }
224
+
225
+ FUNCTION { dump.stack.1 }
226
+ {
227
+ duplicate$ "STACK[top] = [" swap$ * "]" * warning$
228
+ }
229
+
230
+ FUNCTION { dump.stack.2 }
231
+ {
232
+ duplicate$ "STACK[top ] = [" swap$ * "]" * warning$
233
+ swap$
234
+ duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
235
+ swap$
236
+ }
237
+
238
+ FUNCTION { empty.or.unknown }
239
+ {
240
+ %% Examine the top stack entry, and push 1 if it is empty, or
241
+ %% consists only of whitespace, or is a string beginning with two
242
+ %% queries (??), and otherwise, push 0.
243
+ %%
244
+ %% This function provides a replacement for empty$, with the
245
+ %% convenient feature that unknown values marked by two leading
246
+ %% queries are treated the same as missing values, and thus, do not
247
+ %% appear in the output .bbl file, and yet, their presence in .bib
248
+ %% file(s) serves to mark values which are temporarily missing, but
249
+ %% are expected to be filled in eventually once more data is
250
+ %% obtained. The TeX User Group and BibNet bibliography archives
251
+ %% make extensive use of this practice.
252
+ %%
253
+ %% An empty string cannot serve the same purpose, because just as in
254
+ %% statistics data processing, an unknown value is not the same as an
255
+ %% empty value.
256
+ %%
257
+ %% At entry: stack = ... top:[string]
258
+ %% At exit: stack = ... top:[0 or 1]
259
+
260
+ duplicate$ empty$
261
+ { pop$ #1 }
262
+ { #1 #2 substring$ "??" = }
263
+ if$
264
+ }
265
+
266
+ FUNCTION { writeln }
267
+ {
268
+ %% In BibTeX style files, the sequences
269
+ %%
270
+ %% ... "one" "two" output
271
+ %% ... "one" "two" output.xxx
272
+ %%
273
+ %% ship "one" to the output file, possibly following by punctuation,
274
+ %% leaving the stack with
275
+ %%
276
+ %% ... "two"
277
+ %%
278
+ %% There is thus a one-string lag in output processing that must be
279
+ %% carefully handled to avoid duplicating a string in the output
280
+ %% file. Unless otherwise noted, all output.xxx functions leave
281
+ %% just one new string on the stack, and that model should be born
282
+ %% in mind when reading or writing function code.
283
+ %%
284
+ %% BibTeX's asynchronous buffering of output from strings from the
285
+ %% stack is confusing because newline$ bypasses the buffer. It
286
+ %% would have been so much easier for newline to be a character
287
+ %% rather than a state of the output-in-progress.
288
+ %%
289
+ %% The documentation in btxhak.dvi is WRONG: it says
290
+ %%
291
+ %% newline$ Writes onto the bbl file what's accumulated in the
292
+ %% output buffer. It writes a blank line if and only
293
+ %% if the output buffer is empty. Since write$ does
294
+ %% reasonable line breaking, you should use this
295
+ %% function only when you want a blank line or an
296
+ %% explicit line break.
297
+ %%
298
+ %% write$ Pops the top (string) literal and writes it on the
299
+ %% output buffer (which will result in stuff being
300
+ %% written onto the bbl file when the buffer fills
301
+ %% up).
302
+ %%
303
+ %% Examination of the BibTeX source code shows that write$ does
304
+ %% indeed behave as claimed, but newline$ sends a newline character
305
+ %% directly to the output file, leaving the stack unchanged. The
306
+ %% first line "Writes onto ... buffer." is therefore wrong.
307
+ %%
308
+ %% The original BibTeX style files almost always use "write$ newline$"
309
+ %% in that order, so it makes sense to hide that pair in a private
310
+ %% function like this one, named after a statement in Pascal,
311
+ %% the programming language embedded in the BibTeX Web program.
312
+
313
+ write$ % output top-of-stack string
314
+ newline$ % immediate write of newline (not via stack)
315
+ }
316
+
317
+ FUNCTION { init.state.consts }
318
+ {
319
+ #0 'before.all :=
320
+ #1 'mid.sentence :=
321
+ #2 'after.sentence :=
322
+ #3 'after.block :=
323
+ }
324
+
325
+ FUNCTION { output.nonnull }
326
+ { % Stack in: ... R S T Stack out: ... R T File out: S<comma><space>
327
+ 's :=
328
+ output.state mid.sentence =
329
+ {
330
+ ", " * write$
331
+ }
332
+ {
333
+ output.state after.block =
334
+ {
335
+ add.period$ writeln
336
+ "\newblock " write$
337
+ }
338
+ {
339
+ output.state before.all =
340
+ {
341
+ write$
342
+ }
343
+ {
344
+ add.period$ " " * write$
345
+ }
346
+ if$
347
+ }
348
+ if$
349
+ mid.sentence 'output.state :=
350
+ }
351
+ if$
352
+ s
353
+ }
354
+
355
+ FUNCTION { output.nonnull.dot.space }
356
+ { % Stack in: ... R S T Stack out: ... R T File out: S<dot><space>
357
+ 's :=
358
+ output.state mid.sentence = % { "<DEBUG output.nonnull.dot.space>. " * write$ }
359
+ {
360
+ ". " * write$
361
+ }
362
+ {
363
+ output.state after.block =
364
+ {
365
+ add.period$ writeln "\newblock " write$
366
+ }
367
+ {
368
+ output.state before.all =
369
+ {
370
+ write$
371
+ }
372
+ {
373
+ add.period$ " " * write$
374
+ }
375
+ if$
376
+ }
377
+ if$
378
+ mid.sentence 'output.state :=
379
+ }
380
+ if$
381
+ s
382
+ }
383
+
384
+ FUNCTION { output.nonnull.remove }
385
+ { % Stack in: ... R S T Stack out: ... R T File out: S<space>
386
+ 's :=
387
+ output.state mid.sentence =
388
+ {
389
+ " " * write$
390
+ }
391
+ {
392
+ output.state after.block =
393
+ {
394
+ add.period$ writeln "\newblock " write$
395
+ }
396
+ {
397
+ output.state before.all =
398
+ {
399
+ write$
400
+ }
401
+ {
402
+ add.period$ " " * write$
403
+ }
404
+ if$
405
+ }
406
+ if$
407
+ mid.sentence 'output.state :=
408
+ }
409
+ if$
410
+ s
411
+ }
412
+
413
+ FUNCTION { output.nonnull.removenospace }
414
+ { % Stack in: ... R S T Stack out: ... R T File out: S
415
+ 's :=
416
+ output.state mid.sentence =
417
+ {
418
+ "" * write$
419
+ }
420
+ {
421
+ output.state after.block =
422
+ {
423
+ add.period$ writeln "\newblock " write$
424
+ }
425
+ {
426
+ output.state before.all =
427
+ {
428
+ write$
429
+ }
430
+ {
431
+ add.period$ " " * write$
432
+ }
433
+ if$
434
+ }
435
+ if$
436
+ mid.sentence 'output.state :=
437
+ }
438
+ if$
439
+ s
440
+ }
441
+
442
+ FUNCTION { output }
443
+ { % discard top token if empty, else like output.nonnull
444
+ duplicate$ empty.or.unknown
445
+ 'pop$
446
+ 'output.nonnull
447
+ if$
448
+ }
449
+
450
+ FUNCTION { output.dot.space }
451
+ { % discard top token if empty, else like output.nonnull.dot.space
452
+ duplicate$ empty.or.unknown
453
+ 'pop$
454
+ 'output.nonnull.dot.space
455
+ if$
456
+ }
457
+
458
+ FUNCTION { output.removenospace }
459
+ { % discard top token if empty, else like output.nonnull.removenospace
460
+ duplicate$ empty.or.unknown
461
+ 'pop$
462
+ 'output.nonnull.removenospace
463
+ if$
464
+ }
465
+
466
+ FUNCTION { output.check }
467
+ { % like output, but warn if key name on top-of-stack is not set
468
+ 't :=
469
+ duplicate$ empty.or.unknown
470
+ { pop$ "empty " t * " in " * cite$ * warning$ }
471
+ 'output.nonnull
472
+ if$
473
+ }
474
+
475
+ FUNCTION { bibinfo.output.check }
476
+ { % like output.check, adding bibinfo field
477
+ 't :=
478
+ duplicate$ empty.or.unknown
479
+ { pop$ "empty " t * " in " * cite$ * warning$ }
480
+ { "\bibinfo{" t "}{" * * swap$ * "}" *
481
+ output.nonnull }
482
+ if$
483
+ }
484
+
485
+ FUNCTION { output.check.dot.space }
486
+ { % like output.dot.space, but warn if key name on top-of-stack is not set
487
+ 't :=
488
+ duplicate$ empty.or.unknown
489
+ { pop$ "empty " t * " in " * cite$ * warning$ }
490
+ 'output.nonnull.dot.space
491
+ if$
492
+ }
493
+
494
+ FUNCTION { fin.block }
495
+ { % functionally, but not logically, identical to fin.entry
496
+ add.period$
497
+ writeln
498
+ }
499
+
500
+ FUNCTION { fin.entry }
501
+ {
502
+ add.period$
503
+ writeln
504
+ }
505
+
506
+ FUNCTION { new.sentence }
507
+ { % update sentence state, with neither output nor stack change
508
+ output.state after.block =
509
+ 'skip$
510
+ {
511
+ output.state before.all =
512
+ 'skip$
513
+ { after.sentence 'output.state := }
514
+ if$
515
+ }
516
+ if$
517
+ }
518
+
519
+ FUNCTION { fin.sentence }
520
+ {
521
+ add.period$
522
+ write$
523
+ new.sentence
524
+ ""
525
+ }
526
+
527
+ FUNCTION { new.block }
528
+ {
529
+ output.state before.all =
530
+ 'skip$
531
+ { after.block 'output.state := }
532
+ if$
533
+ }
534
+
535
+ FUNCTION { output.coden } % UTAH
536
+ { % output non-empty CODEN as one-line sentence (stack untouched)
537
+ coden empty.or.unknown
538
+ { }
539
+ { "\showCODEN{" coden * "}" * writeln }
540
+ if$
541
+ }
542
+
543
+ FUNCTION { format.articleno }
544
+ {
545
+ articleno empty.or.unknown
546
+ { "" }
547
+ {
548
+ numpages empty.or.unknown
549
+ { "articleno field, but no numpages field, in " cite$ * warning$ }
550
+ { }
551
+ if$
552
+ "Article \bibinfo{articleno}{" articleno * "}" *
553
+ }
554
+ if$
555
+ }
556
+
557
+ FUNCTION { format.year }
558
+ { % push year string or "????" onto output stack
559
+ %% Because year is a mandatory field, we always force SOMETHING
560
+ %% to be output
561
+ "\bibinfo{year}{"
562
+ year empty.or.unknown
563
+ { "????" }
564
+ { year }
565
+ if$
566
+ * "}" *
567
+ }
568
+
569
+ FUNCTION { format.day.month }
570
+ { % push "day month " or "month " or "" onto output stack
571
+ day empty.or.unknown
572
+ {
573
+ month empty.or.unknown
574
+ { "" }
575
+ { "\bibinfo{date}{" month * "} " *}
576
+ if$
577
+ }
578
+ {
579
+ month empty.or.unknown
580
+ { "" }
581
+ { "\bibinfo{date}{" day * " " * month * "} " *}
582
+ if$
583
+ }
584
+ if$
585
+ }
586
+
587
+ FUNCTION { format.day.month.year } % UTAH
588
+ { % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
589
+ % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
590
+ % acm-*.bst addition: prefix parenthesized date string with
591
+ % ", Article nnn "
592
+ articleno empty.or.unknown
593
+ { "" }
594
+ { ", " format.articleno * }
595
+ if$
596
+ " (" * format.day.month * format.year * ")" *
597
+ }
598
+
599
+ FUNCTION { output.day.month.year } % UTAH
600
+ { % if month is empty value, do nothing; else output stack top and
601
+ % leave with new top string "(MON.)" or "(DD MON.)"
602
+ % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
603
+ format.day.month.year
604
+ output.nonnull.remove
605
+ }
606
+
607
+ FUNCTION { strip.doi } % UTAH
608
+ { % Strip any Web address prefix to recover the bare DOI, leaving the
609
+ % result on the output stack, as recommended by CrossRef DOI
610
+ % documentation.
611
+ % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
612
+ % "10.1145/1534530.1534545". That is later typeset and displayed as
613
+ % doi:10.1145/1534530.1534545 as the LAST item in the reference list
614
+ % entry. Publisher Web sites wrap this with a suitable link to a real
615
+ % URL to resolve the DOI, and the master http://dx.doi.org/ address is
616
+ % preferred, since publisher-specific URLs can disappear in response
617
+ % to economic events. All journals are encouraged by the DOI
618
+ % authorities to use that typeset format and link procedures for
619
+ % uniformity across all publications that include DOIs in reference
620
+ % lists.
621
+ % The numeric prefix is guaranteed to start with "10.", so we use
622
+ % that as a test.
623
+ doi #1 #3 substring$ "10." =
624
+ { doi }
625
+ {
626
+ doi #1 #7 substring$ "http://" =
627
+ {
628
+ doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
629
+
630
+ "INTERNAL STYLE-FILE ERROR" 's :=
631
+
632
+ % search for next "/" and assign its suffix to s
633
+
634
+ { t text.length$ }
635
+ {
636
+ t #1 #1 substring$ "/" =
637
+ {
638
+ % save rest of string as true DOI (should be 10.xxxx/yyyy)
639
+ t #2 t text.length$ #1 - substring$ 's :=
640
+ "" 't := % empty string t terminates the loop
641
+ }
642
+ {
643
+ % discard first character and continue loop: t <= substring(t,2,last)
644
+ t #2 t text.length$ #1 - substring$ 't :=
645
+ }
646
+ if$
647
+ }
648
+ while$
649
+
650
+ % check for valid DOI (should be 10.xxxx/yyyy)
651
+ s #1 #3 substring$ "10." =
652
+ { }
653
+ { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
654
+ if$
655
+
656
+ s % push the stripped DOI on the output stack
657
+
658
+ }
659
+ {
660
+ "unrecognized DOI value [" doi * "]" * warning$
661
+ doi % push the unrecognized original DOI on the output stack
662
+ }
663
+ if$
664
+ }
665
+ if$
666
+ }
667
+
668
+ %
669
+ % Change by BV: added standard prefix to URL
670
+ %
671
+ FUNCTION { output.doi } % UTAH
672
+ { % output non-empty DOI as one-line sentence (stack untouched)
673
+ doi empty.or.unknown
674
+ { }
675
+ {
676
+ %% NB: We want URLs at beginning of line to reduce likelihood of
677
+ %% BibTeX's nasty line wrapping after column 79, which then requires
678
+ %% manual (or automated) editing of the .bbl file to repair.
679
+ %% The \url{} macro strips percent-newlines, and is thus safe in
680
+ %% the presence of the line wrapping, but \path|...| and
681
+ %% \verb|...| do not.
682
+ "\showDOI{%" writeln
683
+ "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
684
+ }
685
+ if$
686
+ }
687
+
688
+ FUNCTION { output.isbn } % UTAH
689
+ { % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
690
+ show-isbn-10-and-13
691
+ {
692
+ %% show both 10- and 13-digit ISBNs
693
+ isbn empty.or.unknown
694
+ { }
695
+ {
696
+ "\showISBNx{" isbn * "}" * writeln
697
+ }
698
+ if$
699
+ isbn-13 empty.or.unknown
700
+ { }
701
+ {
702
+ "\showISBNxiii{" isbn-13 * "}" * writeln
703
+ }
704
+ if$
705
+ }
706
+ {
707
+ %% show 10-digit ISBNs only if 13-digit ISBNs not available
708
+ isbn-13 empty.or.unknown
709
+ {
710
+ isbn empty.or.unknown
711
+ { }
712
+ {
713
+ "\showISBNx{" isbn * "}" * writeln
714
+ }
715
+ if$
716
+ }
717
+ {
718
+ "\showISBNxiii{" isbn-13 * "}" * writeln
719
+ }
720
+ if$
721
+ }
722
+ if$
723
+ }
724
+
725
+ FUNCTION { output.issn } % UTAH
726
+ { % output non-empty ISSN as one-line sentence (stack untouched)
727
+ issn empty.or.unknown
728
+ { }
729
+ { "\showISSN{" issn * "}" * writeln }
730
+ if$
731
+ }
732
+
733
+ FUNCTION { output.issue }
734
+ { % output non-empty issue number as a one-line sentence (stack untouched)
735
+ issue empty.or.unknown
736
+ { }
737
+ { "Issue " issue * "." * writeln }
738
+ if$
739
+ }
740
+
741
+ FUNCTION { output.lccn } % UTAH
742
+ { % return with stack untouched
743
+ lccn empty.or.unknown
744
+ { }
745
+ { "\showLCCN{" lccn * "}" * writeln }
746
+ if$
747
+ }
748
+
749
+ FUNCTION { output.note } % UTAH
750
+ { % return with stack empty
751
+ note empty.or.unknown
752
+ { }
753
+ { "\shownote{" note add.period$ * "}" * writeln }
754
+ if$
755
+ }
756
+
757
+ FUNCTION { output.note.check } % UTAH
758
+ { % return with stack empty
759
+ note empty.or.unknown
760
+ { "empty note in " cite$ * warning$ }
761
+ { "\shownote{" note add.period$ * "}" * writeln }
762
+ if$
763
+ }
764
+
765
+ FUNCTION { output.eprint } %
766
+ { % return with stack empty
767
+ eprint empty.or.unknown
768
+ { }
769
+ { "\showeprint"
770
+ archiveprefix empty.or.unknown
771
+ { }
772
+ { "[" archiveprefix "l" change.case$ "]" * * * }
773
+ if$
774
+ "{" *
775
+ primaryclass empty.or.unknown
776
+ { }
777
+ { primaryclass "/" * *}
778
+ if$
779
+ eprint "}" * *
780
+ writeln
781
+ }
782
+ if$
783
+ }
784
+
785
+
786
+ %
787
+ % Changes by BV 2011/04/15. Do not output
788
+ % url if doi is defined
789
+ %
790
+ FUNCTION { output.url } % UTAH
791
+ { % return with stack untouched
792
+ % output URL and associated lastaccessed fields
793
+ doi empty.or.unknown
794
+ {
795
+ url empty.or.unknown
796
+ { }
797
+ {
798
+ %% NB: We want URLs at beginning of line to reduce likelihood of
799
+ %% BibTeX's nasty line wrapping after column 79, which would require
800
+ %% manual (or automated) editing of the .bbl file to repair. However,
801
+ %% the \url{} macro handles the unwrapping job automatically.
802
+ "\showURL{%" writeln
803
+ lastaccessed empty.or.unknown
804
+ { "" }
805
+ { "Retrieved " lastaccessed * " from " * }
806
+ if$
807
+
808
+ %% The URL field may contain a semicolon-separated list of Web
809
+ %% addresses, and we locate and wrap each of them in \url{...}.
810
+ %% The simplistic approach of putting the entire list into the
811
+ %% macro argument is that the semicolons are typeset in a
812
+ %% typewriter font, and no space follows them.
813
+ %%
814
+ %% We therefore replace the original code
815
+ %% "\url{" * url * "}}" * writeln
816
+ %% with this character-at-a-time loop:
817
+
818
+ "\url{" *
819
+
820
+ url 't := % get modifiable copy of URL list
821
+
822
+ { t text.length$ }
823
+ {
824
+ t #1 #1 substring$ ";" =
825
+ { % then split argument at separator
826
+ "};" * writeln
827
+ "\url{"
828
+ }
829
+ { % else concatenate nonblank character to argument
830
+ t #1 #1 substring$ " " =
831
+ { }
832
+ { t #1 #1 substring$ * }
833
+ if$
834
+ }
835
+ if$
836
+
837
+ t #2 t text.length$ #1 - substring$ 't :=
838
+ }
839
+ while$
840
+
841
+ "}}" * writeln
842
+ }
843
+ if$
844
+ }
845
+ { }
846
+ if$
847
+ }
848
+
849
+ FUNCTION { output.year.check }
850
+ { % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
851
+ year empty.or.unknown
852
+ { "empty year in " cite$ * warning$ }
853
+ { write$
854
+ " \bibinfo{year}{" year * "}" *
855
+ "\natexlab{" extra.label * "}" * *
856
+ mid.sentence 'output.state :=
857
+ }
858
+ if$
859
+ }
860
+
861
+ FUNCTION { not }
862
+ {
863
+ { #0 }
864
+ { #1 }
865
+ if$
866
+ }
867
+
868
+ FUNCTION { and }
869
+ {
870
+ 'skip$
871
+ { pop$ #0 }
872
+ if$
873
+ }
874
+
875
+ FUNCTION { or }
876
+ {
877
+ { pop$ #1 }
878
+ 'skip$
879
+ if$
880
+ }
881
+
882
+ FUNCTION { le }
883
+ {
884
+ %% test whether first number is less than or equal to second number
885
+ %% stack in: n1 n2
886
+ %% stack out: if n1 <= n2 then 1 else 0
887
+
888
+ %% "DEBUG: le " cite$ * warning$
889
+ > { #0 } { #1 } if$
890
+ }
891
+
892
+ FUNCTION { ge }
893
+ {
894
+ %% test whether first number is greater than or equal to second number
895
+ %% stack in: n1 n2
896
+ %% stack out: if n1 >= n2 then 1 else 0
897
+
898
+ %% "DEBUG: ge " cite$ * warning$
899
+ < { #0 } { #1 } if$
900
+ }
901
+
902
+ FUNCTION { is.leading.digit }
903
+ {
904
+ %% test whether first character of string is a digit
905
+ %% stack in: string
906
+ %% stack out: if first-char-is-digit then 1 else 0
907
+
908
+ #1 #1 substring$ % replace string by string[1:1]
909
+ duplicate$ % string[1:1] string[1:1]
910
+ chr.to.int$
911
+ "0" chr.to.int$ swap$ le % "0" <= string[1:1] --> 0-or-1
912
+ swap$ % 0-or-1 string[1:1]
913
+ chr.to.int$
914
+ "9" chr.to.int$ le % string[1:1} <= "9" --> 0-or-1
915
+ and
916
+ }
917
+
918
+ FUNCTION { skip.digits }
919
+ {
920
+ %% skip over leading digits in string
921
+ %% stack in: string
922
+ %% stack out: rest-of-string leading-digits
923
+
924
+ %% "DEBUG: enter skip.digits " cite$ * warning$
925
+
926
+ %% dump.stack.1
927
+
928
+ duplicate$
929
+ 't :=
930
+ 't.org :=
931
+ "" 'u :=
932
+
933
+ { t text.length$ }
934
+ {
935
+ %% "=================DEBUG: skip.digits t = [" t * "]" * warning$
936
+ t is.leading.digit
937
+ { t #2 t text.length$ #1 - substring$ }
938
+ {
939
+ t 'u :=
940
+ ""
941
+ }
942
+ if$
943
+ 't :=
944
+ }
945
+ while$
946
+
947
+ u % rest of string
948
+ t.org #1 t.org text.length$ u text.length$ - substring$ % leading digits
949
+
950
+ %% "DEBUG: t.org = [" t.org * "]" * warning$
951
+ %% "DEBUG: u = [" u * "]" * warning$
952
+
953
+ %% dump.stack.2
954
+
955
+ %% "DEBUG: leave skip.digits " cite$ * warning$
956
+ }
957
+
958
+ FUNCTION { skip.nondigits }
959
+ {
960
+ %% skip over leading nondigits in string
961
+ %% stack in: string
962
+ %% stack out: rest-of-string
963
+
964
+ %% "DEBUG: enter skip.nondigits " cite$ * warning$
965
+
966
+ 't :=
967
+ "" 'u :=
968
+
969
+ { t text.length$ }
970
+ {
971
+ %% "=================DEBUG: skip.nondigits t = [" t * "]" * warning$
972
+ t is.leading.digit
973
+ {
974
+ t 'u :=
975
+ ""
976
+ }
977
+ { t #2 t text.length$ #1 - substring$ }
978
+ if$
979
+ 't :=
980
+ }
981
+ while$
982
+
983
+ u % rest of string
984
+
985
+ %% dump.stack.1
986
+ %% "DEBUG: leave skip.nondigits " cite$ * warning$
987
+ }
988
+
989
+ FUNCTION { parse.next.number }
990
+ {
991
+ %% stack in: string
992
+ %% stack out: rest-of-string next-numeric-part-of-string
993
+ %% Example:
994
+ %% stack in: "123:1--123:59"
995
+ %% stack out: ":1--123:59" "123"
996
+
997
+ 's :=
998
+ s skip.nondigits 's :=
999
+ s skip.digits
1000
+ }
1001
+
1002
+ FUNCTION { reduce.pages.to.page.count }
1003
+ {
1004
+ %% Stack in: arbitrary-and-unused
1005
+ %% Stack out: unchanged
1006
+ %%
1007
+ %% For the new-style pagination with article number and numpages or
1008
+ %% pages, we expect to have BibTeX entries containing something like
1009
+ %% articleno = "17",
1010
+ %% pages = "1--23",
1011
+ %% with output "Article 17, 23 pages",
1012
+ %% or
1013
+ %% articleno = "17",
1014
+ %% numpages = "23",
1015
+ %% with output "Article 17, 23 pages",
1016
+ %% or
1017
+ %% articleno = "17",
1018
+ %% pages = "17:1--17:23",
1019
+ %% with output "Article 17, 23 pages",
1020
+ %%
1021
+ %% If articleno is missing or empty, then we should output "1--23",
1022
+ %% "23" (with a warning of a missing articleno), or "17:1--17:23",
1023
+ %% respectively.
1024
+
1025
+ %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
1026
+
1027
+ %% "DEBUG: pages = [" pages * "]" * warning$
1028
+
1029
+ pages
1030
+ parse.next.number 'p1 :=
1031
+ parse.next.number 'p2 :=
1032
+ parse.next.number 'p3 :=
1033
+ parse.next.number 'page.count :=
1034
+
1035
+ duplicate$
1036
+ empty.or.unknown
1037
+ { }
1038
+ {
1039
+ duplicate$ "unexpected trailing garbage [" swap$ *
1040
+ "] after n:p1--n:p2 in pages = [" *
1041
+ pages *
1042
+ "] in " *
1043
+ cite$ *
1044
+ warning$
1045
+ }
1046
+ if$
1047
+
1048
+ pop$
1049
+
1050
+ %% "DEBUG: reduce.pages.to.page.count: "
1051
+ %% " p1 = " p1 * *
1052
+ %% " p2 = " p2 * *
1053
+ %% " p3 = " p3 * *
1054
+ %% " p4 = " page.count * *
1055
+ %% " in " cite$ * * warning$
1056
+
1057
+ p1 p3 = p2 "1" = and numpages empty.or.unknown and
1058
+ { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
1059
+ {
1060
+ numpages empty.or.unknown
1061
+ { pages }
1062
+ { numpages }
1063
+ if$
1064
+ 'page.count :=
1065
+ }
1066
+ if$
1067
+
1068
+ p1 "1" = p3 empty.or.unknown and numpages empty.or.unknown and
1069
+ {
1070
+ p2 'page.count :=
1071
+ "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
1072
+ }
1073
+ {
1074
+ numpages empty.or.unknown
1075
+ { pages }
1076
+ { numpages }
1077
+ if$
1078
+ 'page.count :=
1079
+ }
1080
+ if$
1081
+
1082
+ %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
1083
+ }
1084
+
1085
+ FUNCTION { new.block.checkb }
1086
+ { % issue a new.block only if at least one of top two stack strings is not empty
1087
+ empty.or.unknown
1088
+ swap$ empty.or.unknown
1089
+ and
1090
+ 'skip$
1091
+ 'new.block
1092
+ if$
1093
+ }
1094
+
1095
+ FUNCTION { field.or.null }
1096
+ { % convert empty value to null string, else return value
1097
+ duplicate$ empty.or.unknown
1098
+ { pop$ "" }
1099
+ 'skip$
1100
+ if$
1101
+ }
1102
+
1103
+ FUNCTION { emphasize }
1104
+ { % emphasize a non-empty top string on the stack (WITHOUT italic correction)
1105
+ duplicate$ empty.or.unknown
1106
+ { pop$ "" }
1107
+ { "{\em " swap$ * "}" * }
1108
+ if$
1109
+ }
1110
+
1111
+ FUNCTION { emphasize.with.italic.correction }
1112
+ { % convert empty string to null string, or emphasize with a trailing italic correction
1113
+ duplicate$ empty.or.unknown
1114
+ { pop$ "" }
1115
+ { "{\em " swap$ * "\/}" * }
1116
+ if$
1117
+ }
1118
+
1119
+ FUNCTION { comma }
1120
+ { % convert empty string to null string, or brace string and add trailing comma
1121
+ duplicate$ empty.or.unknown
1122
+ { pop$ "" }
1123
+ { "{" swap$ * "}," * }
1124
+ if$
1125
+ }
1126
+
1127
+ FUNCTION { format.names }
1128
+ {
1129
+ % Format bibliographical entries with the first author last name first,
1130
+ % and subsequent authors with initials followed by last name.
1131
+ % All names are formatted in this routine.
1132
+
1133
+ 's :=
1134
+ #1 'nameptr := % nameptr = 1;
1135
+ s num.names$ 'numnames := % numnames = num.name$(s);
1136
+ numnames 'namesleft :=
1137
+ { namesleft #0 > }
1138
+ { nameptr #1 =
1139
+ %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
1140
+ %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
1141
+ {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
1142
+ {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
1143
+ if$
1144
+ nameptr #1 >
1145
+ {
1146
+ namesleft #1 >
1147
+ { ", " * t * }
1148
+ {
1149
+ numnames #2 >
1150
+ { "," * }
1151
+ 'skip$
1152
+ if$
1153
+ t "{\sc others}" =
1154
+ { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
1155
+ { " {and} " * t * } % from Chicago Manual of Style
1156
+ if$
1157
+ }
1158
+ if$
1159
+ }
1160
+ 't
1161
+ if$
1162
+ nameptr #1 + 'nameptr := % nameptr += 1;
1163
+ namesleft #1 - 'namesleft := % namesleft =- 1;
1164
+ }
1165
+ while$
1166
+ }
1167
+
1168
+ FUNCTION { my.full.label }
1169
+ {
1170
+ 's :=
1171
+ #1 'nameptr := % nameptr = 1;
1172
+ s num.names$ 'numnames := % numnames = num.name$(s);
1173
+ numnames 'namesleft :=
1174
+ { namesleft #0 > }
1175
+
1176
+ { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name
1177
+ nameptr #1 >
1178
+ {
1179
+ namesleft #1 >
1180
+ { ", " * t * }
1181
+ {
1182
+ numnames #2 >
1183
+ { "," * }
1184
+ 'skip$
1185
+ if$
1186
+ t "others" =
1187
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
1188
+ { " and " * t * } % from Chicago Manual of Style
1189
+ if$
1190
+ }
1191
+ if$
1192
+ }
1193
+ 't
1194
+ if$
1195
+ nameptr #1 + 'nameptr := % nameptr += 1;
1196
+ namesleft #1 - 'namesleft := % namesleft =- 1;
1197
+ }
1198
+ while$
1199
+
1200
+ }
1201
+
1202
+ FUNCTION { format.names.fml }
1203
+ {
1204
+ % Format names in "familiar" format, with first initial followed by
1205
+ % last name. Like format.names, ALL names are formatted.
1206
+ % jtb: The names are NOT put in small caps
1207
+
1208
+ 's :=
1209
+ #1 'nameptr := % nameptr = 1;
1210
+ s num.names$ 'numnames := % numnames = num.name$(s);
1211
+ numnames 'namesleft :=
1212
+ { namesleft #0 > }
1213
+
1214
+ {
1215
+ "\bibinfo{person}{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
1216
+
1217
+ nameptr #1 >
1218
+ {
1219
+ namesleft #1 >
1220
+ { ", " * t * }
1221
+ {
1222
+ numnames #2 >
1223
+ { "," * }
1224
+ 'skip$
1225
+ if$
1226
+ t "{others}" =
1227
+ { " {et~al\mbox{.}}" * }
1228
+ { " {and} " * t * }
1229
+ if$
1230
+ }
1231
+ if$
1232
+ }
1233
+ 't
1234
+ if$
1235
+ nameptr #1 + 'nameptr := % nameptr += 1;
1236
+ namesleft #1 - 'namesleft := % namesleft =- 1;
1237
+ }
1238
+ while$
1239
+ }
1240
+
1241
+ FUNCTION { format.authors }
1242
+ {
1243
+ author empty.or.unknown
1244
+ { "" }
1245
+ {
1246
+ "\bibfield{author}{"
1247
+ author format.names add.period$ * "}" *} % jtb: add period if none before
1248
+ if$
1249
+ }
1250
+
1251
+ FUNCTION { format.key }
1252
+ {
1253
+ empty.or.unknown
1254
+ { key field.or.null }
1255
+ { "" }
1256
+ if$
1257
+ }
1258
+
1259
+ FUNCTION { format.no.key }
1260
+ {
1261
+ empty.or.unknown
1262
+ { "" }
1263
+ { "" }
1264
+ if$
1265
+ }
1266
+
1267
+ FUNCTION { format.editors.fml }
1268
+ {
1269
+ % Format editor names for use in the "in" types: inbook, incollection,
1270
+ % inproceedings: first initial, then last names. When editors are the
1271
+ % LABEL for an entry, then format.editor is used which lists editors
1272
+ % by last name first.
1273
+
1274
+ editor empty.or.unknown
1275
+ { "" }
1276
+ {
1277
+ "\bibfield{editor}{"
1278
+ editor format.names.fml
1279
+ * "}" *
1280
+ editor num.names$ #1 >
1281
+ { " (Eds.)" * }
1282
+ { " (Ed.)" * }
1283
+ if$
1284
+ }
1285
+ if$
1286
+ }
1287
+
1288
+ FUNCTION { format.editors }
1289
+ { % format editor names for use in labels, last names first.
1290
+ editor empty.or.unknown
1291
+ { "" }
1292
+ {
1293
+ "\bibfield{editor}{"
1294
+ editor format.names
1295
+ * "}" *
1296
+ editor num.names$ #1 >
1297
+ { " (Eds.)." * }
1298
+ { " (Ed.)." * }
1299
+ if$
1300
+ }
1301
+ if$
1302
+ }
1303
+
1304
+ FUNCTION { format.articletitle }
1305
+ {
1306
+ title empty.or.unknown
1307
+ { "" }
1308
+ % Use this to preserve lettercase in titles:
1309
+ { "\showarticletitle{" title * "}" * }
1310
+ % Use this for downcase title style:
1311
+ % { \showarticletitle{" title "t" change.case$ * "}" * }
1312
+ if$
1313
+ }
1314
+
1315
+ FUNCTION { format.title }
1316
+ {
1317
+ title empty.or.unknown
1318
+ { "" }
1319
+ % Use this to preserve lettercase in titles:
1320
+ { "\bibinfo{title}{" title * "}" * }
1321
+ % Use this for downcase title style:
1322
+ % { title "t" change.case$ }
1323
+ if$
1324
+ }
1325
+
1326
+ FUNCTION { n.dashify }
1327
+ {
1328
+ 't :=
1329
+ ""
1330
+ { t empty.or.unknown not }
1331
+ {
1332
+ t #1 #1 substring$ "-" =
1333
+ {
1334
+ t #1 #2 substring$ "--" = not
1335
+ { "--" *
1336
+ t #2 global.max$ substring$ 't :=
1337
+ }
1338
+ {
1339
+ { t #1 #1 substring$ "-" = }
1340
+ {
1341
+ "-" *
1342
+ t #2 global.max$ substring$ 't :=
1343
+ }
1344
+ while$
1345
+ }
1346
+ if$
1347
+ }
1348
+ {
1349
+ t #1 #1 substring$ *
1350
+ t #2 global.max$ substring$ 't :=
1351
+ }
1352
+ if$
1353
+ }
1354
+ while$
1355
+ }
1356
+
1357
+ FUNCTION { format.btitle }
1358
+ {
1359
+ "\bibinfo{booktitle}{"
1360
+ edition empty.or.unknown
1361
+ { title emphasize }
1362
+ { title empty.or.unknown
1363
+ { title emphasize } % jtb: what is this supposed to do ?!?
1364
+ { "{\em " title * "\/} (\bibinfo{edition}{" * edition "l" change.case$ *
1365
+ "} ed.)" * } % jtb: no parens for ed.
1366
+ if$
1367
+ }
1368
+ if$
1369
+ * "}" *
1370
+ }
1371
+
1372
+ FUNCTION { format.emphasize.booktitle }
1373
+ { % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
1374
+ "\bibinfo{booktitle}{"
1375
+ edition empty.or.unknown
1376
+ { booktitle emphasize }
1377
+ { booktitle empty.or.unknown
1378
+ { "" }
1379
+ { "{\em " booktitle * "} (\bibinfo{edition}{" *
1380
+ edition "l" change.case$ * "} ed.)" * }
1381
+ if$
1382
+ }
1383
+ if$
1384
+ * "}" *
1385
+ }
1386
+
1387
+ FUNCTION { format.city }
1388
+ {
1389
+ % jtb: if the preceding string (the title of the conference) is non-empty,
1390
+ % jtb: append the location, otherwise leave empty (so as to trigger the
1391
+ % jtb: error message in output.check
1392
+
1393
+ duplicate$ empty.or.unknown
1394
+ { }
1395
+ {
1396
+ city empty.or.unknown
1397
+ {
1398
+ date empty.or.unknown
1399
+ { }
1400
+ { " (" * date * ")" * }
1401
+ if$
1402
+ }
1403
+ {
1404
+ date empty.or.unknown
1405
+ { " (" * city * ")" * }
1406
+ { " (" * city * ", " * date * ")" * }
1407
+ if$
1408
+ }
1409
+ if$
1410
+ }
1411
+ if$
1412
+ }
1413
+
1414
+ FUNCTION { tie.or.space.connect }
1415
+ {
1416
+ duplicate$ text.length$ #3 <
1417
+ { "~" }
1418
+ { " " }
1419
+ if$
1420
+ swap$ * *
1421
+ }
1422
+
1423
+ FUNCTION { either.or.check }
1424
+ {
1425
+ empty.or.unknown
1426
+ 'pop$
1427
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
1428
+ if$
1429
+ }
1430
+
1431
+ FUNCTION { format.bvolume }
1432
+ {
1433
+ % jtb: If there is a series, this is added and the volume trails after it.
1434
+ % jtb: Otherwise, "Vol" is Capitalized.
1435
+
1436
+ volume empty.or.unknown
1437
+ { "" }
1438
+ {
1439
+ series empty.or.unknown
1440
+ { "Vol.~\bibinfo{volume}{" volume "}" * *}
1441
+ { "\bibinfo{series}{" series "}, " * *
1442
+ "Vol.~\bibinfo{volume}{" volume "}" * * *}
1443
+ if$
1444
+ "volume and number" number either.or.check
1445
+ }
1446
+ if$
1447
+ }
1448
+
1449
+ FUNCTION { format.bvolume.noseries }
1450
+ {
1451
+ volume empty.or.unknown
1452
+ { "" }
1453
+ { "Vol.~\bibinfo{volume}{" volume "}" * *
1454
+ "volume and number" number either.or.check
1455
+ }
1456
+ if$
1457
+ }
1458
+
1459
+ FUNCTION { format.series }
1460
+ {
1461
+ series empty.or.unknown
1462
+ {""}
1463
+ {" {\em (\bibinfo{series}{" * series "})}" *}
1464
+ if$
1465
+ }
1466
+
1467
+ FUNCTION { format.number.series }
1468
+ {
1469
+ volume empty.or.unknown
1470
+ {
1471
+ number empty.or.unknown
1472
+ {
1473
+ volume empty.or.unknown
1474
+ { "" }
1475
+ {
1476
+ series empty.or.unknown
1477
+ { "" }
1478
+ { " (\bibinfo{series}{" series * "})" * }
1479
+ if$
1480
+ }
1481
+ if$
1482
+ } % { series field.or.null }
1483
+ {
1484
+ output.state mid.sentence =
1485
+ { "Number" } % gnp - changed to mixed case always
1486
+ { "Number" }
1487
+ if$
1488
+ number tie.or.space.connect series empty.or.unknown
1489
+ { "there's a number but no series in " cite$ * warning$ }
1490
+ { " in \bibinfo{series}{" * series * "}" * }
1491
+ if$
1492
+ }
1493
+ if$
1494
+ }
1495
+ {
1496
+ ""
1497
+ }
1498
+ if$
1499
+ }
1500
+
1501
+ FUNCTION { multi.page.check }
1502
+ {
1503
+ 't :=
1504
+ #0 'multiresult :=
1505
+ { multiresult not
1506
+ t empty.or.unknown not
1507
+ and
1508
+ }
1509
+ { t #1 #1 substring$
1510
+ duplicate$ "-" =
1511
+ swap$ duplicate$ "," =
1512
+ swap$ "+" =
1513
+ or or
1514
+ { #1 'multiresult := }
1515
+ { t #2 global.max$ substring$ 't := }
1516
+ if$
1517
+ }
1518
+ while$
1519
+ multiresult
1520
+ }
1521
+
1522
+ FUNCTION { format.pages }
1523
+ {
1524
+ pages empty.or.unknown
1525
+ { "" }
1526
+ { "\bibinfo{pages}{"
1527
+ pages multi.page.check
1528
+ { pages n.dashify } % gnp - removed () % jtb: removed pp.
1529
+ { pages }
1530
+ if$
1531
+ * "}" *
1532
+ }
1533
+ if$
1534
+ }
1535
+
1536
+ FUNCTION { format.pages.check.without.articleno }
1537
+ { %% format pages field only if articleno is absent
1538
+ %% Stack out: pages-specification
1539
+ numpages missing$ pages missing$ and
1540
+ { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
1541
+ { }
1542
+ if$
1543
+
1544
+ articleno empty.or.unknown
1545
+ {
1546
+ pages missing$
1547
+ { numpages }
1548
+ { format.pages }
1549
+ if$
1550
+ }
1551
+ { "" }
1552
+ if$
1553
+ }
1554
+
1555
+ FUNCTION { format.pages.check }
1556
+ {
1557
+ pages empty.or.unknown
1558
+ { "page numbers missing in " cite$ * warning$ "" }
1559
+ { pages n.dashify }
1560
+ if$
1561
+ }
1562
+
1563
+ FUNCTION { format.bookpages }
1564
+ {
1565
+ bookpages empty.or.unknown
1566
+ { "" }
1567
+ { bookpages "book pages" tie.or.space.connect }
1568
+ if$
1569
+ }
1570
+
1571
+ FUNCTION { format.named.pages }
1572
+ {
1573
+ pages empty.or.unknown
1574
+ { "" }
1575
+ { format.pages "pages" tie.or.space.connect }
1576
+ if$
1577
+ }
1578
+
1579
+ %
1580
+ % Changed by Boris Veytsman, 2011-03-13
1581
+ % Now the word "pages" is printed even if
1582
+ % there field pages is not empty.
1583
+ %
1584
+
1585
+ FUNCTION { format.page.count }
1586
+ {
1587
+ page.count empty.or.unknown
1588
+ { "" }
1589
+ {
1590
+ articleno empty.or.unknown
1591
+ { "numpages field, but no articleno field, in " cite$ * warning$ }
1592
+ { }
1593
+ if$
1594
+ "\bibinfo{numpages}{" page.count * "}~pages" *
1595
+ }
1596
+ if$
1597
+ }
1598
+
1599
+ FUNCTION { format.articleno.numpages }
1600
+ {
1601
+ %% There are seven possible outputs, depending on which fields are set.
1602
+ %%
1603
+ %% These four are handled here:
1604
+ %%
1605
+ %% articleno, numpages, pages -> "Article articleno-value, numpages-value pages"
1606
+ %% articleno, numpages -> "Article articleno-value, numpages-value pages"
1607
+ %% articleno, pages -> "Article articleno-value, reduced-pages-value pages"
1608
+ %% articleno -> "Article articleno-value" and warn about missing numpages
1609
+ %%
1610
+ %% The remaining three have already been handled by
1611
+ %% format.pages.check.without.articleno:
1612
+ %%
1613
+ %% numpages, pages -> "pages-value"
1614
+ %% numpages -> "numpages-value"
1615
+ %% pages -> "pages-value"
1616
+
1617
+ articleno empty.or.unknown
1618
+ {
1619
+ numpages empty.or.unknown
1620
+ { }
1621
+ { "require articleno with numpages field in " cite$ * warning$ }
1622
+ if$
1623
+ ""
1624
+ }
1625
+ {
1626
+ numpages empty.or.unknown
1627
+ {
1628
+ pages empty.or.unknown
1629
+ {
1630
+ "require pages or numpages fields with articleno field in " cite$ * warning$
1631
+ "" 'page.count :=
1632
+ }
1633
+ { reduce.pages.to.page.count }
1634
+ if$
1635
+ }
1636
+ { numpages 'page.count := }
1637
+ if$
1638
+
1639
+ %% The Article number is now handled in format.day.month.year because
1640
+ %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
1641
+ %% over "Digital Libraries 12, 3 (July 2008), Article 5"
1642
+ %% format.articleno output
1643
+ format.page.count
1644
+ }
1645
+ if$
1646
+ }
1647
+
1648
+ FUNCTION { format.journal.volume.number.day.month.year }
1649
+ {
1650
+ % By Young (and Spencer)
1651
+ % GNP - fixed bugs with missing volume, number, and/or pages
1652
+ %
1653
+ % Format journal, volume, number, pages for article types.
1654
+ %
1655
+ journal empty.or.unknown
1656
+ { "no journal in " cite$ * warning$
1657
+ "" }
1658
+ % { journal emphasize.with.italic.correction }
1659
+ {
1660
+ "\bibinfo{journal}{"
1661
+ journal "Journal of the ACM" =
1662
+ { "{\it J. ACM}" }
1663
+ {
1664
+ journal "American Mathematical Society Translations" =
1665
+ { "{\it Amer. Math. Soc. Transl.}" }
1666
+ {
1667
+ journal "Bulletin of the American Mathematical Society" =
1668
+ { "{\it Bull. Amer. Math. Soc.}" }
1669
+ {
1670
+ journal "Proceedings of the American Mathematical Society" =
1671
+ { "{\it Proc. Amer. Math. Soc.}" }
1672
+ {
1673
+ journal "Transactions of the American Mathematical Society" =
1674
+ { "{\it Trans. Amer. Math. Soc.}" }
1675
+ {
1676
+ journal "Communications of the {ACM}" =
1677
+ { "{\it Commun. {ACM}}" }
1678
+ {
1679
+ journal "{ACM} Computing Surveys" =
1680
+ { "{\it Comput. Surveys}" }
1681
+ {
1682
+ journal "{ACM} Transactions on Mathematical Software" =
1683
+ { "{\it {ACM} Trans. Math. Software}" }
1684
+ {
1685
+ journal "{ACM} {SIGNUM} Newsletter" =
1686
+ { "{\it {ACM} {SIGNUM} Newslett.}" }
1687
+ {
1688
+ journal "American Journal of Sociology" =
1689
+ { "{\it Amer. J. Sociology}" }
1690
+ {
1691
+ journal "Journal of the American Statistical Association" =
1692
+ { "{\it J. Amer. Statist. Assoc.}" }
1693
+ {
1694
+ journal "Applied Mathematics and Computation" =
1695
+ { "{\it Appl. Math. Comput.}" }
1696
+ {
1697
+ journal "American Mathematical Monthly" =
1698
+ { "{\it Amer. Math. Monthly}" }
1699
+ {
1700
+ journal "British Journal of Mathematical and Statistical Psychology" =
1701
+ { "{\it Brit. J. Math. Statist. Psych.}" }
1702
+ {
1703
+ journal "Canadian Mathematical Bulletin" =
1704
+ { "{\it Canad. Math. Bull.}" }
1705
+ {
1706
+ journal "Journal of Computational and Applied Mathematics" =
1707
+ { "{\it J. Comput. Appl. Math.}" }
1708
+ {
1709
+ journal "Journal of Computational Physics" =
1710
+ { "{\it J. Comput. Phys.}" }
1711
+ {
1712
+ journal "Computers and Structures" =
1713
+ { "{\it Comput. \& Structures}" }
1714
+ {
1715
+ journal "The Computer Journal" =
1716
+ { "{\it Comput. J.}" }
1717
+ {
1718
+ journal "Journal of Computer and System Sciences" =
1719
+ { "{\it J. Comput. System Sci.}" }
1720
+ {
1721
+ journal "Contemporary Mathematics" =
1722
+ { "{\it Contemp. Math.}" }
1723
+ {
1724
+ journal "Crelle's Journal" =
1725
+ { "{\it Crelle's J.}" }
1726
+ {
1727
+ journal "Giornale di Mathematiche" =
1728
+ { "{\it Giorn. Mat.}" }
1729
+ {
1730
+ journal "{IEEE} Transactions on Computers" =
1731
+ { "{\it {IEEE} Trans. Comput.}" }
1732
+ {
1733
+ journal "{IEEE} Transactions on Automatic Control" =
1734
+ { "{\it {IEEE} Trans. Automat. Control}" }
1735
+ {
1736
+ journal "Proceedings of the {IEEE}" =
1737
+ { "{\it Proc. {IEEE}}" }
1738
+ {
1739
+ journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
1740
+ { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
1741
+ {
1742
+ journal "{IMA} Journal of Numerical Analysis" =
1743
+ { "{\it {IMA} J. Numer. Anal.}" }
1744
+ {
1745
+ journal "Information Processing Letters" =
1746
+ { "{\it Inform. Process. Lett.}" }
1747
+ {
1748
+ journal "Journal of the Institute of Mathematics and its Applications" =
1749
+ { "{\it J. Inst. Math. Appl.}" }
1750
+ {
1751
+ journal "International Journal of Control" =
1752
+ { "{\it Internat. J. Control}" }
1753
+ {
1754
+ journal "International Journal for Numerical Methods in Engineering" =
1755
+ { "{\it Internat. J. Numer. Methods Engrg.}" }
1756
+ {
1757
+ journal "International Journal of Supercomputing Applications" =
1758
+ { "{\it Internat. J. Supercomputing Applic.}" }
1759
+ {
1760
+ journal "Journal of Research of the National Bureau of Standards" =
1761
+ { "{\it J. Res. Nat. Bur. Standards}" }
1762
+ {
1763
+ journal "Linear Algebra and its Applications" =
1764
+ { "{\it Linear Algebra Appl.}" }
1765
+ {
1766
+ journal "Journal of Mathematical Analysis and Applications" =
1767
+ { "{\it J. Math. Anal. Appl.}" }
1768
+ {
1769
+ journal "Mathematische Annalen" =
1770
+ { "{\it Math. Ann.}" }
1771
+ {
1772
+ journal "Journal of Mathematical Physics" =
1773
+ { "{\it J. Math. Phys.}" }
1774
+ {
1775
+ journal "Mathematics of Computation" =
1776
+ { "{\it Math. Comp.}" }
1777
+ {
1778
+ journal "Mathematica Scandinavica" =
1779
+ { "{\it Math. Scand.}" }
1780
+ {
1781
+ journal "Mathematical Tables and Other Aids to Computation" =
1782
+ { "{\it Math. Tables Aids Comput.}" }
1783
+ {
1784
+ journal "Numerische Mathematik" =
1785
+ { "{\it Numer. Math.}" }
1786
+ {
1787
+ journal "Pacific Journal of Mathematics" =
1788
+ { "{\it Pacific J. Math.}" }
1789
+ {
1790
+ journal "Journal of Parallel and Distributed Computing" =
1791
+ { "{\it J. Parallel and Distrib. Comput.}" }
1792
+ {
1793
+ journal "Parallel Computing" =
1794
+ { "{\it Parallel Comput.}" }
1795
+ {
1796
+ journal "Philosophical Magazine" =
1797
+ { "{\it Philos. Mag.}" }
1798
+ {
1799
+ journal "Proceedings of the National Academy of Sciences of the USA" =
1800
+ { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
1801
+ {
1802
+ journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
1803
+ { "{\it Quart. J. Math. Oxford Ser. (2)}" }
1804
+ {
1805
+ journal "Quarterly of Applied Mathematics" =
1806
+ { "{\it Quart. Appl. Math.}" }
1807
+ {
1808
+ journal "Review of the International Statisical Institute" =
1809
+ { "{\it Rev. Inst. Internat. Statist.}" }
1810
+ {
1811
+ journal "Journal of the Society for Industrial and Applied Mathematics" =
1812
+ { "{\it J. Soc. Indust. Appl. Math.}" }
1813
+ {
1814
+ journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
1815
+ { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
1816
+ {
1817
+ journal "{SIAM} Journal on Algebraic and Discrete Methods" =
1818
+ { "{\it {SIAM} J. Algebraic Discrete Methods}" }
1819
+ {
1820
+ journal "{SIAM} Journal on Applied Mathematics" =
1821
+ { "{\it {SIAM} J. Appl. Math.}" }
1822
+ {
1823
+ journal "{SIAM} Journal on Computing" =
1824
+ { "{\it {SIAM} J. Comput.}" }
1825
+ {
1826
+ journal "{SIAM} Journal on Matrix Analysis and Applications" =
1827
+ { "{\it {SIAM} J. Matrix Anal. Appl.}" }
1828
+ {
1829
+ journal "{SIAM} Journal on Numerical Analysis" =
1830
+ { "{\it {SIAM} J. Numer. Anal.}" }
1831
+ {
1832
+ journal "{SIAM} Review" =
1833
+ { "{\it {SIAM} Rev.}" }
1834
+ {
1835
+ journal "{SIAM} Journal on Scientific and Statistical Computing" =
1836
+ { "{\it {SIAM} J. Sci. Statist. Comput.}" }
1837
+ {
1838
+ journal "Software Practice and Experience" =
1839
+ { "{\it Software Prac. Experience}" }
1840
+ {
1841
+ journal "Statistical Science" =
1842
+ { "{\it Statist. Sci.}" }
1843
+ {
1844
+ journal "{USSR} Computational Mathematics and Mathematical Physics" =
1845
+ { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
1846
+ {
1847
+ journal "Journal of {VLSI} and Computer Systems" =
1848
+ { "{\it J. {VLSI} Comput. Syst.}" }
1849
+ {
1850
+ journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
1851
+ { "{\it Z. Angew. Math. Mech.}" }
1852
+ {
1853
+ journal "Zeitschrift fur Angewandte Mathematik und Physik" =
1854
+ { "{\it Z. Angew. Math. Phys.}" }
1855
+ {
1856
+ journal "ACM Computing Surveys" =
1857
+ { "{\it Comput. Surveys}" }
1858
+ {
1859
+ journal "ACM Transactions on Mathematical Software" =
1860
+ { "{\it ACM Trans. Math. Software}" }
1861
+ {
1862
+ journal "ACM {SIGNUM} Newsletter" =
1863
+ { "{\it ACM {SIGNUM} Newslett.}" }
1864
+ {
1865
+ journal "IEEE Transactions on Computers" =
1866
+ { "{\it IEEE Trans. Comput.}" }
1867
+ {
1868
+ journal "IEEE Transactions on Automatic Control" =
1869
+ { "{\it IEEE Trans. Automat. Control}" }
1870
+ {
1871
+ journal "Proceedings of the IEEE" =
1872
+ { "{\it Proc. IEEE}" }
1873
+ {
1874
+ journal "IEEE Transactions on Aerospace and Electronic Systems" =
1875
+ { "{\it IEEE Trans. Aerospace Electron. Systems}" }
1876
+ {
1877
+ journal "IMA Journal of Numerical Analysis" =
1878
+ { "{\it IMA J. Numer. Anal.}" }
1879
+ {
1880
+ journal "SIAM Journal on Algebraic and Discrete Methods" =
1881
+ { "{\it SIAM J. Algebraic Discrete Methods}" }
1882
+ {
1883
+ journal "SIAM Journal on Applied Mathematics" =
1884
+ { "{\it SIAM J. Appl. Math.}" }
1885
+ {
1886
+ journal "SIAM Journal on Computing" =
1887
+ { "{\it SIAM J. Comput.}" }
1888
+ {
1889
+ journal "SIAM Journal on Matrix Analysis and Applications" =
1890
+ { "{\it SIAM J. Matrix Anal. Appl.}" }
1891
+ {
1892
+ journal "SIAM Journal on Numerical Analysis" =
1893
+ { "{\it SIAM J. Numer. Anal.}" }
1894
+ {
1895
+ journal "SIAM Review" =
1896
+ { "{\it SIAM Rev.}" }
1897
+ {
1898
+ journal "SIAM Journal on Scientific and Statistical Computing" =
1899
+ { "{\it SIAM J. Sci. Statist. Comput.}" }
1900
+ {
1901
+ journal "USSR Computational Mathematics and Mathematical Physics" =
1902
+ { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
1903
+ {
1904
+ journal "Journal of VLSI and Computer Systems" =
1905
+ { "{\it J. VLSI Comput. Syst.}" }
1906
+ {
1907
+ journal "Communications of the ACM" =
1908
+ { "{\it Commun. ACM}" }
1909
+ %% If no match with cases needing special handling, just output journal name
1910
+ { journal emphasize.with.italic.correction }
1911
+ if$
1912
+ }
1913
+ if$
1914
+ }
1915
+ if$
1916
+ }
1917
+ if$
1918
+ }
1919
+ if$
1920
+ }
1921
+ if$
1922
+ }
1923
+ if$
1924
+ }
1925
+ if$
1926
+ }
1927
+ if$
1928
+ }
1929
+ if$
1930
+ }
1931
+ if$
1932
+ }
1933
+ if$
1934
+ }
1935
+ if$
1936
+ }
1937
+ if$
1938
+ }
1939
+ if$
1940
+ }
1941
+ if$
1942
+ }
1943
+ if$
1944
+ }
1945
+ if$
1946
+ }
1947
+ if$
1948
+ }
1949
+ if$
1950
+ }
1951
+ if$
1952
+ }
1953
+ if$
1954
+ }
1955
+ if$
1956
+ }
1957
+ if$
1958
+ }
1959
+ if$
1960
+ }
1961
+ if$
1962
+ }
1963
+ if$
1964
+ }
1965
+ if$
1966
+ }
1967
+ if$
1968
+ }
1969
+ if$
1970
+ }
1971
+ if$
1972
+ }
1973
+ if$
1974
+ }
1975
+ if$
1976
+ }
1977
+ if$
1978
+ }
1979
+ if$
1980
+ }
1981
+ if$
1982
+ }
1983
+ if$
1984
+ }
1985
+ if$
1986
+ }
1987
+ if$
1988
+ }
1989
+ if$
1990
+ }
1991
+ if$
1992
+ }
1993
+ if$
1994
+ }
1995
+ if$
1996
+ }
1997
+ if$
1998
+ }
1999
+ if$
2000
+ }
2001
+ if$
2002
+ }
2003
+ if$
2004
+ }
2005
+ if$
2006
+ }
2007
+ if$
2008
+ }
2009
+ if$
2010
+ }
2011
+ if$
2012
+ }
2013
+ if$
2014
+ }
2015
+ if$
2016
+ }
2017
+ if$
2018
+ }
2019
+ if$
2020
+ }
2021
+ if$
2022
+ }
2023
+ if$
2024
+ }
2025
+ if$
2026
+ }
2027
+ if$
2028
+ }
2029
+ if$
2030
+ }
2031
+ if$
2032
+ }
2033
+ if$
2034
+ }
2035
+ if$
2036
+ }
2037
+ if$
2038
+ }
2039
+ if$
2040
+ }
2041
+ if$
2042
+ }
2043
+ if$
2044
+ }
2045
+ if$
2046
+ }
2047
+ if$
2048
+ }
2049
+ if$
2050
+ }
2051
+ if$
2052
+ }
2053
+ if$
2054
+ }
2055
+ if$
2056
+ }
2057
+ if$
2058
+ }
2059
+ if$
2060
+ }
2061
+ if$
2062
+ }
2063
+ if$
2064
+ }
2065
+ if$
2066
+ }
2067
+ if$
2068
+ }
2069
+ if$
2070
+ }
2071
+ if$
2072
+ }
2073
+ if$
2074
+ }
2075
+ if$
2076
+ * "}" *
2077
+ }
2078
+ if$
2079
+
2080
+ number empty.or.unknown
2081
+ {
2082
+ volume empty.or.unknown
2083
+ { "no number and no volume in " cite$ * warning$ "" * }
2084
+ { " " * " \bibinfo{volume}{" * volume * "}" * }
2085
+ if$
2086
+ }
2087
+ {
2088
+ volume empty.or.unknown
2089
+ {
2090
+ "unusual to have number, but no volume, for " cite$ * warning$
2091
+ " \bibinfo{number}{" * number * "}" *
2092
+ }
2093
+ { " \bibinfo{volume}{" * volume * "}, \bibinfo{number}{" *
2094
+ number * "}" *}
2095
+ if$
2096
+ }
2097
+ if$
2098
+
2099
+ format.day.month.year *
2100
+ }
2101
+
2102
+ FUNCTION { format.chapter.pages }
2103
+ {
2104
+ chapter empty.or.unknown
2105
+ 'format.pages
2106
+ { type empty.or.unknown
2107
+ { "Chapter" } % gnp - changed to mixed case
2108
+ { type "t" change.case$ }
2109
+ if$
2110
+ chapter tie.or.space.connect
2111
+ pages empty.or.unknown
2112
+ {"page numbers missing in " cite$ * warning$} % gnp - added check
2113
+ { ", " * format.pages * }
2114
+ if$
2115
+ }
2116
+ if$
2117
+ }
2118
+
2119
+ FUNCTION { format.in.emphasize.booktitle }
2120
+ { % jtb: format for collections or proceedings not appearing in a journal
2121
+ booktitle empty.or.unknown
2122
+ { "" }
2123
+ { "In " format.emphasize.booktitle * }
2124
+ if$
2125
+ }
2126
+
2127
+ FUNCTION { format.in.booktitle }
2128
+ { % jtb: format for proceedings appearing in a journal
2129
+ booktitle empty.or.unknown
2130
+ { "" }
2131
+ { "In \bibinfo{booktitle}{" booktitle * "}" * }
2132
+ if$
2133
+ }
2134
+
2135
+ FUNCTION { format.in.ed.booktitle }
2136
+ {
2137
+ booktitle empty.or.unknown
2138
+ { "" }
2139
+ { editor empty.or.unknown
2140
+ { "In " format.emphasize.booktitle * }
2141
+ % jtb: swapped editor location
2142
+ { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
2143
+ if$
2144
+ }
2145
+ if$
2146
+ }
2147
+
2148
+ FUNCTION { format.thesis.type }
2149
+ { % call with default type on stack top
2150
+ type empty.or.unknown
2151
+ 'skip$ % use default type
2152
+ {
2153
+ pop$ % discard default type
2154
+ % NO: it is silly to have to brace protect every degree type!: type "t" change.case$
2155
+ type
2156
+ }
2157
+ if$
2158
+ }
2159
+
2160
+ FUNCTION { format.tr.number }
2161
+ {
2162
+ "\bibinfo{type}{"
2163
+ type empty.or.unknown
2164
+ { "{T}echnical {R}eport" }
2165
+ 'type
2166
+ if$
2167
+ "}" * *
2168
+ number empty.or.unknown
2169
+ { "t" change.case$ }
2170
+ %% LOOKS BAD: { "." * number tie.or.space.connect }
2171
+ %% Prefer "Research report RJ687." to "Research report. RJ687."
2172
+ { number tie.or.space.connect }
2173
+ if$
2174
+ }
2175
+
2176
+ FUNCTION { format.advisor }
2177
+ {
2178
+ advisor empty.or.unknown
2179
+ { "" }
2180
+ { "Advisor(s) " advisor * }
2181
+ if$
2182
+ }
2183
+
2184
+ FUNCTION { format.article.crossref }
2185
+ { "See"
2186
+ "\citeN{" * crossref * "}" *
2187
+ }
2188
+
2189
+ FUNCTION { format.crossref.editor }
2190
+ {
2191
+ editor #1 "{vv~}{ll}" format.name$
2192
+ editor num.names$ duplicate$
2193
+ #2 >
2194
+ { pop$ " et~al\mbox{.}" * } % jrh: avoid spacing problems
2195
+ { #2 <
2196
+ 'skip$
2197
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
2198
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
2199
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
2200
+ if$
2201
+ }
2202
+ if$
2203
+ }
2204
+ if$
2205
+ }
2206
+
2207
+ FUNCTION { format.book.crossref }
2208
+ {
2209
+ volume empty.or.unknown
2210
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
2211
+ "In "
2212
+ }
2213
+ { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
2214
+ " of " *
2215
+ }
2216
+ if$
2217
+ editor empty.or.unknown
2218
+ editor field.or.null author field.or.null =
2219
+ or
2220
+ { key empty.or.unknown
2221
+ { series empty.or.unknown
2222
+ { "need editor, key, or series for " cite$ * " to crossref " *
2223
+ crossref * warning$
2224
+ "" *
2225
+ }
2226
+ { "{\em " * series * "\/}" * }
2227
+ if$
2228
+ }
2229
+ { key * }
2230
+ if$
2231
+ }
2232
+ { format.crossref.editor * }
2233
+ if$
2234
+ " \citeN{" * crossref * "}" *
2235
+ }
2236
+
2237
+ FUNCTION { format.incoll.inproc.crossref }
2238
+ { "See"
2239
+ " \citeN{" * crossref * "}" *
2240
+ }
2241
+
2242
+ FUNCTION { format.lab.names }
2243
+ {
2244
+ % format.lab.names:
2245
+ %
2246
+ % determines "short" names for the abbreviated author information.
2247
+ % "Long" labels are created in calc.label, using the routine my.full.label
2248
+ % to format author and editor fields.
2249
+ %
2250
+ % There are 4 cases for labels. (n=3 in the example)
2251
+ % a) one author Foo
2252
+ % b) one to n Foo, Bar and Baz
2253
+ % c) use of "and others" Foo, Bar et al.
2254
+ % d) more than n Foo et al.
2255
+
2256
+ 's :=
2257
+ s num.names$ 'numnames :=
2258
+ numnames #2 > % change number to number of others allowed before
2259
+ % forcing "et al".
2260
+ { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
2261
+ {
2262
+ numnames #1 - 'namesleft :=
2263
+ #2 'nameptr :=
2264
+ s #1 "{vv~}{ll}" format.name$
2265
+ { namesleft #0 > }
2266
+ { nameptr numnames =
2267
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
2268
+ { " et~al\mbox{.}" * } % jrh: avoid spacing problems
2269
+ { " and " * s nameptr "{vv~}{ll}" format.name$ * }
2270
+ if$
2271
+ }
2272
+ { ", " * s nameptr "{vv~}{ll}" format.name$ * }
2273
+ if$
2274
+ nameptr #1 + 'nameptr :=
2275
+ namesleft #1 - 'namesleft :=
2276
+ }
2277
+ while$
2278
+ }
2279
+ if$
2280
+ }
2281
+
2282
+ FUNCTION { author.key.label }
2283
+ {
2284
+ author empty.or.unknown
2285
+ { key empty.or.unknown
2286
+ { "no key, author in " cite$ * warning$
2287
+ cite$ #1 #3 substring$ }
2288
+ 'key
2289
+ if$
2290
+ }
2291
+ { author format.lab.names }
2292
+ if$
2293
+ }
2294
+
2295
+ FUNCTION { author.key.organization.label }
2296
+ { % added - gnp. Provide label formatting by organization if author is null.
2297
+ author empty.or.unknown
2298
+ { organization empty.or.unknown
2299
+ { key empty.or.unknown
2300
+ { "no key, author or organization in " cite$ * warning$
2301
+ cite$ #1 #3 substring$ }
2302
+ 'key
2303
+ if$
2304
+ }
2305
+ { organization }
2306
+ if$
2307
+ }
2308
+ { author format.lab.names }
2309
+ if$
2310
+ }
2311
+
2312
+ FUNCTION { editor.key.organization.label }
2313
+ { % added - gnp. Provide label formatting by organization if editor is null.
2314
+ editor empty.or.unknown
2315
+ { organization empty.or.unknown
2316
+ { key empty.or.unknown
2317
+ { "no key, editor or organization in " cite$ * warning$
2318
+ cite$ #1 #3 substring$ }
2319
+ 'key
2320
+ if$
2321
+ }
2322
+ { organization }
2323
+ if$
2324
+ }
2325
+ { editor format.lab.names }
2326
+ if$
2327
+ }
2328
+
2329
+ FUNCTION { author.editor.key.label }
2330
+ {
2331
+ author empty.or.unknown
2332
+ { editor empty.or.unknown
2333
+ { key empty.or.unknown
2334
+ { "no key, author, or editor in " cite$ * warning$
2335
+ cite$ #1 #3 substring$ }
2336
+ 'key
2337
+ if$
2338
+ }
2339
+ { editor format.lab.names }
2340
+ if$
2341
+ }
2342
+ { author format.lab.names }
2343
+ if$
2344
+ }
2345
+
2346
+ FUNCTION { calc.label }
2347
+ {
2348
+ % Changed - GNP. See also author.organization.sort, editor.organization.sort
2349
+ % Form label for BibTeX entry. The classification of which fields are used
2350
+ % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
2351
+ % The change here from newapa is to also include organization as a
2352
+ % citation label if author or editor is missing.
2353
+
2354
+ type$ "book" =
2355
+ type$ "inbook" =
2356
+ or
2357
+ type$ "periodical" =
2358
+ or
2359
+ 'author.editor.key.label
2360
+ { type$ "proceedings" =
2361
+ 'editor.key.organization.label
2362
+ { type$ "manual" =
2363
+ 'author.key.organization.label
2364
+ 'author.key.label
2365
+ if$
2366
+ }
2367
+ if$
2368
+ }
2369
+ if$
2370
+
2371
+ author empty.or.unknown % generate the full label citation information.
2372
+ {
2373
+ editor empty.or.unknown
2374
+ {
2375
+ organization empty.or.unknown
2376
+ {
2377
+ key empty.or.unknown
2378
+ {
2379
+ "no author, editor, organization, or key in " cite$ * warning$
2380
+ "??"
2381
+ }
2382
+ { key }
2383
+ if$
2384
+ }
2385
+ { organization }
2386
+ if$
2387
+ }
2388
+ { editor my.full.label }
2389
+ if$
2390
+ }
2391
+ { author my.full.label }
2392
+ if$
2393
+
2394
+ % leave label on the stack, to be popped when required.
2395
+
2396
+ "}{" * swap$ * "}{" *
2397
+ % year field.or.null purify$ #-1 #4 substring$ *
2398
+ %
2399
+ % save the year for sort processing afterwards (adding a, b, c, etc.)
2400
+ %
2401
+ year field.or.null purify$ #-1 #4 substring$
2402
+ 'label.year :=
2403
+ }
2404
+
2405
+
2406
+ FUNCTION { output.bibitem }
2407
+ {
2408
+ newline$
2409
+ "\bibitem[\protect\citeauthoryear{" write$
2410
+ calc.label write$
2411
+ sort.year write$
2412
+ "}]%" writeln
2413
+ " {" write$
2414
+ cite$ write$
2415
+ "}" writeln
2416
+ ""
2417
+ before.all 'output.state :=
2418
+ }
2419
+
2420
+
2421
+ FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint }
2422
+ { % enter and return with stack empty
2423
+ %% We switch now from buffered output to output of complete lines, so
2424
+ %% that the Issue .. URL data have their own lines, and are less likely
2425
+ %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
2426
+ %% lines longer than 79 characters, backtracking to what it thinks is
2427
+ %% a break point in the string. Any such wrapping MUST be undone to
2428
+ %% prevent percent-newline from appearing in DOIs and URLs. The
2429
+ %% output data are intentionally wrapped in \showxxx{} macros at
2430
+ %% beginning of line, and that supply their own punctuation (if they
2431
+ %% are not defined to suppress output entirely), to make it easier for
2432
+ %% other software to recover them from .bbl files.
2433
+ %%
2434
+ %% It also makes it possible to later change the macro definitions
2435
+ %% to suppress particular output values, or alter their appearance.
2436
+ %%
2437
+ %% Note that it is possible for theses, technical reports, and
2438
+ %% manuals to have ISBNs, and anything that has an ISBN may also
2439
+ %% have an ISSN. When there are no values for these keys, there
2440
+ %% is no output generated for them here.
2441
+
2442
+ "\newblock" writeln
2443
+ after.block 'output.state :=
2444
+
2445
+ output.issue
2446
+ output.isbn
2447
+ output.coden % CODEN is functionally like ISSN, so output them sequentially
2448
+ output.issn
2449
+ output.lccn
2450
+ output.doi % DOI is ALWAYS last according to CrossRef DOI documentation
2451
+ output.eprint
2452
+ output.url % but ACM wants URL last
2453
+ }
2454
+
2455
+ FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note }
2456
+ { % enter with stack empty, return with empty string on stack
2457
+ output.issue.doi.coden.isxn.lccn.url.eprint
2458
+ note empty.or.unknown
2459
+ { }
2460
+ {
2461
+ "\newblock" writeln
2462
+ output.note
2463
+ }
2464
+ if$
2465
+ ""
2466
+ }
2467
+
2468
+ FUNCTION { output.issue.doi.coden.isxn.lccn.url.eprint.note.check }
2469
+ { % enter with stack empty, return with empty string on stack
2470
+ output.issue.doi.coden.isxn.lccn.url.eprint
2471
+ note empty.or.unknown
2472
+ { }
2473
+ {
2474
+ "\newblock" writeln
2475
+ output.note.check
2476
+ }
2477
+ if$
2478
+ ""
2479
+ }
2480
+
2481
+ FUNCTION { article }
2482
+ {
2483
+ output.bibitem
2484
+
2485
+ author empty.or.unknown
2486
+ {
2487
+ editor empty.or.unknown
2488
+ { "neither author and editor supplied for " cite$ * warning$ }
2489
+ { format.editors "editor" output.check }
2490
+ if$
2491
+ }
2492
+ { format.authors "author" output.check }
2493
+ if$
2494
+
2495
+ author format.no.key output % added
2496
+ output.year.check % added
2497
+ new.block
2498
+ format.articletitle "title" output.check
2499
+ new.block
2500
+ howpublished empty.or.unknown
2501
+ { }
2502
+ { "\bibinfo{howpublished}{" howpublished "}" * * output }
2503
+ if$
2504
+
2505
+ crossref missing$
2506
+ { format.journal.volume.number.day.month.year }
2507
+ {
2508
+ "cross reference in @Article{...} is unusual" warning$
2509
+ format.article.crossref output.nonnull
2510
+ }
2511
+ if$
2512
+ output
2513
+
2514
+ format.pages.check.without.articleno output
2515
+ format.articleno.numpages output
2516
+ fin.block
2517
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2518
+ fin.entry
2519
+ }
2520
+
2521
+ FUNCTION { book }
2522
+ {
2523
+ output.bibitem
2524
+ author empty.or.unknown
2525
+ { format.editors "author and editor" output.check }
2526
+ { format.authors output.nonnull
2527
+ crossref missing$
2528
+ { "author and editor" editor either.or.check }
2529
+ 'skip$
2530
+ if$
2531
+ }
2532
+ if$
2533
+ output.year.check % added
2534
+ new.block
2535
+ format.btitle "title" output.check
2536
+ crossref missing$
2537
+ { new.sentence % jtb: start a new sentence for series/volume
2538
+ format.bvolume output
2539
+ new.block
2540
+ format.number.series output
2541
+ new.sentence
2542
+ publisher "publisher" bibinfo.output.check
2543
+ address "address" bibinfo.output.check % jtb: require address
2544
+ fin.sentence
2545
+ pages empty.or.unknown
2546
+ { format.bookpages } % use bookpages when pages empty
2547
+ { format.pages.check "pages" tie.or.space.connect }
2548
+ if$
2549
+ output
2550
+ }
2551
+ { new.block
2552
+ format.book.crossref output.nonnull
2553
+ }
2554
+ if$
2555
+ fin.block
2556
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2557
+ fin.entry
2558
+ }
2559
+
2560
+ FUNCTION { booklet }
2561
+ {
2562
+ output.bibitem
2563
+ format.authors output
2564
+ author format.key output % added
2565
+ output.year.check % added
2566
+ new.block
2567
+ format.title "title" output.check
2568
+ new.block
2569
+ howpublished empty.or.unknown
2570
+ { }
2571
+ { "\bibinfo{howpublished}{" howpublished "}" * * output }
2572
+ if$
2573
+ address output
2574
+ fin.block
2575
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2576
+ fin.entry
2577
+ }
2578
+
2579
+ FUNCTION { inbook }
2580
+ {
2581
+ output.bibitem
2582
+ author empty.or.unknown
2583
+ { format.editors
2584
+ "author and editor" output.check
2585
+ }
2586
+ { format.authors output.nonnull
2587
+ crossref missing$
2588
+ { "author and editor" editor either.or.check }
2589
+ 'skip$
2590
+ if$
2591
+ }
2592
+ if$
2593
+ output.year.check % added
2594
+ new.block
2595
+ format.btitle "title" output.check
2596
+ crossref missing$
2597
+ { new.sentence % jtb: start a new sentence for series/volume
2598
+ format.bvolume output
2599
+ new.block
2600
+ format.number.series output
2601
+ new.sentence
2602
+ publisher "publisher" bibinfo.output.check
2603
+ address "address" bibinfo.output.check % jtb: require address
2604
+ format.bookpages output
2605
+ format.chapter.pages
2606
+ "chapter and pages" output.check % jtb: moved from before publisher
2607
+ }
2608
+ {
2609
+ format.bookpages output
2610
+ format.chapter.pages "chapter and pages" output.check
2611
+ new.block
2612
+ format.book.crossref output.nonnull
2613
+ }
2614
+ if$
2615
+ fin.block
2616
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2617
+ fin.entry
2618
+ }
2619
+
2620
+ FUNCTION { incollection }
2621
+ {
2622
+ output.bibitem
2623
+ format.authors "author" output.check
2624
+ author format.key output % added
2625
+ output.year.check % added
2626
+ new.block
2627
+ format.articletitle "title" output.check
2628
+ new.block
2629
+ crossref missing$
2630
+ { format.in.ed.booktitle "booktitle" output.check
2631
+ new.sentence % jtb: start a new sentence for series/volume
2632
+ format.bvolume output
2633
+ format.number.series output
2634
+ new.sentence
2635
+ publisher "publisher" bibinfo.output.check
2636
+ address "address" bibinfo.output.check % jtb: require address
2637
+ format.bookpages output
2638
+ format.chapter.pages output % gnp - was special.output.nonnull
2639
+ % left out comma before page numbers
2640
+ % jtb: moved from before publisher
2641
+ }
2642
+ {
2643
+ format.incoll.inproc.crossref output.nonnull
2644
+ format.chapter.pages output
2645
+ }
2646
+ if$
2647
+ fin.block
2648
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2649
+ fin.entry
2650
+ }
2651
+
2652
+ FUNCTION { inproceedings }
2653
+ {
2654
+ output.bibitem
2655
+ format.authors "author" output.check
2656
+ author format.key output % added
2657
+ output.year.check % added
2658
+ new.block
2659
+ format.articletitle "title" output.check
2660
+ howpublished empty.or.unknown
2661
+ { }
2662
+ { "\bibinfo{howpublished}{" howpublished "}" * * output.dot.space }
2663
+ if$
2664
+ crossref missing$
2665
+ {
2666
+ journal missing$ % jtb: proceedings appearing in journals
2667
+ { format.in.emphasize.booktitle format.city "booktitle" output.check.dot.space
2668
+ format.series output.removenospace
2669
+ format.editors.fml output % BV 2011/09/27 Moved dot to comma
2670
+ format.bvolume.noseries output
2671
+ new.sentence
2672
+ organization output
2673
+ publisher "publisher" bibinfo.output.check % jtb: require publisher (?)
2674
+ address "address" bibinfo.output.check % jtb: require address
2675
+ format.bookpages output
2676
+ }
2677
+ {
2678
+ format.in.booktitle format.city "booktitle" output.check
2679
+ format.editors.fml output
2680
+ new.sentence
2681
+ format.journal.volume.number.day.month.year output
2682
+ }
2683
+ if$
2684
+ format.articleno output
2685
+ format.pages.check.without.articleno output
2686
+ }
2687
+ {
2688
+ format.incoll.inproc.crossref output.nonnull
2689
+ format.articleno output
2690
+ format.pages.check.without.articleno output
2691
+ }
2692
+ if$
2693
+ format.articleno.numpages output
2694
+ fin.block
2695
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2696
+ fin.entry
2697
+ }
2698
+
2699
+ FUNCTION { conference } { inproceedings }
2700
+
2701
+ FUNCTION { manual }
2702
+ {
2703
+ output.bibitem
2704
+ author empty.or.unknown
2705
+ { editor empty.or.unknown
2706
+ { organization "organization" output.check
2707
+ organization format.key output } % if all else fails, use key
2708
+ { format.editors "author and editor" output.check }
2709
+ if$
2710
+ }
2711
+ { format.authors output.nonnull }
2712
+ if$
2713
+ output.year.check % added
2714
+ new.block
2715
+ format.btitle "title" output.check
2716
+ organization address new.block.checkb
2717
+ % jtb: back to normal style: organization, address
2718
+ organization "organization" output.check
2719
+ address output
2720
+ fin.block
2721
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2722
+ fin.entry
2723
+ }
2724
+
2725
+ FUNCTION { mastersthesis }
2726
+ {
2727
+ output.bibitem
2728
+ format.authors "author" output.check
2729
+ author format.key output % added
2730
+ output.year.check % added
2731
+ new.block
2732
+ format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
2733
+ new.block
2734
+ "\bibinfo{thesistype}{Master's\ thesis}" format.thesis.type output
2735
+ new.sentence
2736
+ school "school" bibinfo.output.check
2737
+ address empty.or.unknown
2738
+ { }
2739
+ { "\bibinfo{address}{" address * "}" * output }
2740
+ if$
2741
+ new.block
2742
+ format.advisor output
2743
+ fin.block
2744
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2745
+ fin.entry
2746
+ }
2747
+
2748
+ FUNCTION { misc }
2749
+ {
2750
+ output.bibitem
2751
+ format.authors output
2752
+ author format.key output % added
2753
+ output.year.check % added
2754
+ title howpublished new.block.checkb
2755
+ format.title output
2756
+ new.block
2757
+ howpublished empty.or.unknown
2758
+ { }
2759
+ { "\bibinfo{howpublished}{" howpublished "}" * * output }
2760
+ if$
2761
+ "" output.nonnull.dot.space
2762
+ output.day.month.year
2763
+ fin.block
2764
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2765
+ fin.entry
2766
+ }
2767
+
2768
+ FUNCTION { online } { misc }
2769
+
2770
+ FUNCTION { game } { misc }
2771
+
2772
+
2773
+ FUNCTION { phdthesis }
2774
+ {
2775
+ output.bibitem
2776
+ format.authors "author" output.check
2777
+ author format.key output % added
2778
+ output.year.check % added
2779
+ new.block
2780
+ format.title emphasize "title" output.check % NB: ACM style requires emphasized thesis title
2781
+ new.block
2782
+ "\bibinfo{thesistype}{Ph.D. Dissertation}" format.thesis.type output
2783
+ new.sentence
2784
+ school "school" bibinfo.output.check
2785
+ address empty.or.unknown
2786
+ { }
2787
+ { "\bibinfo{address}{" address * "}" * output }
2788
+ if$
2789
+ new.block
2790
+ format.advisor output
2791
+ fin.block
2792
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2793
+ fin.entry
2794
+ }
2795
+
2796
+ FUNCTION {format.date}
2797
+ { year empty.or.unknown
2798
+ { month empty.or.unknown
2799
+ {
2800
+ "" % output empty date if year/month both empty
2801
+ day empty.or.unknown
2802
+ { }
2803
+ { "there's a day but no month or year in " cite$ * warning$ }
2804
+ if$
2805
+ }
2806
+ { "there's a month but no year in " cite$ * warning$
2807
+ month
2808
+ day empty.or.unknown
2809
+ { }
2810
+ { " " * day * }
2811
+ if$
2812
+ }
2813
+ if$
2814
+ }
2815
+ { month empty.or.unknown
2816
+ {
2817
+ year % output only year if month empty
2818
+ day empty.or.unknown
2819
+ { }
2820
+ { "there's a day and year but no month in " cite$ * warning$ }
2821
+ if$
2822
+ }
2823
+ {
2824
+ month " " *
2825
+ day empty.or.unknown
2826
+ { }
2827
+ { day * ", " * }
2828
+ if$
2829
+ year *
2830
+ }
2831
+ if$
2832
+ }
2833
+ if$
2834
+ }
2835
+
2836
+ FUNCTION {new.block.checka}
2837
+ {
2838
+ empty.or.unknown
2839
+ 'skip$
2840
+ 'new.block
2841
+ if$
2842
+ }
2843
+
2844
+ FUNCTION { periodical }
2845
+ {
2846
+ output.bibitem
2847
+ editor empty.or.unknown
2848
+ { organization output }
2849
+ { format.editors output.nonnull }
2850
+ if$
2851
+ new.block
2852
+ output.year.check
2853
+ new.sentence
2854
+ format.articletitle "title" output.check
2855
+ format.journal.volume.number.day.month.year output
2856
+ fin.entry
2857
+ }
2858
+
2859
+ FUNCTION { proceedings }
2860
+ {
2861
+ output.bibitem
2862
+ editor empty.or.unknown
2863
+ { organization output
2864
+ organization format.key output } % gnp - changed from author format.key
2865
+ { format.editors output.nonnull }
2866
+ if$
2867
+ % author format.key output % gnp - removed (should be either
2868
+ % editor or organization
2869
+ output.year.check % added (newapa)
2870
+ new.block
2871
+ format.btitle format.city "title" output.check % jtb: added city
2872
+ new.sentence
2873
+ format.bvolume output
2874
+ format.number.series output
2875
+ new.sentence
2876
+ organization output
2877
+ % jtb: normal order: publisher, address
2878
+ publisher empty.or.unknown
2879
+ { }
2880
+ { "\bibinfo{publisher}{" publisher * "}" * output }
2881
+ if$
2882
+ address empty.or.unknown
2883
+ { }
2884
+ { "\bibinfo{address}{" address * "}" * output }
2885
+ if$
2886
+ fin.block
2887
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2888
+ fin.entry
2889
+ }
2890
+
2891
+ FUNCTION { techreport }
2892
+ {
2893
+ output.bibitem
2894
+ format.authors "author" output.check
2895
+ author format.key output % added
2896
+ output.year.check % added
2897
+ new.block
2898
+ format.btitle "title" output.check
2899
+ new.block
2900
+ % format.tr.number output % jtb: moved month ...
2901
+ format.tr.number output new.sentence % Gerry - need dot 2011/09/28
2902
+ institution "institution" bibinfo.output.check
2903
+ address empty.or.unknown
2904
+ { }
2905
+ { "\bibinfo{address}{" address "}" * * output }
2906
+ if$
2907
+ new.sentence
2908
+ format.named.pages output
2909
+ % ACM omits year at end in transactions style
2910
+ % format.day.month.year output.nonnull.dot.space % jtb: ... to here (no parens)
2911
+ fin.block
2912
+ output.issue.doi.coden.isxn.lccn.url.eprint.note
2913
+ fin.entry
2914
+ }
2915
+
2916
+ FUNCTION { unpublished }
2917
+ {
2918
+ output.bibitem
2919
+ format.authors
2920
+ "author" output.check
2921
+ author format.key output % added
2922
+ output.year.check % added
2923
+ new.block
2924
+ format.title "title" output.check
2925
+ fin.sentence
2926
+ output.day.month.year % UTAH
2927
+ fin.block
2928
+ output.issue.doi.coden.isxn.lccn.url.eprint.note.check
2929
+ fin.entry
2930
+ }
2931
+
2932
+ FUNCTION { default.type } { misc }
2933
+
2934
+ %%% ACM journal-style month definitions: full name if 1--5 letters, else
2935
+ %%% abbreviation of 3 or 4 characters and a dot
2936
+
2937
+ MACRO {jan} {"Jan."}
2938
+
2939
+ MACRO {feb} {"Feb."}
2940
+
2941
+ MACRO {mar} {"March"}
2942
+
2943
+ MACRO {apr} {"April"}
2944
+
2945
+ MACRO {may} {"May"}
2946
+
2947
+ MACRO {jun} {"June"}
2948
+
2949
+ MACRO {jul} {"July"}
2950
+
2951
+ MACRO {aug} {"Aug."}
2952
+
2953
+ MACRO {sep} {"Sept."}
2954
+
2955
+ MACRO {oct} {"Oct."}
2956
+
2957
+ MACRO {nov} {"Nov."}
2958
+
2959
+ MACRO {dec} {"Dec."}
2960
+
2961
+
2962
+ %%% ====================================================================
2963
+ %%% I M P O R T A N T C H A N G E
2964
+ %%%
2965
+ %%% For the 2009 release of the official acm-*.bst files, there are to
2966
+ %%% be NO predefined journal abbreviations in those style files.
2967
+ %%%
2968
+ %%% ACM may later develop an official list of mappings of full journal
2969
+ %%% names of commonly-cited journals to ACM-preferred abbreviations, but
2970
+ %%% authors should consider that use of any of these commented-out
2971
+ %%% abbreviations is DEPRECATED unless the BibTeX file itself provides
2972
+ %%% its own @String{name = "value"} definitions.
2973
+ %%%
2974
+ %%% Use of journal (and publisher and address) @String{...}
2975
+ %%% abbreviations, as opposed to explicit value assignments such as
2976
+ %%% journal = "J. ACM" and publisher = "IEEE", is preferred in
2977
+ %%% bibliographic databases, because it makes it easier for journal
2978
+ %%% production staff to replace those definitions by publisher-preferred
2979
+ %%% abbreviations when articles are typeset for publication.
2980
+ %%%
2981
+ %%% For historical reasons, and because some of these abbreviations are
2982
+ %%% used in other (non-ACM) bibliography style files, they are preserved
2983
+ %%% here in comments. Future releases of the acm*-.bst files are likely
2984
+ %%% to remove them entirely.
2985
+ %%% ====================================================================
2986
+ %%%
2987
+ %%% DEPRECATED: MACRO {acmcs} {"ACM Comput. Surv."} % original BibTeX
2988
+ %%% DEPRECATED:
2989
+ %%% DEPRECATED: MACRO {acmlett} {"ACM Lett. Program. Lang. Syst."}
2990
+ %%% DEPRECATED:
2991
+ %%% DEPRECATED: MACRO {acta} {"Acta Inf."} % original BibTeX
2992
+ %%% DEPRECATED:
2993
+ %%% DEPRECATED: MACRO {ai} {"Artificial Intelligence"}
2994
+ %%% DEPRECATED:
2995
+ %%% DEPRECATED: MACRO {al} {"Ada Lett."}
2996
+ %%% DEPRECATED:
2997
+ %%% DEPRECATED: MACRO {acr} {"Adv. Comput. Res."}
2998
+ %%% DEPRECATED:
2999
+ %%% DEPRECATED: MACRO {bit} {"Bit"}
3000
+ %%% DEPRECATED:
3001
+ %%% DEPRECATED: MACRO {cacm} {"Commun. ACM"} % original BibTeX
3002
+ %%% DEPRECATED:
3003
+ %%% DEPRECATED: MACRO {cj} {"Comput. J."}
3004
+ %%% DEPRECATED:
3005
+ %%% DEPRECATED: MACRO {cn} {"Comput. Netw."}
3006
+ %%% DEPRECATED:
3007
+ %%% DEPRECATED: MACRO {cl} {"Comput. Lang."}
3008
+ %%% DEPRECATED:
3009
+ %%% DEPRECATED: MACRO {ibmjrd} {"IBM J. Res. and Development"} % original BibTeX
3010
+ %%% DEPRECATED:
3011
+ %%% DEPRECATED: MACRO {ibmsj} {"IBM Systems Journal"} % original BibTeX
3012
+ %%% DEPRECATED:
3013
+ %%% DEPRECATED: MACRO {ict} {"Inf. Contr."}
3014
+ %%% DEPRECATED:
3015
+ %%% DEPRECATED: MACRO {ieebcs} {"IEE/BCS Softw. Eng. J."}
3016
+ %%% DEPRECATED:
3017
+ %%% DEPRECATED: MACRO {ieees} {"IEEE Softw."}
3018
+ %%% DEPRECATED:
3019
+ %%% DEPRECATED: MACRO {ieeese} {"IEEE Trans. Softw. Eng."} % original BibTeX
3020
+ %%% DEPRECATED:
3021
+ %%% DEPRECATED: MACRO {ieeetc} {"IEEE Trans. Comput."} % original BibTeX
3022
+ %%% DEPRECATED:
3023
+ %%% DEPRECATED: MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
3024
+ %%% DEPRECATED:
3025
+ %%% DEPRECATED: MACRO {ieeetpds} {"IEEE Trans. Parall. Distrib. Syst."}
3026
+ %%% DEPRECATED:
3027
+ %%% DEPRECATED: MACRO {ieeetit} {"IEEE Trans. Inf. Theory"}
3028
+ %%% DEPRECATED:
3029
+ %%% DEPRECATED: MACRO {ipl} {"Inf. Process. Lett."} % original BibTeX
3030
+ %%% DEPRECATED:
3031
+ %%% DEPRECATED: MACRO {icp} {"Inf. Comput."}
3032
+ %%% DEPRECATED:
3033
+ %%% DEPRECATED: MACRO {ist} {"Inf. Softw. Tech."}
3034
+ %%% DEPRECATED:
3035
+ %%% DEPRECATED: MACRO {ijsa} {"Int. J. Supercomput. Appl."}
3036
+ %%% DEPRECATED:
3037
+ %%% DEPRECATED: MACRO {ijpp} {"Int. J. Parallel Program."}
3038
+ %%% DEPRECATED:
3039
+ %%% DEPRECATED: MACRO {jacm} {"J. ACM"} % original BibTeX
3040
+ %%% DEPRECATED:
3041
+ %%% DEPRECATED: % MACRO {jcss} {"Journal of Computer and System Sciences"} % original BibTeX
3042
+ %%% DEPRECATED: MACRO {jcss} {"J. Comput. Syst. Sci."} % original BibTeX
3043
+ %%% DEPRECATED:
3044
+ %%% DEPRECATED: MACRO {jlp} {"J. Logic Program."}
3045
+ %%% DEPRECATED:
3046
+ %%% DEPRECATED: MACRO {jfp} {"J. Funct. Program."}
3047
+ %%% DEPRECATED:
3048
+ %%% DEPRECATED: MACRO {jsmrp} {"J. Softw. Maint. Res. Pract."}
3049
+ %%% DEPRECATED:
3050
+ %%% DEPRECATED: MACRO {jss} {"J. Syst. Softw."}
3051
+ %%% DEPRECATED:
3052
+ %%% DEPRECATED: MACRO {jlc} {"J. Logic and Comput."}
3053
+ %%% DEPRECATED:
3054
+ %%% DEPRECATED: MACRO {jlsc} {"J. Lisp Symb. Comput."}
3055
+ %%% DEPRECATED:
3056
+ %%% DEPRECATED: MACRO {lpls} {"Lett. Program. Lang. Syst."}
3057
+ %%% DEPRECATED:
3058
+ %%% DEPRECATED: MACRO {mor} {"Math. Oper. Res."}
3059
+ %%% DEPRECATED:
3060
+ %%% DEPRECATED: MACRO {mscs} {"Math. Struct. Comput. Sci."}
3061
+ %%% DEPRECATED:
3062
+ %%% DEPRECATED: MACRO {mst} {"Math. Syst. Theor."}
3063
+ %%% DEPRECATED:
3064
+ %%% DEPRECATED: MACRO {ngc} {"New Gen. Comput."}
3065
+ %%% DEPRECATED:
3066
+ %%% DEPRECATED: MACRO {scp} {"Sci. Comput. Program."} % original BibTeX
3067
+ %%% DEPRECATED:
3068
+ %%% DEPRECATED: MACRO {sicomp} {"SIAM J. Comput."} % original BibTeX
3069
+ %%% DEPRECATED:
3070
+ %%% DEPRECATED: MACRO {spe} {"Softw. Pract. Exper."}
3071
+ %%% DEPRECATED:
3072
+ %%% DEPRECATED: MACRO {tocs} {"ACM Trans. Comput. Syst."} % original BibTeX
3073
+ %%% DEPRECATED:
3074
+ %%% DEPRECATED: MACRO {tods} {"ACM Trans. Database Syst."} % original BibTeX
3075
+ %%% DEPRECATED:
3076
+ %%% DEPRECATED: MACRO {tog} {"ACM Trans. Graphics"} % original BibTeX
3077
+ %%% DEPRECATED:
3078
+ %%% DEPRECATED: MACRO {toms} {"ACM Trans. Math. Softw."} % original BibTeX
3079
+ %%% DEPRECATED:
3080
+ %%% DEPRECATED: MACRO {toois} {"ACM Trans. Office Inf. Syst."} % original BibTeX
3081
+ %%% DEPRECATED:
3082
+ %%% DEPRECATED: MACRO {toplas} {"ACM Trans. Program. Lang. Syst."} % original BibTeX
3083
+ %%% DEPRECATED:
3084
+ %%% DEPRECATED: MACRO {tcs} {"Theor. Comput. Sci."} % original BibTeX
3085
+ %%% DEPRECATED:
3086
+ %%% DEPRECATED: MACRO {tr} {"Tech. Rep."}
3087
+ %%% ====================================================================
3088
+
3089
+ READ
3090
+
3091
+ FUNCTION { sortify }
3092
+ {
3093
+ purify$
3094
+ "l" change.case$
3095
+ }
3096
+
3097
+ FUNCTION { chop.word }
3098
+ {
3099
+ 's :=
3100
+ 'len :=
3101
+ s #1 len substring$ =
3102
+ { s len #1 + global.max$ substring$ }
3103
+ 's
3104
+ if$
3105
+ }
3106
+
3107
+ FUNCTION { sort.format.names }
3108
+ {
3109
+ 's :=
3110
+ #1 'nameptr :=
3111
+ ""
3112
+ s num.names$ 'numnames :=
3113
+ numnames 'namesleft :=
3114
+ { namesleft #0 > }
3115
+ { nameptr #1 >
3116
+ { " " * }
3117
+ 'skip$
3118
+ if$
3119
+ % s nameptr "{ff{ } }{ll{ }}{ vv{ }}{ jj{ }}" format.name$ 't :=
3120
+ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't :=
3121
+ nameptr numnames = t "others" = and
3122
+ { " et~al" * }
3123
+ { t sortify * }
3124
+ if$
3125
+ nameptr #1 + 'nameptr :=
3126
+ namesleft #1 - 'namesleft :=
3127
+ }
3128
+ while$
3129
+ }
3130
+
3131
+ FUNCTION { sort.format.title }
3132
+ {
3133
+ 't :=
3134
+ "A " #2
3135
+ "An " #3
3136
+ "The " #4 t chop.word
3137
+ chop.word
3138
+ chop.word
3139
+ sortify
3140
+ #1 global.max$ substring$
3141
+ }
3142
+
3143
+ FUNCTION { author.sort }
3144
+ {
3145
+ author empty.or.unknown
3146
+ { key empty.or.unknown
3147
+ { "to sort, need author or key in " cite$ * warning$
3148
+ "" }
3149
+ { key sortify }
3150
+ if$
3151
+ }
3152
+ { author sort.format.names }
3153
+ if$
3154
+ }
3155
+
3156
+ FUNCTION { author.editor.sort }
3157
+ {
3158
+ author empty.or.unknown
3159
+ {
3160
+ editor empty.or.unknown
3161
+ {
3162
+ key empty.or.unknown
3163
+ { "to sort, need author, editor, or key in " cite$ * warning$
3164
+ ""
3165
+ }
3166
+ { key sortify }
3167
+ if$
3168
+ }
3169
+ { editor sort.format.names }
3170
+ if$
3171
+ }
3172
+ { author sort.format.names }
3173
+ if$
3174
+ }
3175
+
3176
+ FUNCTION { author.organization.sort }
3177
+ {
3178
+ % added - GNP. Stack author or organization for sorting (from alpha.bst).
3179
+ % Unlike alpha.bst, we need entire names, not abbreviations
3180
+
3181
+ author empty.or.unknown
3182
+ { organization empty.or.unknown
3183
+ { key empty.or.unknown
3184
+ { "to sort, need author, organization, or key in " cite$ * warning$
3185
+ ""
3186
+ }
3187
+ { key sortify }
3188
+ if$
3189
+ }
3190
+ { organization sortify }
3191
+ if$
3192
+ }
3193
+ { author sort.format.names }
3194
+ if$
3195
+ }
3196
+
3197
+ FUNCTION { editor.organization.sort }
3198
+ {
3199
+ % added - GNP. Stack editor or organization for sorting (from alpha.bst).
3200
+ % Unlike alpha.bst, we need entire names, not abbreviations
3201
+
3202
+ editor empty.or.unknown
3203
+ { organization empty.or.unknown
3204
+ { key empty.or.unknown
3205
+ { "to sort, need editor, organization, or key in " cite$ * warning$
3206
+ ""
3207
+ }
3208
+ { key sortify }
3209
+ if$
3210
+ }
3211
+ { organization sortify }
3212
+ if$
3213
+ }
3214
+ { editor sort.format.names }
3215
+ if$
3216
+ }
3217
+
3218
+ FUNCTION { presort }
3219
+ {
3220
+ % Presort creates the bibentry's label via a call to calc.label, and then
3221
+ % sorts the entries based on entry type. Chicago.bst adds support for
3222
+ % including organizations as the sort key; the following is stolen from
3223
+ % alpha.bst.
3224
+
3225
+ calc.label sortify % recalculate bibitem label
3226
+ year field.or.null purify$ #-1 #4 substring$ * % add year
3227
+ " "
3228
+ *
3229
+ type$ "book" =
3230
+ type$ "inbook" =
3231
+ or
3232
+ 'author.editor.sort
3233
+ { type$ "proceedings" =
3234
+ 'editor.organization.sort
3235
+ { type$ "manual" =
3236
+ 'author.organization.sort
3237
+ 'author.sort
3238
+ if$
3239
+ }
3240
+ if$
3241
+ }
3242
+ if$
3243
+ #1 entry.max$ substring$ % added for newapa
3244
+ 'sort.label := % added for newapa
3245
+ sort.label % added for newapa
3246
+ *
3247
+ " "
3248
+ *
3249
+ title field.or.null
3250
+ sort.format.title
3251
+ *
3252
+ #1 entry.max$ substring$
3253
+ 'sort.key$ :=
3254
+ }
3255
+
3256
+ ITERATE { presort }
3257
+
3258
+ SORT % by label, year, author/editor, title
3259
+
3260
+ FUNCTION { initialize.extra.label.stuff }
3261
+ { #0 int.to.chr$ 'last.label :=
3262
+ "" 'next.extra :=
3263
+ #0 'last.extra.num :=
3264
+ }
3265
+
3266
+ FUNCTION { forward.pass }
3267
+ {
3268
+ % Pass through all entries, comparing current entry to last one.
3269
+ % Need to concatenate year to the stack (done by calc.label) to determine
3270
+ % if two entries are the same (see presort)
3271
+
3272
+ last.label
3273
+ % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
3274
+ % NEW:
3275
+ author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
3276
+ #1 entry.max$ substring$ = % are they equal?
3277
+ { last.extra.num #1 + 'last.extra.num :=
3278
+ last.extra.num int.to.chr$ 'extra.label :=
3279
+ }
3280
+ { "a" chr.to.int$ 'last.extra.num :=
3281
+ "" 'extra.label :=
3282
+ % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
3283
+ % NEW:
3284
+ author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
3285
+ #1 entry.max$ substring$ 'last.label := % assign to last.label
3286
+ }
3287
+ if$
3288
+ }
3289
+
3290
+ FUNCTION { reverse.pass }
3291
+ {
3292
+ next.extra "b" =
3293
+ { "a" 'extra.label := }
3294
+ 'skip$
3295
+ if$
3296
+ label.year extra.label * 'sort.year :=
3297
+ extra.label 'next.extra :=
3298
+ }
3299
+
3300
+ EXECUTE {initialize.extra.label.stuff}
3301
+
3302
+ ITERATE {forward.pass}
3303
+
3304
+ REVERSE {reverse.pass}
3305
+
3306
+ FUNCTION { bib.sort.order }
3307
+ {
3308
+ sort.label
3309
+ " "
3310
+ *
3311
+ year field.or.null sortify
3312
+ *
3313
+ " "
3314
+ *
3315
+ title field.or.null
3316
+ sort.format.title
3317
+ *
3318
+ #1 entry.max$ substring$
3319
+ 'sort.key$ :=
3320
+ }
3321
+
3322
+ ITERATE { bib.sort.order }
3323
+
3324
+ SORT % by sort.label, year, title --- giving final bib. order.
3325
+
3326
+ FUNCTION { begin.bib }
3327
+ {
3328
+ %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
3329
+ %% Set to #1 to show both 10-digit and 13-digit ISBNs.
3330
+ #1 'show-isbn-10-and-13 :=
3331
+
3332
+ "%%% -*-BibTeX-*-" writeln
3333
+ "%%% Do NOT edit. File created by BibTeX with style" writeln
3334
+ "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
3335
+ "" writeln
3336
+
3337
+ preamble$ empty.or.unknown
3338
+ 'skip$
3339
+ { preamble$ writeln }
3340
+ if$
3341
+ "\begin{thebibliography}{00}" writeln
3342
+ "" writeln
3343
+ "%%% ====================================================================" writeln
3344
+ "%%% NOTE TO THE USER: you can override these defaults by providing" writeln
3345
+ "%%% customized versions of any of these macros before the \bibliography" writeln
3346
+ "%%% command. Each of them MUST provide its own final punctuation," writeln
3347
+ "%%% except for \shownote{}, \showDOI{}, and \showURL{}. The latter two" writeln
3348
+ "%%% do not use final punctuation, in order to avoid confusing it with" writeln
3349
+ "%%% the Web address." writeln
3350
+ "%%%" writeln
3351
+ "%%% To suppress output of a particular field, define its macro to expand" writeln
3352
+ "%%% to an empty string, or better, \unskip, like this:" writeln
3353
+ "%%%" writeln
3354
+ "%%% \newcommand{\showDOI}[1]{\unskip} % LaTeX syntax" writeln
3355
+ "%%%" writeln
3356
+ "%%% \def \showDOI #1{\unskip} % plain TeX syntax" writeln
3357
+ "%%%" writeln
3358
+ "%%% ====================================================================" writeln
3359
+ "" writeln
3360
+
3361
+ %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
3362
+ %% macro wrappers expand to \unskip, discarding their values and unwanted
3363
+ %% space.
3364
+ %%
3365
+ %% For other publications, prior definitions like these may be useful:
3366
+ %%
3367
+ %% Plain TeX:
3368
+ %% \def \showCODEN #1{CODEN #1.}
3369
+ %% \def \showISSN #1{ISSN #1.}
3370
+ %% \def \showLCCN #1{LCCN #1.}
3371
+ %%
3372
+ %% LaTeX:
3373
+ %% \newcommand{\showCODEN}[1]{CODEN #1.}
3374
+ %% \newcommand{\showISSN}[1]#1{ISSN #1.}
3375
+ %% \newcommand{\showLCCN}[1]{LCCN #1.}
3376
+
3377
+ "\ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi" writeln
3378
+ "\ifx \showDOI \undefined \def \showDOI #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
3379
+ % ACM styles omit ISBNs, but they can be included by suitable definitions of
3380
+ % \showISBNx and \showISBNxiii before the .bbl file is read
3381
+ "\ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi" writeln
3382
+ "\ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi" writeln
3383
+ "\ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi" writeln
3384
+ "\ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi" writeln
3385
+ "\ifx \shownote \undefined \def \shownote #1{#1} \fi" writeln % NB: final period supplied by add.period$ above
3386
+ "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi" writeln
3387
+ "\ifx \showURL \undefined \def \showURL #1{#1} \fi" writeln
3388
+ "% The following commands are used for tagged output and should be " writeln
3389
+ "% invisible to TeX" writeln
3390
+ "\providecommand\bibfield[2]{#2}" writeln
3391
+ "\providecommand\bibinfo[2]{#2}" writeln
3392
+ "\providecommand\natexlab[1]{#1}" writeln
3393
+ "\providecommand\showeprint[2][]{arXiv:#2}" writeln
3394
+ }
3395
+
3396
+ EXECUTE {begin.bib}
3397
+
3398
+ EXECUTE {init.state.consts}
3399
+
3400
+ ITERATE {call.type$}
3401
+
3402
+ FUNCTION { end.bib }
3403
+ {
3404
+ newline$
3405
+ "\end{thebibliography}"
3406
+ writeln
3407
+ }
3408
+
3409
+ EXECUTE {end.bib}
3410
+
3411
+
3412
+