[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@3.139.67.114: ~ $
" MetaPost indent file
" Language:	MetaPost
" Maintainer:	Eugene Minkovskii <emin@mccme.ru>
" Last Change:	2012 May 18
" Version: 0.1
" ==========================================================================

" Identation Rules: {{{1
" First of all, MetaPost language don't expect any identation rules.
" This screept need for you only if you (not MetaPost) need to do
" exactly code. If you don't need to use indentation, see
" :help filetype-indent-off
"
" Note: Every rules of identation in MetaPost or TeX languages (and in some
" other of course) is very subjective. I can release only my vision of this
" promlem.
"
" ..........................................................................
" Example of correct (by me) identation {{{2
" shiftwidth=4
" ==========================================================================
" for i=0 upto 99:
"     z[i] = (0,1u) rotated (i*360/100);
" endfor
" draw z0 -- z10 -- z20
"         withpen ...     % <- 2sw because breaked line
"         withcolor ...;  % <- same as previous
" draw z0 for i=1 upto 99:
"             -- z[i]             % <- 1sw from left end of 'for' satement
"         endfor withpen ...      % <- 0sw from left end of 'for' satement
"                 withcolor ...;  % <- 2sw because breaked line
" draw if One:     % <- This is internal if (like 'for' above)
"          one
"      elsif Other:
"          other
"      fi withpen ...;
" if one:          % <- This is external if
"     draw one;
" elseif other:
"     draw other;
" fi
" draw z0; draw z1;
" }}}
" }}}

" Only load this indent file when no other was loaded.
if exists("b:did_indent")
  finish
endif
let b:did_indent = 1

setlocal indentexpr=GetMetaPostIndent()
setlocal indentkeys+=;,<:>,=if,=for,=def,=end,=else,=fi

" Only define the function once.
if exists("*GetMetaPostIndent")
  finish
endif
let s:keepcpo= &cpo
set cpo&vim

" Auxiliary Definitions: {{{1
function! MetaNextNonblankNoncomment(pos)
  " Like nextnonblank() but ignore comment lines
  let tmp = nextnonblank(a:pos)
  while tmp && getline(tmp) =~ '^\s*%'
    let tmp = nextnonblank(tmp+1)
  endwhile
  return tmp
endfunction

function! MetaPrevNonblankNoncomment(pos)
  " Like prevnonblank() but ignore comment lines
  let tmp = prevnonblank(a:pos)
  while tmp && getline(tmp) =~ '^\s*%'
    let tmp = prevnonblank(tmp-1)
  endwhile
  return tmp
endfunction

function! MetaSearchNoncomment(pattern, ...)
  " Like search() but ignore commented areas
  if a:0
    let flags = a:1
  elseif &wrapscan
    let flags = "w"
  else
    let flags = "W"
  endif
  let cl  = line(".")
  let cc  = col(".")
  let tmp = search(a:pattern, flags)
  while tmp && synIDattr(synID(line("."), col("."), 1), "name") =~
        \ 'm[fp]\(Comment\|TeXinsert\|String\)'
    let tmp = search(a:pattern, flags)
  endwhile
  if !tmp
    call cursor(cl,cc)
  endif
  return tmp
endfunction
" }}}

function! GetMetaPostIndent()
  " not indent in comment ???
  if synIDattr(synID(line("."), col("."), 1), "name") =~
        \ 'm[fp]\(Comment\|TeXinsert\|String\)'
    return -1
  endif
  " Some RegExps: {{{1
  " end_of_item: all of end by ';'
  "            + all of end by :endfor, :enddef, :endfig, :endgroup, :fi
  "            + all of start by :beginfig(num), :begingroup
  "            + all of start by :for, :if, :else, :elseif and end by ':'
  "            + all of start by :def, :vardef             and end by '='
  let end_of_item = '\('                              .
        \ ';\|'                                       .
        \ '\<\(end\(for\|def\|fig\|group\)\|fi\)\>\|' .
        \ '\<begin\(group\>\|fig\s*(\s*\d\+\s*)\)\|'  .
        \ '\<\(for\|if\|else\(if\)\=\)\>.\+:\|'       .
        \ '\<\(var\)\=def\>.\+='                      . '\)'
  " }}}
  " Save: current position {{{1
  let cl = line   (".")
  let cc = col    (".")
  let cs = getline(".")
  " if it is :beginfig or :endfig use zero indent
  if  cs =~ '^\s*\(begin\|end\)fig\>'
    return 0
  endif
  " }}}
  " Initialise: ind variable {{{1
  " search previous item not in current line
  let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
  while p_semicol_l == cl
    let p_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
  endwhile
  " if this is first item in program use zero indent
  if !p_semicol_l
    return 0
  endif
  " if this is multiline item, remember first indent
  if MetaNextNonblankNoncomment(p_semicol_l+1) < cl
    let ind = indent(MetaNextNonblankNoncomment(p_semicol_l+1))
  " else --- search pre-previous item for search first line in previous item
  else
    " search pre-previous item not in current line
    let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
    while pp_semicol_l == p_semicol_l
      let pp_semicol_l = MetaSearchNoncomment(end_of_item,"bW")
    endwhile
    " if we find pre-previous item, remember indent of previous item
    " else --- remember zero
    if pp_semicol_l
      let ind = indent(MetaNextNonblankNoncomment(line(".")+1))
    else
      let ind = 0
    endif
  endif
  " }}}
  " Increase Indent: {{{1
  " if it is an internal/external :for or :if statements {{{2
  let pnn_s = getline(MetaPrevNonblankNoncomment(cl-1))
  if  pnn_s =~ '\<\(for\|if\)\>.\+:\s*\($\|%\)'
    let ind = match(pnn_s, '\<\(for\|if\)\>.\+:\s*\($\|%\)') + &sw
  " }}}
  " if it is a :def, :vardef, :beginfig, :begingroup, :else, :elseif {{{2
  elseif pnn_s =~ '^\s*\('                       .
        \ '\(var\)\=def\|'                       .
        \ 'begin\(group\|fig\s*(\s*\d\+\s*)\)\|' .
        \ 'else\(if\)\='                         . '\)\>'
    let ind = ind + &sw
  " }}}
  " if it is a broken line {{{2
  elseif pnn_s !~ end_of_item.'\s*\($\|%\)'
    let ind = ind + (2 * &sw)
  endif
  " }}}
  " }}}
  " Decrease Indent: {{{1
  " if this is :endfor or :enddef statements {{{2
  " this is correct because :def cannot be inside :for
  if  cs  =~ '\<end\(for\|def\)\=\>'
    call MetaSearchNoncomment('\<for\>.\+:\s*\($\|%\)' . '\|' .
                            \ '^\s*\(var\)\=def\>',"bW")
    if col(".") > 1
      let ind = col(".") - 1
    else
      let ind = indent(".")
    endif
  " }}}
  " if this is :fi, :else, :elseif statements {{{2
  elseif cs =~ '\<\(else\(if\)\=\|fi\)\>'
    call MetaSearchNoncomment('\<if\>.\+:\s*\($\|%\)',"bW")
    let ind = col(".") - 1
  " }}}
  " if this is :endgroup statement {{{2
  elseif cs =~ '^\s*endgroup\>'
    let ind = ind - &sw
  endif
  " }}}
  " }}}

  return ind
endfunction
"

let &cpo = s:keepcpo
unlet s:keepcpo

" vim:sw=2:fdm=marker

Filemanager

Name Type Size Permission Actions
README.txt File 1.6 KB 0644
aap.vim File 265 B 0644
ada.vim File 10.89 KB 0644
ant.vim File 290 B 0644
automake.vim File 231 B 0644
awk.vim File 7.57 KB 0644
bib.vim File 346 B 0644
bst.vim File 1.87 KB 0644
c.vim File 325 B 0644
cdl.vim File 4.07 KB 0644
ch.vim File 470 B 0644
chaiscript.vim File 1.11 KB 0644
changelog.vim File 264 B 0644
clojure.vim File 11.85 KB 0644
cmake.vim File 2.69 KB 0644
cobol.vim File 8 KB 0644
config.vim File 2.12 KB 0644
cpp.vim File 329 B 0644
cs.vim File 327 B 0644
css.vim File 1.68 KB 0644
cucumber.vim File 2.56 KB 0644
cuda.vim File 305 B 0644
d.vim File 510 B 0644
dictconf.vim File 325 B 0644
dictdconf.vim File 326 B 0644
docbk.vim File 324 B 0644
dtd.vim File 11.39 KB 0644
dtrace.vim File 451 B 0644
dylan.vim File 2.6 KB 0644
eiffel.vim File 3.13 KB 0644
erlang.vim File 45.15 KB 0644
eruby.vim File 2.11 KB 0644
eterm.vim File 638 B 0644
falcon.vim File 13.65 KB 0644
fortran.vim File 6.41 KB 0644
framescript.vim File 786 B 0644
gitconfig.vim File 817 B 0644
gitolite.vim File 996 B 0644
haml.vim File 2.14 KB 0644
hamster.vim File 1.37 KB 0644
html.vim File 14.46 KB 0644
htmldjango.vim File 273 B 0644
idlang.vim File 1.53 KB 0644
ishd.vim File 1.8 KB 0644
java.vim File 4.02 KB 0644
javascript.vim File 336 B 0644
jsp.vim File 462 B 0644
ld.vim File 1.71 KB 0644
lifelines.vim File 637 B 0644
liquid.vim File 1.83 KB 0644
lisp.vim File 353 B 0644
logtalk.vim File 1.65 KB 0644
lua.vim File 1.87 KB 0644
mail.vim File 308 B 0644
make.vim File 3.35 KB 0644
matlab.vim File 1.88 KB 0644
mma.vim File 2.17 KB 0644
mp.vim File 6.37 KB 0644
objc.vim File 1.61 KB 0644
ocaml.vim File 8.9 KB 0644
occam.vim File 4.53 KB 0644
pascal.vim File 5.52 KB 0644
perl.vim File 5.67 KB 0644
perl6.vim File 3.42 KB 0644
php.vim File 18.97 KB 0644
postscr.vim File 1.58 KB 0644
pov.vim File 2.58 KB 0644
prolog.vim File 1.42 KB 0644
pyrex.vim File 326 B 0644
python.vim File 5.61 KB 0644
r.vim File 14.44 KB 0644
readline.vim File 681 B 0644
rpl.vim File 1.79 KB 0644
rst.vim File 1.35 KB 0644
ruby.vim File 17.13 KB 0644
sass.vim File 1018 B 0644
scheme.vim File 241 B 0644
scss.vim File 191 B 0644
sdl.vim File 2.7 KB 0644
sh.vim File 3.95 KB 0644
sml.vim File 6.27 KB 0644
sql.vim File 1.18 KB 0644
sqlanywhere.vim File 12.77 KB 0644
tcl.vim File 1.56 KB 0644
tcsh.vim File 1.21 KB 0644
tex.vim File 9.47 KB 0644
tf.vim File 1.46 KB 0644
tilde.vim File 994 B 0644
treetop.vim File 677 B 0644
vb.vim File 2 KB 0644
verilog.vim File 7.44 KB 0644
vhdl.vim File 13.48 KB 0644
vim.vim File 2.76 KB 0644
xf86conf.vim File 679 B 0644
xhtml.vim File 269 B 0644
xinetd.vim File 1.17 KB 0644
xml.vim File 2.77 KB 0644
xsd.vim File 253 B 0644
xslt.vim File 297 B 0644
yacc.vim File 769 B 0644
yaml.vim File 4.02 KB 0644
zimbu.vim File 3.8 KB 0644
zsh.vim File 231 B 0644