diff options
author | Dan Reif <dan.reif@collectivehealth.com> | 2018-05-08 10:19:22 -0700 |
---|---|---|
committer | Dan Reif <dan.reif@collectivehealth.com> | 2018-05-08 10:19:22 -0700 |
commit | dc8b2f45deb7e0d139f1fe01881faa1b676d043f (patch) | |
tree | 639bfcf9540b6e4bd042844645623ea75186e04e /indent/applescript.vim | |
parent | aa5502c32efb22c3835e1393f18c484a34eabdb3 (diff) | |
download | vim-polyglot-dc8b2f45deb7e0d139f1fe01881faa1b676d043f.tar.gz vim-polyglot-dc8b2f45deb7e0d139f1fe01881faa1b676d043f.zip |
applescript: vim-scripts -> mityu
Diffstat (limited to 'indent/applescript.vim')
-rw-r--r-- | indent/applescript.vim | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/indent/applescript.vim b/indent/applescript.vim new file mode 100644 index 00000000..67c51b35 --- /dev/null +++ b/indent/applescript.vim @@ -0,0 +1,81 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'applescript') == -1 + +"Plugin Name: applescript indent file. +"Author: mityu +"Last Change: 02-May-2017. + +let s:cpo_save=&cpo +set cpo&vim + +setlocal indentexpr=GetAppleScriptIndent() +setlocal indentkeys+=0=end,0=else,=error + +func! GetAppleScriptIndent() + let l:ignorecase_save=&ignorecase + try + let &ignorecase=0 + return s:returnAppleScriptIndent() + finally + let &ignorecase=l:ignorecase_save + endtry +endfunc + +func! s:returnAppleScriptIndent() + let l:current_text=getline(v:lnum) + + let l:prev_line=prevnonblank(v:lnum-1) + + "At the start of the file, use 0 indent. + if l:prev_line==0 + return 0 + endif + + let l:prev_line_save=l:prev_line + let l:prev_line=s:prev_non_connected_line(l:prev_line) + + let l:indent=indent(l:prev_line) + + if l:prev_line_save-l:prev_line==1 + "連結開始 + let l:indent+=shiftwidth()*2 + elseif l:prev_line_save-l:prev_line>=2 + "絶賛連結中 + "その時は前の行のインデントをそのまま流用する + return indent(l:prev_line_save) + elseif l:prev_line_save==l:prev_line && s:doesOrderConnect(getline(l:prev_line-1)) + "前の行が連結される行の最終行の場合 + let l:prev_line=s:prev_non_connected_line(l:prev_line-1) + if l:prev_line==0 | let l:prev_line=1 | endif + let l:indent=indent(l:prev_line) + endif + + let l:prev_text=getline(l:prev_line) + if l:prev_text=~'^\s*\(on\|\(tell\(.*\<to\>\)\@!\)\|repeat\|try\|if\|else\)' + let l:indent+=shiftwidth() + endif + + if l:current_text=~'^\s*\(end\|else\|on\serror\)' + let l:indent-=shiftwidth() + endif + + return l:indent +endfunc + +func! s:prev_non_connected_line(line) + let l:prev_line=prevnonblank(a:line) + while l:prev_line>0 && s:doesOrderConnect(getline(l:prev_line)) + let l:prev_line-=1 + endwhile + return l:prev_line +endfunc + +func! s:doesOrderConnect(text) + return a:text=~'¬$' +endfunc + +let &cpo=s:cpo_save +unlet s:cpo_save + +" vim: foldmethod=marker + +endif |