From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/vim/isi2bib.vim | 144 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 support/vim/isi2bib.vim (limited to 'support/vim') diff --git a/support/vim/isi2bib.vim b/support/vim/isi2bib.vim new file mode 100644 index 0000000000..25cfd70c5f --- /dev/null +++ b/support/vim/isi2bib.vim @@ -0,0 +1,144 @@ +" Script: isi2bib.vim +" Author: Ajit J. Thakkar (ajit AT unb DOT ca) +" Last Change: 2003 July 15 +" Version: 1.0 +" URL: http://www.unb.ca/chem/ajit/vim.htm +" +" Function: +" Convert a bibliographic database from ISI (Institute of Scientific +" Information, Web of Science) export format to BIBTeX format. +" +" Installation: +" Place somewhere in your runtimepath (typically ~/.vim or $HOME/vimfiles) +" +" Noninteractive Usage: +" From the command line, cd to the directory of the ISI database, +" and issue the command +" vim -u NONE -c ":ru isi2bib.vim" fname +" where fname is the name of the ISI database file. +" The BIBTeX database will be saved in base(fname).bib +" where base(fname) is the ISI file name without an extension. +" +" Description: +" BIBTeX keys are constructed as follows: (last name of first author).(last +" two digits of year).(disambiguation mark) where the disambiguation mark is a +" lower case letter that is used only when needed. For example, a key could be +" Smith03 if it is unique but may be Smith03f if it is the 7th key starting +" with Smith03. +" +" Only records of type(PT) article are converted. Other record types are +" ignored. Only the author(AU), title(TI), pages(BP,EP), year(PY), volume(VL) +" and journal(JI) fields are converted. +" +" Recent ISI records (1996 and later) use both lower- and upper-case. The case +" is respected and protected by braces when necessary. +" +" Older (pre-1996) ISI records use only upper case. A crude conversion to +" mixed case is made. +" +" Some manual cleanup of the bib file will be required; for example, to use +" math mode for symbols, etc. +" +" Limitations: +" Vim version 6.0 or later required. +" +" License: +" This material is subject to the LaTeX Project Public License. See +" http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the +" details of that license. + +fun! s:Clean(Name) + let GoodName=a:Name + " Format all-caps names + if GoodName !~# '\l' + let GoodName=substitute(GoodName,'\(\u\)\(\u\+\),','\1\L\2,',"g") + endif + " Format initials + let GoodName=substitute(GoodName,'\(\u\)\(\u\)','\1\. \2',"g") + let GoodName=substitute(GoodName,'\(\u\)$','\1\.',"g") + return GoodName +endfun + +set nocp viminfo= lazyredraw nohidden noswapfile updatecount=0 undolevels=0 +set report=9999 +if has('autocmd') + filetype plugin indent off +endif +if exists('syntax_on') + syntax off +endif +new +wincmd w +1 + +while search('^PT ',"W") > 0 + if strpart(getline('.'),3) !=? "journal" + continue + endif + " Author(s) + .+ + let author=s:Clean(strpart(getline('.'),3)) + while getline(line('.')+1) =~ '^ ' + .+ + let coworker=s:Clean(strpart(getline('.'),3)) + let author=author.' and '.coworker + endwhile + " Title + call search('^TI ',"W") + let title=strpart(getline('.'),3) + while getline(line('.')+1) =~ '^ ' + .+ + let title=title.strpart(getline('.'),2) + endwhile + if title !~# '\l' + " Format all-caps title + let title=substitute(title,'\(\u\)\(\u\+\)','\1\L\2',"g") + else + " Format mixed-case title + let title=substitute(title,'\<\u\w*\>','{&}',"g") + let title=substitute(title,'^{\(\w\+\)}','\1',"g") + endif + let title=substitute(title,"center dot center dot center dot",'$\\cdots$',"g") + " Pages + call search('^BP ',"W") + let pages=strpart(getline('.'),3) + if getline(line('.')+1) =~# '^EP ' && strpart(getline(line('.')+2),3) !~ '^1$' + let pages=pages.'--'.strpart(getline(line('.')+1),3) + endif + " Journal + call search('^JI ',"W") + let journal=strpart(getline('.'),3) + " Year + call search('^PY ',"W") + let year=strpart(getline('.'),3) + " Volume + call search('^VL ',"W") + let volume=strpart(getline('.'),3) + " Write entry in bib file + wincmd w + " Create key + let key=substitute(author,',.*$',"","") + let key=key.strpart(year,2) + " Disambiguation mark + let repeat=0 + if search(key,"w") > 0 + exe 'sil! g/'.key.'/let repeat=repeat+1' + endif + if repeat > 0 + let key=key.nr2char(repeat+96) + endif + sil! $put='' + sil! $put='@article{'.key.',' + sil! $put='author={'.author.'},' + sil! $put='title={'.title.'},' + sil! $put='journal={'.journal.'},' + sil! $put='year={'.year.'},' + sil! $put='volume={'.volume.'},' + sil! $put='pages={'.pages.'},' + sil! $put='}' + wincmd w +endwhile + +wincmd w +sil! w! #:r.bib +qa -- cgit v1.2.3