"Vim script for setting up Fran's webpages

"====================
"Initialize:
"====================
let verseindex_template = "\\00ghalib\\templates\\verseindex.tpl"
let verseentry_template = "\\00ghalib\\templates\\verseentry.tpl"
let commentary_template = "\\00ghalib\\templates\\commentary.tpl"

"====================
"Now define some functions:
"====================

function! Check_filetype(filename)
  let shortname = fnamemodify(a:filename, ":t")
  if (shortname =~ "index_[0-9][0-9][0-9]\.html")
    let filetype = "verseindex"
  elseif (shortname =~ "[0-9][0-9]*_[0-9][0-9]\.html")
    let filetype = "commentary"
  else
    let filetype = "other"
  endif
  return filetype
endfunction

function! Insert_numbers()
  let filename = expand("%")
  let filetype = Check_filetype(filename)
  let shortname = fnamemodify(filename, ":t:r")
  if filetype == "verseindex"
    let ghazal = matchstr(shortname, ".*", matchend(shortname, "_0*"))
    let verse = g:verse
  elseif filetype == "commentary"
    let ghazal = matchstr(shortname, "[^_]*")
    let verse = matchstr(shortname, ".*", matchend(shortname, "_0*"))
  endif
  if strlen(ghazal) == 3
    %s/!00g!/!g!/g
    elseif strlen(ghazal) == 2
    %s/!00g!/0!g!/g
    else
    %s/!00g!/00!g!/g
  endif
  %s/!g!/\=ghazal/g
  if strlen(verse) == 2
    %s/!0v!/!v!/g
    else
    %s/!0v!/0!v!/g
  endif
  %s/!v!/\=verse/g
endfunction

function! Apply_templates()
  let filename = expand("%")
  let filetype = Check_filetype(filename)
  %d
  if filetype == "verseindex"
    execute "read " . g:verseindex_template
  elseif filetype == "commentary"
    execute "read " . g:commentary_template
  endif
  1d
endfunction

function! Add_verses()
  let filename = expand("%")
  let indexfile = filename
  let shortname = fnamemodify(filename, ":t:r")
  let ghazal = matchstr(shortname, ".*", matchend(shortname, "_0*"))
  let verse = 0
  let versetotal = 0
  while ( versetotal < 1 ) || ( versetotal > 99 )
    let versetotal = inputdialog("How many verses does Ghazal " .  ghazal ." 
      \have? ")
  endwhile
  call Insert_numbers()
  let n = 1
  while n <= versetotal
    let g:verse = n
    if n > 1
      g/class=\"verse-entry\"/
      /<\/div>/+1
      execute "read " . g:verseentry_template
    endif
    1
    g/class=\"verse-number\">/
    s/\(\/[0-9]*_\).*\(\.html\">.*,\).*<\/a>/\1!0v!\2!v!<\/a>/
    call Insert_numbers()
    if strlen(g:verse) == 2
      let versefile = ghazal . "_" . g:verse . ".html"
    else
      let versefile = ghazal . "_0" . g:verse . ".html"
    endif
    :w
    exec "e " . versefile
    call Apply_templates()
    call Insert_numbers()
  "begin new stuff
    let nv = n + 1
    if nv < 10
      let nextverse = "0" . nv
    else
      let nextverse = nv
    endif
    if nv > versetotal
      g/!0nv!/;+1d
    else
      %s/!0nv!/\=nextverse/
    endif
  "end new stuff
    :w
    exec "e " . indexfile
    let n = n + 1
  endwhile
endfunction

"====================
"The fun begins:
"====================

"cd %:h
let filetype = Check_filetype(expand("%"))
:echo filetype
if filetype == "commentary"
  call Apply_templates()
  call Insert_numbers()
elseif filetype == "verseindex"
  call Apply_templates()
  let g:verse = 0
  call Insert_numbers()
  call Add_verses()
else
  finish
endif
:wq

