summaryrefslogtreecommitdiff
path: root/support/vim
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/vim
Initial commit
Diffstat (limited to 'support/vim')
-rw-r--r--support/vim/isi2bib.vim144
1 files changed, 144 insertions, 0 deletions
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