### ==================================================================== ### @Awk-file{ ### author = "Nelson H. F. Beebe", ### version = "1.09", ### date = "05 October 1996", ### time = "16:18:44 MDT", ### filename = "comparch.awk", ### address = "Center for Scientific Computing ### Department of Mathematics ### University of Utah ### Salt Lake City, UT 84112 ### USA", ### telephone = "+1 801 581 5254", ### FAX = "+1 801 581 4148", ### checksum = "19038 1623 6426 73142", ### email = "beebe@math.utah.edu (Internet)", ### codetable = "ISO/ASCII", ### keywords = "ACM, bibliography, Computing Archives", ### supported = "yes", ### docstring = "Extract bibliographic data from an ASCII ### dump of the ACM Computing Archives CD ROM ### and output in BibTeX format. The output is ### sorted with "bibsort -byyear", but should ### ordinarily be postprocessed with bibclean ### to check for errors, and to wrap long ### lines. Lines output by this program are ### intentionally NOT wrapped, in order to keep ### one key = value assignment per line. ### ### Usage: ### nawk -f comparch.awk infile >outfile.bib ### ### The Computing Archives data contains errors ### and irregularities, not all of which can be ### handled here. In particular, several ### instances of loss of a line break in author ### lines have been noted with lines like ### ### Author/Editor of Entry: Sapiro, Steve Type: AUTHORSmith ### Robert J. Type: AUTHOR ### ### instead of ### ### Author/Editor of Entry: Sapiro, Steve Type: AUTHOR ### Smith, Robert J. Type: AUTHOR ### ### Lines of the form ### ### Additional Info: $12.95 (paper), ISBN 0-13-165167-6 ### ### instead of ### ### Price: $12.95 (paper) ### ISBN: 0-13-165167-6 ### ### are also erroneous. ### ### With line-at-a-time processing, these are ### inconvenient to correct, so instead, a ### warning message is issued if any such are ### found. ### ### The checksum field above contains a CRC-16 ### checksum as the first value, followed by the ### equivalent of the standard UNIX wc (word ### count) utility output of lines, words, and ### characters. This is produced by Robert ### Solovay's checksum utility.", ### } ### ==================================================================== BEGIN { initialize() } # Discard unwanted lines /^ *ACM COMPUTING ARCHIVE *$/ { next } /^ *COMPUTING REVIEWS TEXT *$/ { next } /^ *Copyright (c)[1-2][0-9][0-9][0-9] ACM Press *$/ { next } /^ *Author\/Editor of Entry:/ { set("author",$0) } /^ *Auth\/Ed of Whole Work:/ { set("editor",$0) } /^ *Additional Info:/ { set("info",$0) } /^ *ISBN:/ { set("ISBN",$0) } /^ *ISSN:/ { set("ISSN",$0) } /^ *In:/ { set_in($0) } /^ *General Term:/ { set("keywords",$0) } /^ *Page Range:/ { set("pages",$0) } /^ *Pages in Whole Work:/ { set("pages_whole",$0) } /^ *Price:/ { set("price",$0) } /^ *Proceedings Date:/ { set("proc_date",$0) } /^ *Proceedings Location:/ { set("proc_loc",$0) } /^ *Publisher:/ { set("publisher",$0) } /^ *Review [#]:/ { set("review",$0) } /^ *Proc. Source\/Series:/ { set("series",$0) } /^ *Series:/ { set("series",$0) } /^ *Subject:/ { set("subject",$0) } /^ *Title of Entry:/ { set("title",$0) } /^ *Publication Type:/ { set("type",$0) } /^ *Volume\/Issue:/ { set("volume_issue",$0) } /^ *Pub. Date:/ { set("date",$0) } /^ *Pub. Year:/ { set("date",$0) } /^ / { append_value() } END { print_entry() } function append_value( s,separator) { # Append continuation line data to the entry text of the last_key, # with special handling for different types of entries if (last_key) { s = trim($0) if (s) { if ( (last_key == "author") || (last_key == "editor") ) { separator = " and " s = fix_author_editor(s) } else if (last_key == "keywords") separator = "; " else if ((last_key == "subject") && (s ~ /[A-Z][.]/)) separator = " \\\\ " # ACM Subject classification else separator = " " gsub(/ +,/, ",", s) # remove space before punctuation gsub(/ +;/, ";", s) # remove space before punctuation gsub(/ +:/, ":", s) # remove space before punctuation if ((length(entry[last_key]) + length(separator) + length(s)) \ <= STD_MAX_TOKEN) entry[last_key] = entry[last_key] separator s else warning("Long value truncated, discarding: [" s "]") } } } function author_editor() { if ("author" in entry) return (entry["author"]) else if ("editor" in entry) return (entry["editor"]) else return ("Anonymous") } function capitalize(s, k,n,parts) { if (s ~ /[A-Z][A-Z]/) # Reduce HEARN, A. C. to Hearn, A. C. { # but leave McMahon, L. E. unchanged n = split(s,parts," ") for (k = 1; k <= n; ++k) s = (k == 1) ? \ capitalize_word(parts[k]) : \ s " " capitalize_word(parts[k]) } return (s) } function capitalize_word(s, k) { for (k = 1; k <= length(s); ++k) { if (isupper(substr(s,k,1)) && (k > 1) && isletter(substr(s,k-1,1))) s = substr(s,1,k-1) tolower(substr(s,k,1)) substr(s,k+1) } return (s) } function citation_tag( abbrev,k,n,parts,t,tag) { t = capitalize(author_editor()) gsub(/ and /, ",", t) # for uniform field separators split(t,parts,",") # careful: "De La Beaujardiere, Jean-M" has spaces in name gsub(/[^A-Za-z---']/,"",parts[1]) # strip non-(letters,apostrophe) tag = parts[1] ":" entry["year"] ":" n = split(entry["title"],parts," ") abbrev = "" for (k = 1; (k <= n) && (length(abbrev) < 3); ++k) { gsub(/[^A-Za-z0-9---']/,"",parts[k])# strip non-(letters,digits,apostrophe) if (isletter(substr(parts[k],1,1))) { parts[k] = tolower(parts[k]) if (!(parts[k] in ignore)) abbrev = abbrev toupper(substr(parts[k],1,1)) } } return (tag abbrev) } function clear_array(array, key) { for (key in array) delete array[key] } function dot_initials(s, k,n,parts,t) { n = split(s,parts," ") for (k = 1; k <= n; ++k) # Expand Hearn, A C to Hearn, A. C. { t = (k == 1) ? parts[k] : t " " parts[k] if (length(parts[k]) == 1) t = t "." } n = split(t,parts,".") for (k = 1; k <= n; ++k) # expand Hearn, A.C. to Hearn, A. C. { parts[k] = trim(parts[k]) t = ((k == 1) ? parts[k] : t " " parts[k]) ((k < n) ? "." : "") } gsub(/[.] -/,".-",t) # reduce Chang, C. -C. to Chang, C.-C. return (t) } function enquote(value) { gsub(/"/,"{\"}",value) # brace quotes gsub(/&/," and ",value) # replace ampersands gsub(/[ \t][ \t]+/," ",value) # eliminate redundant spaces if (value ~ /[0-9][$][0-9]/) gsub(/[$]/,"--",value) # June 7$10 -> June 7--10 else if (value ~ /[$][0-9]+/) gsub(/[$]/,"US\\$",value) # $27 -> US\$27 and $27.95 -> US\$27.95 return (value) } function entry_name() { return (entry["type"] in entry_name_map) ? entry_name_map[entry["type"]] : \ "????UNKNOWN-TYPE-[" entry["type"] "]????" } function fix_abbreviations() { if ("publisher" in entry) { gsub(/&/,"and",entry["publisher"]) # expand ampersands if (entry["publisher"] in pub_str) { entry["address"] = pub_str[entry["publisher"]] ":adr" entry["publisher"] = pub_str[entry["publisher"]] print_abbrev(entry["publisher"], pub_exp[entry["publisher"]]) print_abbrev(entry["address"], pub_adr[entry["publisher"]]) } else warning("No abbreviation for publisher [" entry["publisher"] "]") } if ("journal" in entry) { if (entry["journal"] in jrn_str) { entry["journal"] = jrn_str[entry["journal"]] print_abbrev(entry["journal"], jrn_exp[entry["journal"]]) } else warning("No abbreviation for journal [" entry["journal"] "]") } } function fix_author_editor(s) { # reduce # Author/Editor of Entry: Berghel, H. L. Type: AUTHOR # to # Author/Editor of Entry: Berghel, H. L. if (s ~ /Type:/) { if (!( \ (s ~ /Type: AUTHOR$/) || \ (s ~ /Type: CHAIRPERSON$/) || \ (s ~ /Type: EDITOR$/) || \ (s ~ /Type: Ed[.]-in-Chief$/) || \ (s ~ /Type: Ed[.]/) || \ (s ~ /Type: Eds[.]$/) || \ (s ~ /Type: TRANSLATOR$/) )) warning("Unrecognized author/editor type: [" s "]") gsub(/Type: .*$/,"",s) } return (capitalize(dot_initials(s))) } function fix_info(line) { if (line ~ /ISBN/) warning("ISBN in info field [" line "]") if (line ~ /[$][0-9]/) warning("Price in info field [" line "]") return (line) } function fix_ISBN(line) { gsub(/ISBN/,"",line) gsub(/IBN/,"",line) # handle spelling exception if (!("LCCN" in entry)) set("LCCN",": ????") # create dummy Library of Congress Call Number return (line) } function fix_pages(line) { # change "23-35" to "23--35" gsub(/-+/,"-",line) gsub(/-/,"--",line) gsub(/ *pp/,"",line) # change "23 pp" to "23" return (line) } function fix_value(key,line) { if (key == "ISBN") # "ISBN: ISBN 0-13-165382-2" -> ": 0-13-165382-2" line = fix_ISBN(line) else if ( (key == "author") || (key == "editor") ) line = fix_author_editor(line) else if ((key == "pages") || (key == "pages_whole")) line = fix_pages(line) else if (key == "info") line = fix_info(line) if ((key == "title") || (key == "booktitle")) { gsub(/[.]$/,"",line) # drop trailing title period gsub(/ *@l *[(] */," (in ",line) # "xx. @l (Italian)" -> "xx. (in Italian)" } return (line) } function get_value(line, k) { # Return the value part of "Key text: value-string" k = index(line,": ") return ( (k > 0) ? trim(substr(line,k+2)) : "????" trim(line) "????") } function initialize() { VERSION = "1.05" initialize_entry_name_map() initialize_journal_abbreviations() initialize_publisher_abbreviations() make_ignore_list() make_month_abbreviations() "date" | getline current_date_and_time # current_date_and_time = "DEBUG: current_date_and_time" # STD_MAX_TOKEN = 1000 # BibTeX limit on value string length STD_MAX_TOKEN = 4000 # 4 * BibTeX limit on value string length print "%%======================================================================" print "%% Bibliography prepared by comparch.awk, version ", VERSION print "%% on " current_date_and_time print "%% with the command: nawk -f comparch.awk " FILENAME print "%%======================================================================" print "" new_entry() } function initialize_entry_name_map() { entry_name_map["JOURNAL ARTICLE"] = "Article" entry_name_map["Journal Article"] = "Article" entry_name_map["Journal article"] = "Article" entry_name_map["DIVISIBLE BOOK"] = "Book" entry_name_map["Divisible book"] = "Book" entry_name_map["WHOLE BOOK"] = "Book" entry_name_map["Whole Book"] = "Book" entry_name_map["BOOK CHAPTER"] = "InBook" entry_name_map["Book Chapter"] = "InBook" entry_name_map["Book chapter"] = "InBook" entry_name_map["PROCEEDINGS PAPER"] = "InProceedings" entry_name_map["Proceedings Paper"] = "InProceedings" entry_name_map["Proceedings paper"] = "InProceedings" entry_name_map["Whole journal"] = "Periodical" entry_name_map["Whole Journal"] = "Periodical" entry_name_map["Doctoral thesis"] = "PhdThesis" entry_name_map["DOCTORAL THESIS"] = "PhdThesis" entry_name_map["WHOLE PROCEEDINGS"] = "Proceedings" entry_name_map["Whole proceedings"] = "Proceedings" entry_name_map["REPORT"] = "TechReport" } function initialize_journal_abbreviations() { # Define journal abbreviation strings (j-XYZ). Note that # multiple variations on journal names may map into the same # standard abbreviation. jrn_str["A+"] = "j-A-PLUS" jrn_str["Abacus"] = "j-ABACUS" jrn_str["Acta Inf"] = "j-ACTA-INFO" jrn_str["Acta Informatica"] = "j-ACTA-INFO" jrn_str["Acta Informatica"] = "j-ACTA-INFO" jrn_str["Ada Letters"] = "j-ADA-LETT" jrn_str["AEDS J"] = "j-AEDS" jrn_str["Algorithmica"] = "j-ALGORITHMICA" jrn_str["ALLC Bull"] = "j-ALLC-BULL" jrn_str["Angewandte Informatik"] = "j-ANG-INFO" jrn_str["APL in transition"] = "j-APL-TRANS" jrn_str["Applied Mathematics and Computation"] = "j-APP-MATH-COMP" jrn_str["Applied Mathematics Letters"] = "j-APP-MATH-LETT" jrn_str["Artif. Intell"] = "j-ART-INTELL" jrn_str["Artificial Intelligence"] = "j-ART-INTELL" jrn_str["Australian Computer Journal"] = "j-AUSTRALIAN-COMP-J" jrn_str["Aust. J. Phys"] = "j-AUSTRALIAN-J-PHYS" jrn_str["Behav. Inf. Technol"] = "j-BEHAV-INF-TECH" jrn_str["BIT (Nordisk tidskrift for informationsbehandling)"] = "j-BIT" jrn_str["BIT"] = "j-BIT" jrn_str["BYTE"] = "j-BYTE" jrn_str["Byte Magazine"] = "j-BYTE" jrn_str["Cahiers Centre d'Etudes Rech. Oper"] = "j-CAHIERS-CENTRE-ETUDES-RECH-OPER" jrn_str["Commun. ACM"] = "j-CACM" jrn_str["Communications of the ACM"] = "j-CACM" jrn_str["Communications of the Association for Computing Machinery"]= "j-CACM" jrn_str["Computer Graphics Forum"] = "j-CGF" jrn_str["Comput. Graph. Image Process"] = "j-CGIP" jrn_str["Comput. J"] = "j-CJ" jrn_str["Computer Journal"] = "j-CJ" jrn_str["The Computer Journal"] = "j-CJ" jrn_str["Collegiate Microcomputer"] = "j-COLL-MICRO" jrn_str["Combinatorica"] = "j-COMBINATORICA" jrn_str["Comput. Artif. Intell"] = "j-COMP-ART-INTELL" jrn_str["Computers and Automation"] = "j-COMP-AUTO" jrn_str["Comput. Bull"] = "j-COMP-BULL" jrn_str["The Computer Bulletin"] = "j-COMP-BULL" jrn_str["Computer Communications"] = "j-COMP-COMM" jrn_str["Computer Graphics"] = "j-COMP-GRAPHICS" jrn_str["Comput. Hum"] = "j-COMP-HUM" jrn_str["Computer Language"] = "j-COMP-LANG" jrn_str["Computer Languages"] = "j-COMP-LANG" jrn_str["Computers in Libraries"] = "j-COMP-LIB" jrn_str["Computers and Mathematics and Applications"] = "j-COMP-MATH-APPL" jrn_str["Computer Networks and ISDN Systems"] = "j-COMP-NET-ISDN" jrn_str["Computers and Security"] = "j-COMP-SECURITY" jrn_str["Computer speech processing"] = "j-COMP-SPEECH-PROC" jrn_str["Computer"] = "j-COMPUTER" jrn_str["ComputerWorld"] = "j-COMPUTERWORLD" jrn_str["Computing (New York)"] = "j-COMPUTING" jrn_str["Creative Comput"] = "j-CREATIVE-COMP" jrn_str["Cryptologia"] = "j-CRYPTOLOGIA" jrn_str["ACM Comput. Surv"] = "j-CS" jrn_str["ACM Computing Surveys"] = "j-CS" jrn_str["Comput. Vision Graph. Image Process"] = "j-CVGIP" jrn_str["Computer Vision, Graphics, and Image Processing"] = "j-CVGIP" jrn_str["Czech. Math. J"] = "j-CZECH-MATH-J" jrn_str["Datamation"] = "j-DATAMATION" jrn_str["Dr. Dobb's J"] = "j-DDJ" jrn_str["Dr. Dobb's Journal of Software Tools"] = "j-DDJ" jrn_str["Dr. Dobbs Journal"] = "j-DDJ" jrn_str["Decision Support Systems"] = "j-DEC-SUPP-SYS" jrn_str["Discrete Appl. Math"] = "j-DISC-APP-MATH" jrn_str["Discrete Applied Mathematics"] = "j-DISC-APP-MATH" jrn_str["Discrete Math"] = "j-DISC-MATH" jrn_str["Doklady Adak. Nauk SSSR"] = "j-DOKL-AKAD-NAUK" jrn_str["Rev. of the El. Commun. Lab."] = "j-EL-COMM-LAB" jrn_str["Electronic Publishing-Origination, Dissemination, and Design"] = "j-EPODD" jrn_str["European Journal of Combinatorics"] = "j-EURO-J-COMB" jrn_str["Foundations of Software Technology and Theoretical Computer Science"] = "j-FSTTCS" jrn_str["Fuzzy Sets Syst"] = "j-FUZZY-SETS-SYS" jrn_str["Hum. Factors"] = "j-HUMAN-FACT" jrn_str["IBM J. Res. Dev"] = "j-IBM-JRD" jrn_str["IBM J. Res. Dev."] = "j-IBM-JRD" jrn_str["IBM Journal of Research and Development"] = "j-IBM-JRD" jrn_str["IBM Systems Journal"] = "j-IBM-SYS-J" jrn_str["IEEE Computer"] = "j-IEEE-COMP" jrn_str["IEEE Journal on Selected Areas in Communications"] = "j-IEEE-JSAC" jrn_str["IEEE Proceedings"] = "j-IEEE-PROC" jrn_str["IEEE Softw"] = "j-IEEE-SOFTWARE" jrn_str["IEEE Software"] = "j-IEEE-SOFTWARE" jrn_str["IEEE Spectrum"] = "j-IEEE-SPECTRUM" jrn_str["IEEE Trans. Comput"] = "j-IEEE-TC" jrn_str["IEEE Trans. Comput."] = "j-IEEE-TC" jrn_str["IEEE Transactions on Computers"] = "j-IEEE-TC" jrn_str["IEEE Trans. Inf. Theory"] = "j-IEEE-TIT" jrn_str["IEEE Transactions on Information Theory"] = "j-IEEE-TIT" jrn_str["IEEE Transactions on Knowledge and Data Engineering"] = "j-IEEE-TKDE" jrn_str["IEEE Transactions on Pattern Analysis and Machine Intelligence"] = "j-IEEE-TPAMR" jrn_str["IEEE Transactions on Parallel and Distributed Systems"] = "j-IEEE-TPDS" jrn_str["IEEE Trans. Softw. Eng"] = "j-IEEE-TSE" jrn_str["IEEE Trans. Softw. Eng."] = "j-IEEE-TSE" jrn_str["IEEE Transactions on Software Engineering"] = "j-IEEE-TSE" jrn_str["IEICE Transactions on Communications\\slash Electronics\\slash Information and Systems"] = "j-IEICE-TCEIS" jrn_str["IEICE Transactions on Communications/Electronics/Information and Systems"] = "j-IEICE-TCEIS" jrn_str["IEICE Transactions on Communications/ Electronics/ Information and Systems"] = "j-IEICE-TCEIS" jrn_str["Inf. Tech. Res. Dev. Appl."] = "j-INF-TECH-RES-DEV-APPL" jrn_str["Inf. Technol. Res. Dev. Appl"] = "j-INF-TECH-RES-DEV-APPL" jrn_str["Inf. Control"] = "j-INFO-CTL" jrn_str["Information and Control"] = "j-INFO-CTL" jrn_str["Information and Computation (formerly Information and Control)"] = "j-INFO-COMP" jrn_str["Inf. Process. Lett"] = "j-INFO-PROC-LETT" jrn_str["Information Processing Letters"] = "j-INFO-PROC-LETT" jrn_str["Inf. Process. Manage"] = "j-INFO-PROC-MAN" jrn_str["Information Processing and Management"] = "j-INFO-PROC-MAN" jrn_str["Inf. Sci"] = "j-INFO-SCI" jrn_str["Information Sciences"] = "j-INFO-SCI" jrn_str["Information sciences"] = "j-INFO-SCI" jrn_str["Inf. Syst"] = "j-INFO-SYS" jrn_str["Information Systems"] = "j-INFO-SYS" jrn_str["Information system"] = "j-INFO-SYS" jrn_str["Information technology in the humanities: tools, techniques and applications"] = "j-INFO-TECH-HUMAN" jrn_str["Information Technology and Libraries"] = "j-INFO-TECH-LIB" jrn_str["Int. J. Comput. Inf. Sci"] = "j-INT-J-COMP-INFO-SCI" jrn_str["International Journal of Foundations of Computer Science"] = "j-INT-J-FOUND-CS" jrn_str["Int. J. Man-Mach. Stud"] = "j-INT-J-MAN-MACH-STUD" jrn_str["Int. J. Man-Mach. Stud."] = "j-INT-J-MAN-MACH-STUD" jrn_str["International Journal of Robotics Research"] = "j-INT-J-ROBOTICS-RES" jrn_str["Information Storage and Retrieval"] = "j-ISR" jrn_str["J. ACM"] = "j-J-ACM" jrn_str["Journal of the ACM"] = "j-J-ACM" jrn_str["Journal of the Association for Computing Machinery"] = "j-J-ACM" jrn_str["J. Algorithms"] = "j-J-ALG" jrn_str["Journal of Algorithms"] = "j-J-ALG" jrn_str["J. Am. Soc. Inf. Sci"] = "j-J-AMER-SOC-INFO-SCI" jrn_str["J. Autom. Reas"] = "j-J-AUTO-REASON" jrn_str["Journal of Automated Reasoning"] = "j-J-AUTO-REASON" jrn_str["J. Chem. Inf. Comput. Sci"] = "j-J-CHEM-INFO-COMP-SCI" jrn_str["J. Chin. Inst. Eng"] = "j-J-CHIN-INST-ENG" jrn_str["Journal of Combinatorial Theory Series A"] = "j-J-COMB-THEORY-A" jrn_str["Journal of Computer-Based Instruction"] = "j-J-COMP-BASED-INST" jrn_str["J. Comput. Math"] = "j-J-COMP-MATH" jrn_str["J. Comput. Phys"] = "j-J-COMP-PHYS" jrn_str["J. Comput. Syst. Sci"] = "j-J-COMP-SYS-SCI" jrn_str["Journal of Computer and System Sciences"] = "j-J-COMP-SYS-SCI" jrn_str["Journal of Cryptology"] = "j-J-CRYPTOLOGY" jrn_str["J. Doc"] = "j-J-DOC" jrn_str["Journal of FORTH Application and Research"] = "j-J-FORTH-APP-RES" jrn_str["Journal of Information and Engineering"] = "j-J-INFO-ENG" jrn_str["J. Inf. Process"] = "j-J-INFO-PROC" jrn_str["Journal of the Information Processing Society of Japan"] = "j-J-INFO-PROC-SOC-JAPAN" jrn_str["J. Inst. Electron. Telecommun. Eng"] = "j-J-INST-ELEC-TELECOMM-ENG" jrn_str["Journal of Microcomputer Applications"] = "j-J-MICRO-APP" jrn_str["Journal of Parallel and Distributed Computing"] = "j-J-PAR-DIST-COMP" jrn_str["Journal of Pascal, Ada & Modula-2"] = "j-J-PAS-ADA-MOD" jrn_str["Journal of Pascal, Ada and Modula-2"] = "j-J-PAS-ADA-MOD" jrn_str["Library Hi Tech"] = "j-LIB-HI-TECH" jrn_str["Lecture Notes in CS"] = "j-LNCS" jrn_str["Mathematics and Computers in Simulation"] = "j-MATH-COMP-SIM" jrn_str["Mathematics of Operations Research"] = "j-MATH-OPER-RES" jrn_str["Mathematical Recreations and Essays"] = "j-MATH-RECR-ESSAYS" jrn_str["Mathematical Systems Theory"] = "j-MATH-SYS-THEORY" jrn_str["Networks"] = "j-NETWORKS" jrn_str["Neural Networks"] = "j-NEURAL-NETWORKS" jrn_str["New Gener. Comput"] = "j-NEW-GEN-COMP" jrn_str["New Generation Computing"] = "j-NEW-GEN-COMP" jrn_str["Non-Linear Analysis"] = "j-NON-LIN-ANA" jrn_str["Online"] = "j-ONLINE" jrn_str["Oper. Res"] = "j-OPER-RES" jrn_str["Pattern Recogn."] = "j-PAT-REC" jrn_str["Pattern Recognition"] = "j-PAT-REC" jrn_str["Pattern Recogn. Lett"] = "j-PAT-REC-LETT" jrn_str["Pattern Recognition Letters"] = "j-PAT-REC-LETT" jrn_str["Pattern Recognition Letters"] = "j-PAT-REC-LETT" jrn_str["PC/Computing"] = "j-PC-COMP" jrn_str["Perform. Eval"] = "j-PERF-EVAL" jrn_str["Personal Comput"] = "j-PERS-COMP" jrn_str["Personal Computing"] = "j-PERS-COMP" jrn_str["Physica D"] = "j-PHYSICA-D" jrn_str["Pop. Comput"] = "j-POP-COMP" jrn_str["The PostScript Language Journal"] = "j-POSTSCRIPT-LANG-J" jrn_str["Programming and Computer Software; translation of Programmirovaniye, (Moscow, USSR) Plenum"] = "j-PROG-COMP-SOFT" jrn_str["Rapport de Recherche"] = "j-RAPP-RECH" jrn_str["Readings in database systems"] = "j-READ-DATABASE-SYS" jrn_str["Riv. Inf. (Milan)"] = "j-RIV-INFO-MILAN" jrn_str["Sci. Comput. Program"] = "j-SCI-COMP-PROG" jrn_str["SIAM J. Algebraic Discrete Methods"] = "j-SIAM-J-ALG-DISC-METH" jrn_str["SIAM Journal of Algebraic Discrete Methods"] = "j-SIAM-J-ALG-DISC-METH" jrn_str["SIAM Journal on Algebraic Discrete Methods"] = "j-SIAM-J-ALG-DISC-METH" jrn_str["SIAM J. Comput"] = "j-SIAM-J-COMP" jrn_str["SIAM Journal on Computing"] = "j-SIAM-J-COMP" jrn_str["SIAM J. Math. Anal"] = "j-SIAM-J-MATH-ANA" jrn_str["SIAM Theor. Probab. Appl"] = "j-SIAM-THEOR-PROB-APPL" jrn_str["ACM SIGACT News"] = "j-SIGACT" jrn_str["ACM SIGAPL APL Quote Quad"] = "j-SIGAPL" jrn_str["ACM SIGCHI Bulletin"] = "j-SIGCHI" jrn_str["SIGCSE Bulletin (ACM Special Interest Group on Computer Science Education)"] = "j-SIGCSE" jrn_str["ACM SIGDOC Asterisk*"] = "j-SIGDOC" jrn_str["SIGIR forum"] = "j-SIGIR" jrn_str["SIGIR Forum (ACM Special Interest Group on Information Retrieval)"] = "j-SIGIR" jrn_str["ACM SIGMETRICS Perform. Eval. Rev"] = "j-SIGMETRICS" jrn_str["ACM SIGMOD Record"] = "j-SIGMOD" jrn_str["ACM SIGNUM Newsletter"] = "j-SIGNUM" jrn_str["ACM SIGPLAN Not"] = "j-SIGPLAN" jrn_str["ACM SIGPLAN Notices"] = "j-SIGPLAN" jrn_str["SIGPLAN Notices"] = "j-SIGPLAN" jrn_str["ACM SIGSAM Bulletin"] = "j-SIGSAM" jrn_str["SIGSAM Bulletin (ACM Special Interest Group on Symbolic and Algebraic Manipulation)"] = "j-SIGSAM" jrn_str["Software Engineering Journal"] = "j-SOFT-ENG-J" jrn_str["Software Protection"] = "j-SOFT-PROT" jrn_str["Softw. Pract. Exper"] = "j-SPE" jrn_str["Software---Practice and Experience"] = "j-SPE" jrn_str["Software-Practice & Experience"] = "j-SPE" jrn_str["Software-Practice and Experience"] = "j-SPE" jrn_str["Speech Commun"] = "j-SPEECH-COMM" jrn_str["Syst. Control Lett"] = "j-SYS-CTL-LETT" jrn_str["Theor. Comput. Sci"] = "j-TCS" jrn_str["Theoretical Computer Science"] = "j-TCS" jrn_str["Theoretical Computer Science"] = "j-TCS" jrn_str["Technometrics"] = "j-TECHNOMETRICS" jrn_str["ACM Transactions on Information Systems"] = "j-TIS" jrn_str["ACM Trans. Comput. Syst"] = "j-TOCS" jrn_str["ACM Trans. Database Syst"] = "j-TODS" jrn_str["ACM Transactions on Database Systems"] = "j-TODS" jrn_str["ACM Transactions on Database Systems"] = "j-TODS" jrn_str["ACM Trans. Math. Softw"] = "j-TOMS" jrn_str["ACM Transactions on Office Information Systems"] = "j-TOOIS" jrn_str["ACM Trans. Off. Inf. Syst"] = "j-TOOIS" jrn_str["ACM Transactions on Office Information Systems"] = "j-TOOIS" jrn_str["ACM Transactions on Programming Languages and Systems"] = "j-TOPLAS" jrn_str["ACM Trans. Program. Lang. Syst"] = "j-TOPLAS" jrn_str["Univ. Comput"] = "j-UNIV-COMP" jrn_str["University Computing"] = "j-UNIV-COMP" jrn_str["Workstations and publication systems"] = "j-WORK-PUB-SYS" jrn_str["Z. Angew. Math. Phys"] = "j-Z-ANG-MATH-PHYS" jrn_exp["j-A-PLUS"] = "A+" jrn_exp["j-ABACUS"] = "Abacus" jrn_exp["j-ACTA-INFO"] = "Acta Informatica" jrn_exp["j-ADA-LETT"] = "Ada Letters" jrn_exp["j-AEDS"] = "AEDS J" jrn_exp["j-ALGORITHMICA"] = "Algorithmica" jrn_exp["j-ALLC-BULL"] = "ALLC Bull" jrn_exp["j-ANG-INFO"] = "Angewandte Informatik" jrn_exp["j-APL-TRANS"] = "APL in transition" jrn_exp["j-APP-MATH-COMP"] = "Applied Mathematics and Computation" jrn_exp["j-APP-MATH-LETT"] = "Applied Mathematics Letters" jrn_exp["j-ART-INTELL"] = "Artificial Intelligence" jrn_exp["j-AUSTRALIAN-COMP-J"] = "Australian Computer Journal" jrn_exp["j-AUSTRALIAN-J-PHYS"] = "Australian J. Phys" jrn_exp["j-BEHAV-INF-TECH"] = "Behav. Inf. Technol" jrn_exp["j-BIT"] = "BIT (Nordisk tidskrift for informationsbehandling)" jrn_exp["j-BYTE"] = "Byte Magazine" jrn_exp["j-CACM"] = "Communications of the ACM" jrn_str["j-CAHIERS-CENTRE-ETUDES-RECH-OPER"] = "Cahiers Centre d'Etudes Rech. Oper" jrn_exp["j-CGF"] = "Computer Graphics Forum" jrn_exp["j-CGIP"] = "Comput. Graph. Image Process" jrn_exp["j-CJ"] = "The Computer Journal" jrn_exp["j-COLL-MICRO"] = "Collegiate Microcomputer" jrn_exp["j-COMBINATORICA"] = "Combinatorica" jrn_exp["j-COMP-ART-INTELL"] = "Comput. Artif. Intell" jrn_exp["j-COMP-AUTO"] = "Computers and Automation" jrn_exp["j-COMP-BULL"] = "The Computer Bulletin" jrn_exp["j-COMP-COMM"] = "Computer Communications" jrn_exp["j-COMP-GRAPHICS"] = "Computer Graphics" jrn_exp["j-COMP-HUM"] = "Comput. Hum" jrn_exp["j-COMP-LANG"] = "Computer Language" jrn_exp["j-COMP-LIB"] = "Computers in Libraries" jrn_exp["j-COMP-MATH-APPL"] = "Computers and Mathematics and Applications" jrn_exp["j-COMP-NET-ISDN"] = "Computer Networks and ISDN Systems" jrn_exp["j-COMP-SECURITY"] = "Computers and Security" jrn_exp["j-COMP-SPEECH-PROC"] = "Computer speech processing" jrn_exp["j-COMPUTER"] = "Computer" jrn_exp["j-COMPUTERWORLD"] = "ComputerWorld" jrn_exp["j-COMPUTING"] = "Computing" jrn_exp["j-CREATIVE-COMP"] = "Creative Comput" jrn_exp["j-CRYPTOLOGIA"] = "Cryptologia" jrn_exp["j-CS"] = "ACM Computing Surveys" jrn_exp["j-CVGIP"] = "Computer Vision, Graphics, and Image Processing" jrn_exp["j-CZECH-MATH-J"] = "Czech. Math. J" jrn_exp["j-DATAMATION"] = "Datamation" jrn_exp["j-DDJ"] = "Dr. Dobb's Journal of Software Tools" jrn_exp["j-DEC-SUPP-SYS"] = "Decision Support Systems" jrn_exp["j-DISC-APP-MATH"] = "Discrete Applied Mathematics" jrn_exp["j-DISC-MATH"] = "Discrete Math" jrn_exp["j-DOKL-AKAD-NAUK"] = "Doklady Adak. Nauk SSSR" jrn_exp["j-EL-COMM-LAB"] = "Rev. of the El. Commun. Lab." jrn_exp["j-EPODD"] = "Electronic Publishing---Origination, Dissemination, and Design" jrn_exp["j-EURO-J-COMB"] = "European Journal of Combinatorics" jrn_exp["j-FSTTCS"] = "Foundations of Software Technology and Theoretical Computer Science" jrn_exp["j-FUZZY-SETS-SYS"] = "Fuzzy Sets Syst" jrn_exp["j-HUMAN-FACT"] = "Hum. Factors" jrn_exp["j-IBM-JRD"] = "IBM Journal of Research and Development" jrn_exp["j-IBM-SYS-J"] = "IBM Systems Journal" jrn_exp["j-IEEE-COMP"] = "IEEE Computer" jrn_exp["j-IEEE-JSAC"] = "IEEE Journal on Selected Areas in Communications" jrn_exp["j-IEEE-PROC"] = "IEEE Proceedings" jrn_exp["j-IEEE-SOFTWARE"] = "IEEE Software" jrn_exp["j-IEEE-SPECTRUM"] = "IEEE Spectrum" jrn_exp["j-IEEE-TC"] = "IEEE Transactions on Computers" jrn_exp["j-IEEE-TIT"] = "IEEE Transactions on Information Theory" jrn_exp["j-IEEE-TKDE"] = "IEEE Transactions on Knowledge and Data Engineering" jrn_exp["j-IEEE-TPAMR"] = "IEEE Transactions on Pattern Analysis and Machine Intelligence" jrn_exp["j-IEEE-TPDS"] = "IEEE Transactions on Parallel and Distributed Systems" jrn_exp["j-IEEE-TSE"] = "IEEE Transactions on Software Engineering" jrn_exp["j-IEICE-TCEIS"] = "IEICE Transactions on Communications\\slash Electronics\\slash Information and Systems" jrn_exp["j-INF-TECH-RES-DEV-APPL"] = "Inf. Technol. Res. Dev. Appl" jrn_exp["j-INFO-COMP"] = "Information and Computation (formerly Information and Control)" jrn_exp["j-INFO-CTL"] = "Information and Control" jrn_exp["j-INFO-PROC-LETT"] = "Information Processing Letters" jrn_exp["j-INFO-PROC-MAN"] = "Information Processing and Management" jrn_exp["j-INFO-SCI"] = "Information Sciences" jrn_exp["j-INFO-SYS"] = "Information Systems" jrn_exp["j-INFO-TECH-HUMAN"] = "Information technology in the humanities: tools, techniques and applications" jrn_exp["j-INFO-TECH-LIB"] = "Information Technology and Libraries" jrn_exp["j-INT-J-COMP-INFO-SCI"] = "Int. J. Comput. Inf. Sci" jrn_exp["j-INT-J-FOUND-CS"] = "International Journal of Foundations of Computer Science" jrn_exp["j-INT-J-MAN-MACH-STUD"] = "Int. J. Man-Mach. Stud." jrn_exp["j-INT-J-ROBOTICS-RES"] = "International Journal of Robotics Research" jrn_exp["j-IPL"] = "Information Processing Letters" jrn_exp["j-ISR"] = "Information Storage and Retrieval" jrn_exp["j-J-ACM"] = "Journal of the Association for Computing Machinery" jrn_exp["j-J-ALG"] = "Journal of Algorithms" jrn_exp["j-J-AMER-SOC-INFO-SCI"] = "J. Am. Soc. Inf. Sci" jrn_exp["j-J-AUTO-REASON"] = "Journal of Automated Reasoning" jrn_exp["j-J-CHEM-INFO-COMP-SCI"] = "J. Chem. Inf. Comput. Sci" jrn_exp["j-J-CHIN-INST-ENG"] = "J. Chin. Inst. Eng" jrn_exp["j-J-COMB-THEORY-A"] = "Journal of Combinatorial Theory Series A" jrn_exp["j-J-COMP-BASED-INST"] = "Journal of Computer-Based Instruction" jrn_exp["j-J-COMP-MATH"] = "J. Comput. Math" jrn_exp["j-J-COMP-PHYS"] = "J. Comput. Phys" jrn_exp["j-J-COMP-SYS-SCI"] = "Journal of Computer and System Sciences" jrn_exp["j-J-CRYPTOLOGY"] = "Journal of Cryptology" jrn_exp["j-J-DOC"] = "J. Doc" jrn_exp["j-J-FORTH-APP-RES"] = "Journal of FORTH Application and Research" jrn_exp["j-J-INFO-ENG"] = "Journal of Information and Engineering" jrn_exp["j-J-INFO-PROC"] = "J. Inf. Process" jrn_exp["j-J-INFO-PROC-SOC-JAPAN"] = "Journal of the Information Processing Society of Japan" jrn_exp["j-J-INST-ELEC-TELECOMM-ENG"]= "J. Inst. Electron. Telecommun. Eng" jrn_exp["j-J-MICRO-APP"] = "Journal of Microcomputer Applications" jrn_exp["j-J-PAR-DIST-COMP"] = "Journal of Parallel and Distributed Computing" jrn_exp["j-J-PAS-ADA-MOD"] = "Journal of Pascal, Ada and Modula-2" jrn_exp["j-LIB-HI-TECH"] = "Library Hi Tech" jrn_exp["j-LNCS"] = "Lecture Notes in CS" jrn_exp["j-MATH-COMP-SIM"] = "Mathematics and Computers in Simulation" jrn_exp["j-MATH-OPER-RES"] = "Mathematics of Operations Research" jrn_exp["j-MATH-RECR-ESSAYS"] = "Mathematical Recreations and Essays" jrn_exp["j-MATH-SYS-THEORY"] = "Mathematical Systems Theory" jrn_exp["j-NETWORKS"] = "Networks" jrn_exp["j-NEURAL-NETWORKS"] = "Neural Networks" jrn_exp["j-NEW-GEN-COMP"] = "New Generation Computing" jrn_exp["j-NON-LIN-ANA"] = "Non-Linear Analysis" jrn_exp["j-ONLINE"] = "Online" jrn_exp["j-OPER-RES"] = "Oper. Res" jrn_exp["j-PAT-REC"] = "Pattern Recognition" jrn_exp["j-PAT-REC-LETT"] = "Pattern Recognition Letters" jrn_exp["j-PC-COMP"] = "PC/Computing" jrn_exp["j-PERF-EVAL"] = "Perform. Eval" jrn_exp["j-PERS-COMP"] = "Personal Computing" jrn_exp["j-PHYSICA-D"] = "Physica D" jrn_exp["j-POP-COMP"] = "Pop. Comput" jrn_exp["j-POSTSCRIPT-LANG-J"] = "The PostScript Language Journal" jrn_exp["j-PROG-COMP-SOFT"] = "Programming and Computer Software; translation of Programmirovaniye, (Moscow, USSR) Plenum" jrn_exp["j-RAPP-RECH"] = "Rapport de Recherche" jrn_exp["j-READ-DATABASE-SYS"] = "Readings in database systems" jrn_exp["j-RIV-INFO-MILAN"] = "Riv. Inf. (Milan)" jrn_exp["j-SCI-COMP-PROG"] = "Sci. Comput. Program" jrn_exp["j-SIAM-J-ALG-DISC-METH"] = "SIAM Journal of Algebraic Discrete Methods" jrn_exp["j-SIAM-J-COMP"] = "SIAM Journal on Computing" jrn_exp["j-SIAM-J-MATH-ANA"] = "SIAM J. Math. Anal" jrn_exp["j-SIAM-THEOR-PROB-APPL"] = "SIAM Theor. Probab. Appl" jrn_exp["j-SIGACT"] = "ACM SIGACT News" jrn_exp["j-SIGAPL"] = "ACM SIGAPL APL Quote Quad" jrn_exp["j-SIGCHI"] = "ACM SIGCHI Bulletin" jrn_exp["j-SIGCSE"] = "SIGCSE Bulletin (ACM Special Interest Group on Computer Science Education)" jrn_exp["j-SIGDOC"] = "ACM SIGDOC Asterisk*" jrn_exp["j-SIGIR"] = "SIGIR Forum (ACM Special Interest Group on Information Retrieval)" jrn_exp["j-SIGMETRICS"] = "ACM SIGMETRICS Perform. Eval. Rev" jrn_exp["j-SIGMOD"] = "ACM SIGMOD Record" jrn_exp["j-SIGNUM"] = "ACM SIGNUM Newsletter" jrn_exp["j-SIGPLAN"] = "ACM SIGPLAN Notices" jrn_exp["j-SIGSAM"] = "SIGSAM Bulletin (ACM Special Interest Group on Symbolic and Algebraic Manipulation)" jrn_exp["j-SOFT-ENG-J"] = "Software Engineering Journal" jrn_exp["j-SOFT-PROT"] = "Software Protection" jrn_exp["j-SPE"] = "Software---Practice and Experience" jrn_exp["j-SPEECH-COMM"] = "Speech Commun" jrn_exp["j-SYS-CTL-LETT"] = "Syst. Control Lett" jrn_exp["j-TCS"] = "Theoretical Computer Science" jrn_exp["j-TECHNOMETRICS"] = "Technometrics" jrn_exp["j-TIS"] = "ACM Transactions on Information Systems" jrn_exp["j-TOCS"] = "ACM Trans. Comput. Syst" jrn_exp["j-TODS"] = "ACM Transactions on Database Systems" jrn_exp["j-TOMS"] = "ACM Trans. Math. Softw" jrn_exp["j-TOOIS"] = "ACM Transactions on Office Information Systems" jrn_exp["j-TOPLAS"] = "ACM Transactions on Programming Languages and Systems" jrn_exp["j-UNIV-COMP"] = "University Computing" jrn_exp["j-WORK-PUB-SYS"] = "Workstations and publication systems" jrn_exp["j-Z-ANG-MATH-PHYS"] = "Z. Angew. Math. Phys" } function initialize_publisher_abbreviations() { # Define publisher abbreviation strings (pub-XYZ). Note that # multiple variations on publisher names may map into the same # standard abbreviation. pub_str["ACM Press"] = "pub-ACM" pub_str["Association for Computing Machinery"] = "pub-ACM" pub_str["AFIPS Press"] = "pub-AFIPS" pub_str["Agence de l'Informatique"] = "pub-AGENCE-INFORMATIQUE" pub_str["Allyn and Bacon"] = "pub-ALLYN-BACON" pub_str["Allyn and Bacon, Inc."] = "pub-ALLYN-BACON" pub_str["AMACOM"] = "pub-AMACOM" pub_str["American Mathematical Society"] = "pub-AMS" pub_str["Academic Press Inc."] = "pub-AP" pub_str["Academic Press"] = "pub-AP" pub_str["Academic Press, Inc."] = "pub-AP" pub_str["Edward Arnold, Ltd."] = "pub-ARNOLD" pub_str["Addison-Wesley Publ. Co., Inc."] = "pub-AW" pub_str["Addison-Wesley"] = "pub-AW" pub_str["Benjamin/Cummings Publ. Co., Inc."] = "pub-BENCUM" pub_str["Birkhauser Boston Inc."] = "pub-BIRKHAUSER" pub_str["Brady Computer Books"] = "pub-BRADY" pub_str["Brooks/Cole Publishing Co."] = "pub-BROOKS-COLE" pub_str["Butterworth Scientific Ltd."] = "pub-BUTTERWORTH-SCIENTIFIC" pub_str["Chapman and Hall, Ltd."] = "pub-CHAPMAN-HALL" pub_str["Clarendon"] = "pub-CLARENDON" pub_str["Clark University"] = "pub-CLARK-UNIVERSITY" pub_str["Computing Trends"] = "pub-COMPUTING-TRENDS" pub_str["Computer Science Press"] = "pub-CSP" pub_str["Computer Science Press, Inc."] = "pub-CSP" pub_str["Cambridge University Press"] = "pub-CUP" pub_str["Digital Press/Digital Equipment Corp."] = "pub-DIGITAL-PRESS" pub_str["Doubleday and Co., Inc."] = "pub-DOUBLEDAY" pub_str["Dunn Technology, Inc."] = "pub-DUNN-TECHNOLOGY" pub_str["Elsevier North-Holland Publ. Co., Inc."] = "pub-ENH" pub_str["Elsevier North-Holland, Inc."] = "pub-ENH" pub_str["Lawrence Erlbaum Associates, Inc."] = "pub-ERLBAUM" pub_str["Garland Publishing, Inc."] = "pub-GARLAND" pub_str["Halsted Press"] = "pub-HALSTED" pub_str["Harvard Univ. Of. for Info. and Tech."] = "pub-HARVARD-INFO-TECH" pub_str["Harcourt Brace Jovanovich"] = "pub-HBJ" pub_str["Hayden Books"] = "pub-HAYDEN" pub_str["Hayden Book Co., Inc."] = "pub-HAYDEN" pub_str["D. C. Heath and Company"] = "pub-HEATH" pub_str["Hemisphere Publishing Corp."] = "pub-HEMISPHERE" pub_str["Holt"] = "pub-HRW" pub_str["Hummingbird Publishing"] = "pub-HUMMINGBIRD" pub_str["Illinois Institute of Technology"] = "pub-IIT" pub_str["Intertext Pubs./McGraw-Hill Book Co."] = "pub-INTERTEXT" pub_str["Lexington Books"] = "pub-LEXINGTON" pub_str["Little, Brown and Co."] = "pub-LITTLE-BROWN" pub_str["Longwood Publishing Group"] = "pub-LONGWOOD" pub_str["Macmillan Press Ltd."] = "pub-MACMILLAN" pub_str["Macmillan Publishing Co., Inc."] = "pub-MACMILLAN" pub_str["Macmillan"] = "pub-MACMILLAN" pub_str["McGraw-Hill Inc."] = "pub-MH" pub_str["McGraw-Hill"] = "pub-MH" pub_str["McGraw-Hill, Inc."] = "pub-MH" pub_str["MIT Press"] = "pub-MIT" pub_str["Mitchell Publ., Inc."] = "pub-MITCHEL" pub_str["Morgan-Kaufmann"] = "pub-MK" pub_str["North-Holland Publishing Co."] = "pub-NH" pub_str["Northwestern University"] = "pub-NORTHWESTERN-UNIVERSITY" pub_str["Osborne/McGraw-Hill"] = "pub-OSBORNE" pub_str["Oxford University Press, Inc."] = "pub-OUP" pub_str["Prentice-Hall Inc."] = "pub-PH" pub_str["Prentice-Hall"] = "pub-PH" pub_str["Prentice-Hall, Inc."] = "pub-PH" pub_str["Prentice-Hall International"] = "pub-PHI" pub_str["Princeton Univ."] = "pub-PRINCETON" pub_str["Princeton University Press"] = "pub-PRINCETON" pub_str["Reston Publ. Co., Inc."] = "pub-RESTON" pub_str["Reston Publ."] = "pub-RESTON" pub_str["Reston Publishing Co."] = "pub-RESTON" pub_str["Reston Publishing Co., Inc."] = "pub-RESTON" pub_str["Howard W. Sams and Co., Inc."] = "pub-SAMS" pub_str["Scott, Foresman and Co."] = "pub-SF" pub_str["Silicon Press"] = "pub-SILICON" pub_str["Society for Scholarly Publishing"] = "pub-SOC-SCHOL-PUB" pub_str["Science Research Associates, Inc."] = "pub-SRA" pub_str["Springer Verlag New York, Inc."] = "pub-SV" pub_str["Springer-Verlag New York Inc."] = "pub-SV" pub_str["Springer-Verlag"] = "pub-SV" pub_str["Springer-Verlag New York"] = "pub-SV" pub_str["Springer-Verlag New York, Inc."] = "pub-SV" pub_str["Sybex, Inc."] = "pub-SYBEX" pub_str["UMI Research Press"] = "pub-UMI-RESEARCH" pub_str["University of Maryland"] = "pub-UNIVERSITY-MARYLAND" pub_str["University of Waterloo"] = "pub-UNIVERSITY-WATERLOO" pub_str["Van Nostrand Reinhold Co."] = "pub-VNR" pub_str["Wiley-Interscience"] = "pub-WI" pub_str["Wm. C. Brown Co."] = "pub-W-C-BROWN" pub_str["John Wiley and Sons"] = "pub-WILEY" pub_str["John Wiley and Sons, Inc."] = "pub-WILEY" pub_str["World Future Society"] = "pub-WORLD-FUTURE" pub_str["Published quarterly by North-Holland Publishing Netherlands"]= "pub-NH" # Define the `official' expansions of publisher abbreviations and # their corresponding addresses. These are paired to facilitate # checking their correctness. pub_exp["pub-ACM"] = "ACM Press" pub_adr["pub-ACM"] = "New York, NY, USA" pub_exp["pub-AGENCE-INFORMATIQUE"] = "Agence de l'Informatique" pub_adr["pub-AGENCE-INFORMATIQUE"] = "Paris La Defense, France" pub_exp["pub-AFIPS"] = "AFIPS Press" pub_adr["pub-AFIPS"] = "Arlington, VA, USA" pub_exp["pub-ALLYN-BACON"] = "Allyn and Bacon, Inc." pub_adr["pub-ALLYN-BACON"] = "Needham Heights, MA, USA" pub_exp["pub-AMACOM"] = "AMACOM" pub_adr["pub-AMACOM"] = "New York, NY, USA" pub_exp["pub-AMS"] = "American Mathematical Society" pub_adr["pub-AMS"] = "Providence, RI, USA" pub_exp["pub-AP"] = "Academic Press Inc." pub_adr["pub-AP"] = "New York, USA" pub_exp["pub-ARNOLD"] = "Edward Arnold, Ltd." pub_adr["pub-ARNOLD"] = "London, UK" pub_exp["pub-AW"] = "Addison-Wesley" pub_adr["pub-AW"] = "Reading, MA, USA" pub_exp["pub-BENCUM"] = "Benjamin/Cummings Publ. Co., Inc." pub_adr["pub-BENCUM"] = "Menlo Park, CA, USA" pub_exp["pub-BIRKHAUSER"] = "Birkhauser Boston Inc." pub_adr["pub-BIRKHAUSER"] = "Cambridge, MA, USA" pub_exp["pub-BRADY"] = "Brady Computer Books" pub_adr["pub-BRADY"] = "New York, NY, USA" pub_exp["pub-BROOKS-COLE"] = "Brooks/Cole Publishing Co." pub_adr["pub-BROOKS-COLE"] = "Monterey, CA, USA" pub_exp["pub-BUTTERWORTH-SCIENTIFIC"] = "Butterworth Scientific Ltd." pub_adr["pub-BUTTERWORTH-SCIENTIFIC"] = "Guildford, Surrey, UK" pub_exp["pub-CHAPMAN-HALL"] = "Chapman and Hall, Ltd." pub_adr["pub-CHAPMAN-HALL"] = "London, UK" pub_exp["pub-CLARENDON"] = "Clarendon" pub_adr["pub-CLARENDON"] = "New York, NY, USA" pub_exp["pub-CLARK-UNIVERSITY"] = "Clark University" pub_adr["pub-CLARK-UNIVERSITY"] = "Worcester, MA, USA" pub_exp["pub-COMPUTING-TRENDS"] = "Computing Trends" pub_adr["pub-COMPUTING-TRENDS"] = "Seattle, WA, USA" pub_exp["pub-CSP"] = "Computer Science Press, Inc." pub_adr["pub-CSP"] = "Rockville, MD, USA" pub_exp["pub-CUP"] = "Cambridge University Press" pub_adr["pub-CUP"] = "New York, NY, USA" pub_exp["pub-DIGITAL-PRESS"] = "Digital Press/Digital Equipment Corp." pub_adr["pub-DIGITAL-PRESS"] = "Bedford, MA, USA" pub_exp["pub-DOUBLEDAY"] = "Doubleday and Co., Inc." pub_adr["pub-DOUBLEDAY"] = "New York, NY, USA" pub_exp["pub-DUNN-TECHNOLOGY"] = "Dunn Technology, Inc." pub_adr["pub-DUNN-TECHNOLOGY"] = "Vista, CA, USA" pub_exp["pub-ENH"] = "Elsevier North-Holland Publ. Co., Inc." pub_adr["pub-ENH"] = "New York, NY, USA" pub_exp["pub-ENH"] = "Elsevier North-Holland, Inc." pub_adr["pub-ENH"] = "New York, NY, USA" pub_exp["pub-ERLBAUM"] = "Lawrence Erlbaum Associates, Inc." pub_adr["pub-ERLBAUM"] = "Hillsdale, NJ, USA" pub_exp["pub-GARLAND"] = "Garland Publishing, Inc." pub_adr["pub-GARLAND"] = "New York, NY, USA" pub_exp["pub-HALSTED"] = "Halsted Press" pub_adr["pub-HALSTED"] = "New York, USA" pub_exp["pub-HARVARD-INFO-TECH"] = "Harvard Univ. Of. for Info. and Tech." pub_adr["pub-HARVARD-INFO-TECH"] = "Cambridge, MA, USA" pub_exp["pub-HAYDEN"] = "Hayden Books" pub_adr["pub-HAYDEN"] = "4300 West 62nd Street, Indianapolis, IN 46268, USA" pub_exp["pub-HBJ"] = "Harcourt Brace Jovanovich" pub_adr["pub-HBJ"] = "San Diego, CA, USA" pub_exp["pub-HEATH"] = "D. C. Heath and Company" pub_adr["pub-HEATH"] = "Lexington, MA, USA" pub_exp["pub-HEMISPHERE"] = "Hemisphere Publishing Corp." pub_adr["pub-HEMISPHERE"] = "Washington, DC, USA" pub_exp["pub-HRW"] = "Holt, Rinehart and Winston" pub_adr["pub-HRW"] = "New York, NY, USA" pub_exp["pub-HUMMINGBIRD"] = "Hummingbird Publishing" pub_adr["pub-HUMMINGBIRD"] = "Edmond, OK, USA" pub_exp["pub-IIT"] = "Illinois Institute of Technology" pub_adr["pub-IIT"] = "Chicago, IL, USA" pub_exp["pub-INTERTEXT"] = "Intertext Pubs./McGraw-Hill Book Co." pub_adr["pub-INTERTEXT"] = "New York, NY, USA" pub_exp["pub-LEXINGTON"] = "Lexington Books" pub_adr["pub-LEXINGTON"] = "Lexington, MA, USA" pub_exp["pub-LITTLE-BROWN"] = "Little, Brown and Co." pub_adr["pub-LITTLE-BROWN"] = "Boston, MA, USA" pub_exp["pub-LONGWOOD"] = "Longwood Publishing Group" pub_adr["pub-LONGWOOD"] = "Wolfeboro, NH, USA" pub_exp["pub-MACMILLAN"] = "Macmillan Publishing Co., Inc." pub_adr["pub-MACMILLAN"] = "New York, NY, USA" pub_exp["pub-MH"] = "McGraw-Hill, Inc." pub_adr["pub-MH"] = "New York, NY, USA" pub_exp["pub-MIT"] = "MIT Press" pub_adr["pub-MIT"] = "Cambridge, MA, USA" pub_exp["pub-MITCHELL"] = "Mitchell Publ., Inc." pub_adr["pub-MITCHELL"] = "Santa Cruz, CA, USA" pub_exp["pub-MK"] = "Morgan-Kaufmann" pub_adr["pub-MK"] = "Palo Alto, CA, USA" pub_exp["pub-NH"] = "North-Holland Publishing Co." pub_adr["pub-NH"] = "Amsterdam, The Netherlands" pub_exp["pub-NORTHWESTERN-UNIVERSITY"]= "Northwestern University" pub_adr["pub-NORTHWESTERN-UNIVERSITY"]= "Evanston, IL, USA" pub_exp["pub-OSBORNE"] = "Osborne/McGraw-Hill" pub_adr["pub-OSBORNE"] = "Berkeley, CA, USA" pub_exp["pub-OUP"] = "Oxford University Press, Inc." pub_adr["pub-OUP"] = "New York, NY, USA" pub_exp["pub-PH"] = "Prentice-Hall, Inc." pub_adr["pub-PH"] = "Englewood Cliffs, NJ, USA" pub_exp["pub-PHI"] = "Prentice-Hall International" pub_adr["pub-PHI"] = "Englewood Cliffs, NJ, USA" pub_exp["pub-PRINCETON"] = "Princeton University Press" pub_adr["pub-PRINCETON"] = "Princeton, NJ, USA" pub_exp["pub-RESTON"] = "Reston Publishing Co., Inc." pub_adr["pub-RESTON"] = "Reston, VA, USA" pub_exp["pub-SAMS"] = "Howard W. Sams and Co., Inc." pub_adr["pub-SAMS"] = "Indianapolis, IN, USA" pub_exp["pub-SF"] = "Scott, Foresman and Co." pub_adr["pub-SF"] = "Glenview, IL, USA" pub_exp["pub-SILICON"] = "Silicon Press" pub_adr["pub-SILICON"] = "Summit, NJ, USA" pub_exp["pub-SOC-SCHOL-PUB"] = "Society for Scholarly Publishing" pub_adr["pub-SOC-SCHOL-PUB"] = "Washington, DC, USA" pub_exp["pub-SRA"] = "Science Research Associates, Inc." pub_adr["pub-SRA"] = "Chicago, IL, USA" pub_exp["pub-SV"] = "Springer-Verlag Inc." pub_adr["pub-SV"] = "New York, NY, USA" pub_exp["pub-SYBEX"] = "Sybex, Inc." pub_adr["pub-SYBEX"] = "Alameda, CA, USA" pub_exp["pub-UMI-RESEARCH"] = "UMI Research Press" pub_adr["pub-UMI-RESEARCH"] = "Ann Arbor, Mich, USA" pub_exp["pub-UNIVERSITY-MARYLAND"] = "University of Maryland" pub_adr["pub-UNIVERSITY-MARYLAND"] = "Waterloo, Ontario, Canada" pub_exp["pub-UNIVERSITY-WATERLOO"] = "University of Waterloo" pub_adr["pub-UNIVERSITY-WATERLOO"] = "Waterloo, Ontario, Canada" pub_exp["pub-VNR"] = "Van Nostrand Reinhold Co." pub_adr["pub-VNR"] = "New York, NY, USA" pub_exp["pub-W-C-BROWN"] = "Wm. C. Brown Co." pub_adr["pub-W-C-BROWN"] = "Dubuque, IA, USA" pub_exp["pub-WI"] = "Wiley-Interscience" pub_adr["pub-WI"] = "New York, NY, USA" pub_exp["pub-WILEY"] = "John Wiley and Sons, Inc." pub_adr["pub-WILEY"] = "New York, NY, USA" pub_exp["pub-WORLD-FUTURE"] = "World Future Society" pub_adr["pub-WORLD-FUTURE"] = "Bethesda, MD, USA" } function isletter(c) { return (index("ABCDEFGHIJKLMNOPQRSTUVWXYZ",toupper(c)) > 0) } function isupper(c) { return (index("ABCDEFGHIJKLMNOPQRSTUVWXYZ",c) > 0) } function make_ignore_list() { # List of words to ignore in forming citation tags. The initial # list was extracted from the bibindex badwords list, and covers # a few European languages as well as English. ignore["a"] = 1 ignore["ab"] = 1 ignore["aber"] = 1 ignore["als"] = 1 ignore["an"] = 1 ignore["and"] = 1 ignore["are"] = 1 ignore["as"] = 1 ignore["auf"] = 1 ignore["aus"] = 1 ignore["az"] = 1 ignore["bei"] = 1 ignore["bir"] = 1 ignore["but"] = 1 ignore["da"] = 1 ignore["das"] = 1 ignore["dat"] = 1 ignore["de"] = 1 ignore["dei"] = 1 ignore["dem"] = 1 ignore["den"] = 1 ignore["der"] = 1 ignore["des"] = 1 ignore["det"] = 1 ignore["di"] = 1 ignore["die"] = 1 ignore["dos"] = 1 ignore["e"] = 1 ignore["een"] = 1 ignore["eene"] = 1 ignore["egy"] = 1 ignore["ei"] = 1 ignore["ein"] = 1 ignore["eine"] = 1 ignore["einen"] = 1 ignore["einer"] = 1 ignore["eines"] = 1 ignore["eit"] = 1 ignore["el"] = 1 ignore["en"] = 1 ignore["er"] = 1 ignore["es"] = 1 ignore["et"] = 1 ignore["ett"] = 1 ignore["eyn"] = 1 ignore["eyne"] = 1 ignore["for"] = 1 ignore["from"] = 1 ignore["fuer"] = 1 ignore["fur"] = 1 ignore["gl"] = 1 ignore["gli"] = 1 ignore["ha"] = 1 ignore["haben"] = 1 ignore["had"] = 1 ignore["hai"] = 1 ignore["has"] = 1 ignore["hat"] = 1 ignore["have"] = 1 ignore["he"] = 1 ignore["heis"] = 1 ignore["hen"] = 1 ignore["hena"] = 1 ignore["henas"] = 1 ignore["het"] = 1 ignore["hin"] = 1 ignore["hinar"] = 1 ignore["hinir"] = 1 ignore["hinn"] = 1 ignore["hith"] = 1 ignore["ho"] = 1 ignore["hoi"] = 1 ignore["i"] = 1 ignore["il"] = 1 ignore["in"] = 1 ignore["is"] = 1 ignore["ist"] = 1 ignore["ka"] = 1 ignore["ke"] = 1 ignore["l"] = 1 ignore["la"] = 1 ignore["las"] = 1 ignore["le"] = 1 ignore["les"] = 1 ignore["lo"] = 1 ignore["los"] = 1 ignore["mia"] = 1 ignore["mit"] = 1 ignore["n"] = 1 ignore["na"] = 1 ignore["nji"] = 1 ignore["not"] = 1 ignore["o"] = 1 ignore["oder"] = 1 ignore["of"] = 1 ignore["on"] = 1 ignore["or"] = 1 ignore["os"] = 1 ignore["others"] = 1 ignore["s"] = 1 ignore["sie"] = 1 ignore["sind"] = 1 ignore["so"] = 1 ignore["t"] = 1 ignore["ta"] = 1 ignore["the"] = 1 ignore["to"] = 1 ignore["um"] = 1 ignore["uma"] = 1 ignore["un"] = 1 ignore["una"] = 1 ignore["und"] = 1 ignore["une"] = 1 ignore["uno"] = 1 ignore["unter"] = 1 ignore["von"] = 1 ignore["with"] = 1 ignore["y"] = 1 ignore["yr"] = 1 # Additional words added later ignore["also"] = 1 ignore["any"] = 1 ignore["away"] = 1 ignore["by"] = 1 ignore["cum"] = 1 ignore["dans"] = 1 ignore["down"] = 1 ignore["into"] = 1 ignore["its"] = 1 ignore["off"] = 1 ignore["onto"] = 1 ignore["out"] = 1 ignore["over"] = 1 ignore["sur"] = 1 ignore["that"] = 1 ignore["these"] = 1 ignore["this"] = 1 ignore["those"] = 1 ignore["unto"] = 1 ignore["up"] = 1 ignore["via"] = 1 ignore["without"] = 1 ignore["zu"] = 1 ignore["zum"] = 1 ignore["zur"] = 1 } function make_month_abbreviations() { month_abbrev["january"] = "jan" month_abbrev["february"] = "feb" month_abbrev["march"] = "mar" month_abbrev["april"] = "apr" month_abbrev["may"] = "may" month_abbrev["june"] = "jun" month_abbrev["july"] = "jul" month_abbrev["august"] = "aug" month_abbrev["september"] = "sep" month_abbrev["october"] = "oct" month_abbrev["november"] = "nov" month_abbrev["december"] = "dec" month_abbrev["jan"] = "jan" month_abbrev["feb"] = "feb" month_abbrev["mar"] = "mar" month_abbrev["apr"] = "apr" month_abbrev["may"] = "may" month_abbrev["jun"] = "jun" month_abbrev["jul"] = "jul" month_abbrev["aug"] = "aug" month_abbrev["sep"] = "sep" month_abbrev["oct"] = "oct" month_abbrev["nov"] = "nov" month_abbrev["dec"] = "dec" month_abbrev["sept"] = "sep" } function new_entry() { clear_array(entry) last_key = "" } function print_abbrev(key,value) { if (!(key in strings)) { print_line("@String{" key \ substr(" ", 1,23 - length(key)) \ "= \"" value "\"}\n") strings[key] = value # remember that we have output this one } } function print_entry( ename, key, k) { if ("type" in entry) { if ("publisher" in entry) set_publisher_and_address(entry["publisher"]) fix_abbreviations() if (!("year" in entry)) set("year",": 19xx") ename = entry_name() print_line("@" ename "{" citation_tag() ",") set("acknowledgement",": ack-nhfb") set("bibdate",": " current_date_and_time) # After trying strict alphabetic order for the keywords, I # decided that it is more useful to have most of them in a # specific order, that corresponding to the usual order in an # article citation.. print_pair() will delete each entry that # it prints, and ignore any that don't exist, so that key/value # pairs are not duplicated in the subsequent output after # sort_keys() print_pair(((ename == "Proceedings") || (ename == "Periodical")) ? \ "editor" : "author") print_pair("booktitle") print_pair("title") print_pair("journal") print_pair("volume") print_pair("number") print_pair("pages_whole") # NB: Must precede "pages" because it print_pair("pages") # checks for the existence of "pages" print_pair("month") print_pair("year") print_pair("publisher") print_pair("address") print_pair("ISBN") print_pair("ISSN") print_pair("LCCN") print_pair("price") sort_keys() for (k = 1; sorted_keys[k]; ++k) print_key_value(sorted_keys[k],entry[sorted_keys[k]]) print_line("}\n") } new_entry() } function print_key_abbrev(key,abbrev) { print_line(sprintf(" %s =%s %s,", key, \ substr(" ",1,11-length(key)), abbrev)) } function print_key_string(key,string) { print_line(sprintf(" %s = %s\"%s\",", \ key, \ substr(" ",1,11-length(key)), \ trim(enquote(string)))) } function print_key_value(key,value) { if (key == "type") # already output as @type{tag, # } return else if (key == "acknowledgement") print_key_abbrev(key,value) else if ((key == "address") || (key == "publisher")) { if (substr(value,1,4) == "pub-") print_key_abbrev(key,value) else print_key_string(key,value) } else if (key == "journal") { if (substr(value,1,2) == "j-") print_key_abbrev(key,value) else print_key_string(key,value) } else if (key == "keywords") print_key_string(key,tolower(value)) else if (key == "month") print_month(value) else if ((key == "note") || (key == "booktitle") || (key == "title")) print_key_string(key,slashify(value)) else if (key == "pages_whole") print_key_string(("pages" in entry) \ ? "pages_whole" : "pages", value) else if (key == "review") print_key_string(key,"ACM CR " value) else print_key_string(key,value) } function print_line(line) { print line | "bibsort -byyear" } function print_month(month, mon) { mon = tolower(month) gsub(/[^A-Za-z---]/,"",mon) # strip punctuation if (mon in month_abbrev) print_key_abbrev("month", month_abbrev[mon]) else print_key_string("month",month) } function print_pair(key) { if (key in entry) { print_key_value(key,entry[key]) delete entry[key] } } function set(key,line) { if (key == "type") # output any pending entry print_entry() if (key == "volume_issue") # handle "volume, issue" specially set_volume_issue(key,line) else if (key == "date") set_date() else set_other(key,line) } function set_date( k,n,parts) { k = index($0,": ") if (substr($0,k+2) ~ /[A-Za-z]+[.]? +[0-9]+, [0-9]+/) # Aug. 1, 1987 n = split(substr($0,k+2),parts,", *") else # June 1987 n = split(substr($0,k+2),parts," ") for (k = 1; k <= n; ++k) { if (parts[k] ~ /[1-2][0-9][0-9][0-9]/) # match 1984, 1984/1985, 1984--1985 set("year",": " parts[k]) else set("month",": " parts[k]) } } function set_in(line) { if ( (!("booktitle" in entry)) && ("type" in entry) && (entry["type"] in entry_name_map) && ( (entry_name_map[entry["type"]] == "InProceedings") || (entry_name_map[entry["type"]] == "InBook") ) ) set("booktitle",line) else set("journal",line) } function set_other(key,line, k) { if (line ~ /Additional Info: in /) { # looks like a booktitle value # NB: cannot do this in fix_value() because assignments to awk # function arguments cannot modify the caller's variables sub(/Additional Info: in /,"Additional Info: ",line) key = "booktitle" # change "info" to "booktitle" } last_key = key # remember key for use in append_value() line = get_value(fix_value(key,line)) if ((key in entry) && (line != entry[key])) warning("Replacing old value [" entry[key] "] by new value [" line "]") entry[key] = line } function set_publisher_and_address(value, k,n,parts,s) { # Input contains both publisher and address, and looks like # Publisher: Allyn & Bacon, Inc., Needham Heights, MA # Split the line at commas: the publisher is then the first field, # or the first few, if the following ones are "Co.", "Inc.", etc. n = split(value,parts,", *") # reconstruct publisher s = trim(parts[1]) for (k = 2; (k <= n); ++k) { if (parts[k] ~ /Co[.]$|Inc[.]$|Ltd[.]$/) s = s ", " trim(parts[k]) else break } entry["publisher"] = s # reconstruct address for (s = ""; k <= n; ++k) s = s ", " trim(parts[k]) if (s) entry["address"] = trim(substr(s,3)) } function set_volume_issue(key,line, k,n,parts) { k = index(line,": ") n = split(substr(line,k+2),parts,", *") set("volume",": " parts[1]) # recursively set the volume if (n > 2) { warning("Unexpected text past volume,issue [" line "] attached to issue") for (k = 3; k <= n; ++k) parts[2] = parts[2] ", " parts[k] } if (n >= 2) set("number",": " parts[2]) # recursively set the issue number } function slashify(s, k,n,parts,t) { # Replace / by \slash, unless the word on either side of the slash # is only one-character long. Thus, we change "Mini/microcomputer" # to "Mini\slash microcomputer", but leave "I/O" unchanged n = split(s,parts,"/") t = parts[1] for (k = 2; k <= n; ++k) t = t (((parts[k-1] ~ /[^A-Za-z0-9][A-Za-z0-9]$/) || \ (parts[k ] ~ /^[A-Za-z0-9][^A-Za-z0-9]/)) \ ? "/" : "\\slash ") parts[k] return (t) } function sort_keys( k,key,m,n) { clear_array(sorted_keys) n = 0 for (key in entry) { n++ sorted_keys[n] = key } for (k = 1; k < n; ++k) { for (m = k + 1; m <= n; ++m) { if (tolower(sorted_keys[k]) > tolower(sorted_keys[m])) { key = sorted_keys[m] sorted_keys[m] = sorted_keys[k] sorted_keys[k] = key } } } } function trim(s) { gsub(/^[ \t]+/,"",s) gsub(/[ \t]+$/,"",s) return (s) } function warning(message) { print FILENAME ":" FNR ":%%" message >"/dev/tty" }