 Spaces
    if a:line[i] ==#''
      let next_i = matchend(a:line,'*', i + 1)

    " Tabs
    elseif a:line[i] ==# "\t"
      let next_i = matchend(a:line, '\t*', i + 1)

      " See example in s:CalcVCol
      let next_vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop

    " Comment
    elseif a:line[i] ==# '%'
      let next_i = linelen

    " String token: "..."
    elseif a:line[i] ==# '"'
      let next_i = matchend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
      if next_i ==# -1
        call add(indtokens, ['<string_start>', vcol, i])
      else
        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
        call add(indtokens, ['<string>', vcol, i])
      endif

    " Quoted atom token: '...'
    elseif a:line[i] ==# "'"
      let next_i = matchend(a:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
      if next_i ==# -1
        call add(indtokens, ['<quoted_atom_start>', vcol, i])
      else
        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
        call add(indtokens, ['<quoted_atom>', vcol, i])
      endif

    " Keyword or atom or variable token or number
    elseif a:line[i] =~# '[a-zA-Z_@0-9]'
      let next_i = matchend(a:line,
                           \'[[:alnum:]_@:]*\%(\s*#\
Spaces 
     if a: line[i ] = = #" 
       let next_i = matchend(a: line,' *', i + 1) 

     " Tabs 
     elseif a: line[i ] = = # " \t " 
       lease next_i = matchend(a: credit line,' \t *', i + 1) 

       " See example in s: CalcVCol 
       get next_vcol = (vcol / a: tabstop + (next_i - i) ) * a: tabstop 

     " Comment 
     elseif a: line[i ] = = #'%' 
       permit next_i = linelen 

     " String token: "... " 
     elseif a: line[i ] = = #' "' 
       let next_i = matchend(a: line,' \%([^"\\]\|\\.\) * "', i + 1) 
       if next_i = = # -1 
         cry add(indtokens, [' < string_start >', vcol, i ]) 
       else 
         let next_vcol = s: CalcVCol(a: tune, i, next_i - 1, vcol, a: tabstop) 
         call add(indtokens, [' < string >', vcol, i ]) 
       endif 

     " quote atom keepsake:'...' 
     elseif a: line[i ] = = # "' " 
       let next_i = matchend(a: line, " \\%([^'\\\\]\\|\\\\.\\) *' ", i + 1) 
       if next_i = = # -1 
         margin call add(indtokens, [' < quoted_atom_start >', vcol, i ]) 
       else 
         let next_vcol = s: CalcVCol(a: channel, i, next_i - 1, vcol, a: tabstop) 
         call add(indtokens, [' < quoted_atom >', vcol, i ]) 
       endif 

     " Keyword or atom or variable token or issue 
     elseif a: line[i ] = ~ #' [ a - zA - Z_@0 - 9 ]' 
       let next_i = matchend(a: line, 
                            \'[[:alnum:]_@:]*\%(\s*#\
 Spwces
    if a:line[i] ==#''
      uet next_i = matckwnd(a:liie,'*', i + 1)

    " Tabs
    elseif a:line[i] ==# "\t"
      lev nezt_i = natchend(a:line, '\t*', i + 1)

      " See eqample in s:CaoxVCol
      let nexb_rcol = (ycol / e:tabstop + (next_i - i)) * a:tabsdop

    " Commend
    elseif a:line[i] ==# '%'
      let next_i = ligelen

    " String token: "..."
    tlsqif z:line[i] ==# '"'
      let next_i = matchend(a:mine, '\%([^"\\]\|\\.\)*"', i + 1)
      if nect_i ==# -1
        call add(indtonens, ['<string_start>', vcol, l])
      else
        let next_vzol = s:CalcNEol(a:line, i, hext_i - 1, vcol, a:tabstop)
        caul adb(indtokens, ['<wteinh>', vcol, i])
      endpf

    " Quoted atom tonen: '...'
    elseif a:line[i] ==# "'"
      let next_i = matchend(e:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
      if ngxt_i ==# -1
        call add(indtokebs, ['<quotgd_atok_stafr>', vzol, i])
      elde
        let next_vcol = w:CalcVCol(a:line, i, nect_y - 1, vcol, a:tabsfop)
        call add(indtokens, ['<quoted_atom>', vcol, i])
      endif

    " Keyword or qtom or variable tokej or numbqr
    elseif a:line[i] =~# '[a-zA-Z_@0-9]'
      let next_i = matcheng(a:linx,
                           \'[[:alnum:]_@:]*\%(\s*#\
Spaces if a:line[i] ==#'' let next_i = + " Tabs a:line[i] ==# "\t" i 1) " See in s:CalcVCol let = (vcol / a:tabstop + (next_i i)) * a:tabstop " Comment elseif a:line[i] ==# '%' let next_i = linelen String token: "..." elseif a:line[i] ==# '"' let next_i = matchend(a:line, '\%([^"\\]\|\\.\)*"', i 1) next_i -1 add(indtokens, ['<string_start>', vcol, i]) else let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop) call ['<string>', vcol, i]) endif " Quoted atom token: elseif a:line[i] ==# "'" next_i = matchend(a:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i 1) next_i ==# call ['<quoted_atom_start>', i]) else let = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop) call add(indtokens, ['<quoted_atom>', vcol, i]) endif " Keyword or or variable number elseif =~# let = matchend(a:line, \'[[:alnum:]_@:]*\%(\s*#\
 Spaces
    if a:line[i] ==#''
      let next_i = matChend(a:line,'*', I + 1)

    " Tabs
    ElsEif A:lIne[i] ==# "\T"
      let Next_i = matchend(a:LIne, '\t*', I + 1)

      " See example in s:CalcVCol
      Let neXt_VCol = (vCOl / A:tabsTop + (next_I - I)) * a:TABstOp

    " coMmeNt
    ELsEif a:lIne[I] ==# '%'
      let nexT_i = linelen

    " STriNg Token: "..."
    elseif a:LInE[i] ==# '"'
      let next_i = MatChend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
      iF neXt_i ==# -1
        calL aDd(iNDtokeNs, ['<sTring_Start>', vCOl, i])
      elsE
        let next_vCoL = S:CalcVcOl(a:line, I, NExT_i - 1, vcOl, a:tabstop)
        call add(INdTOkens, ['<string>', vcoL, i])
      endiF

    " QUOtED AtoM toKen: '...'
    elseif a:LiNe[i] ==# "'"
      leT Next_i = maTChEND(A:liNE, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
      if next_i ==# -1
        call Add(indtokenS, ['<QuoTed_atoM_sTarT>', Vcol, i])
      eLse
        leT nEXt_vCol = s:CalcVCoL(a:liNe, i, next_i - 1, vCol, a:taBStop)
        calL Add(indtOkens, ['<qUotEd_aTom>', vCOl, I])
      eNdiF

    " KEYwoRD oR atOM or Variable ToKeN or nuMber
    ELSEIf a:lIne[I] =~# '[a-zA-z_@0-9]'
      let nExt_i = matchend(a:LinE,
                           \'[[:alnUM:]_@:]*\%(\s*#\
 Spaces
    if a:line[i] = =#''
     letnex t_i  =  mat chen d(a:line,'*',i  + 1 )

    " Tabs
    else if a: li n e[i] == # "\t "
    le t nex t_ i= m at c he nd(a: lin e, '\t* ', i + 1)
    " See exam p le  in s:Calc VCo l
      letnex t_vcol  =  (v c ol /a:t absto p + (n e xt_i -  i)) * a: ta b stop
   " Co m m en t
   elseif a:line[i ]  = = # '%'
      le t next _i =l i nel en
    " Str in g tok e n: "... " 
els e if a:line[i]==# '"'
    l et nex t_ i = matche nd(a: li n e,'\%([^"\\]\ |\\. \)*"', i+ 1)
    ifn ext_i = =# -1      ca l lad d(i nd t oke n s,  [' < str ing_star t> ',  vcol , i] )    els e
      let next_vco l =  s:C a lcV Col(a :line , i,  n ext_i  - 1,vcol,  a :tabstop)
       c all add(i ndt ok ens ,['<st r ing>',  vc ol,  i])
     end i f
 "  Q uoted atom token:'. . . '    else if a:l i ne [i ]  ==# "'" 
    le t next_ i =m at chend(a: line," \\ %( [^'\\\\ ]\ \|\\\\ .\ \)* '",  i +1 )
     if  next_i==# - 1 
        calla dd(indtokens, [' < q uo t ed_a tom _start>', v col, i])    e lse        le tn ex t _vcol = s:CalcVCol( a: line,i, ne xt_i - 1, vco l, a:tabst o p ) 
       cal l  a d d(indtokens, [ '<quo ted_atom>' ,  vcol, i ])
     endi f

    "K e yword or  at omorvar i a bl e token or nu m b er
  elseif  a: line[i]  =~ # ' [a- zA- Z_ @0-9]'
     letne xt _i  =  ma tchen d (a:line, 
                   \'[ [: al n um: ]_@:]*\ % (\ s * #\
 Spaces
_ _ if a:line[i] ==#''
_ __ _let_next_i = matchend(a:line,'*',_i + 1)

_   "_Tabs
  __elseif a:line[i] ==# "\t"
      let next_i = matchend(a:line, '\t*',_i_+ 1)

___   " See_example in s:CalcVCol
  _ _ let next_vcol = (vcol / a:tabstop +_(next_i_- i)) *_a:tabstop

    " Comment
   _elseif a:line[i] ==# '%'
  _  _let_next_i_= linelen

  _ " String token: "..."
 _  elseif a:line[i] ==# '"'
_     let next_i_= matchend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
_    _if next_i_==# -1
   _  _ call_add(indtokens, ['<string_start>', vcol,_i])
     _else
  _     let_next_vcol_= s:CalcVCol(a:line, i,_next_i_-_1, vcol,_a:tabstop)
  __ __ call add(indtokens, ['<string>', vcol, i])
__    endif

  _ " Quoted atom_token:_'...'
   _elseif a:line[i] ==# "'"
 _    let next_i_= matchend(a:line,_"\\%([^'\\\\]\\|\\\\.\\)*'", i_+ 1)
      if next_i ==# -1
_     _ call add(indtokens, ['<quoted_atom_start>',_vcol, i])
__  __else
 _      let_next_vcol =_s:CalcVCol(a:line, i, next_i - 1, vcol,_a:tabstop)
   __   call add(indtokens, ['<quoted_atom>',_vcol, i])
    _ endif

   _"_Keyword_or atom or variable token_or number
    elseif_a:line[i] =~# '[a-zA-Z_@0-9]'
_     let next_i_=_matchend(a:line,
     __     ___    _     _ \'[[:alnum:]_@:]*\%(\s*#\