summaryrefslogtreecommitdiffstats
path: root/indent/plantuml.vim
diff options
context:
space:
mode:
Diffstat (limited to 'indent/plantuml.vim')
-rw-r--r--indent/plantuml.vim59
1 files changed, 30 insertions, 29 deletions
diff --git a/indent/plantuml.vim b/indent/plantuml.vim
index 3e0f455d..93ecb8cb 100644
--- a/indent/plantuml.vim
+++ b/indent/plantuml.vim
@@ -14,45 +14,46 @@ if exists("*GetPlantUMLIndent")
endif
let s:incIndent =
- \ '^\s*\(loop\|alt\|opt\|group\|critical\|else\|legend\|box\)\>\|' .
- \ '^\s*\([hr]\?note\|ref\)\>[^:]*$\|' .
- \ '^\s*title\s*$\|' .
- \ '^\s*skinparam\>.*{\s*$\|' .
- \ '^\s*state\>.*{'
+ \ '^\s*\%(loop\|alt\|opt\|group\|critical\|else\|legend\|box\|if\|while\)\>\|' .
+ \ '^\s*ref\>[^:]*$\|' .
+ \ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
+ \ '^\s*title\s*$\|' .
+ \ '^\s*skinparam\>.*{\s*$\|' .
+ \ '^\s*\%(state\|class\|partition\|rectangle\)\>.*{'
-let s:decIndent = '^\s*\(end\|else\|}\)'
+let s:decIndent = '^\s*\%(end\|else\|}\)'
function! GetPlantUMLIndent(...) abort
- "for current line, use arg if given or v:lnum otherwise
- let clnum = a:0 ? a:1 : v:lnum
-
- if !s:insidePlantUMLTags(clnum)
- return indent(clnum)
+ "for current line, use arg if given or v:lnum otherwise
+ let clnum = a:0 ? a:1 : v:lnum
+
+ if !s:insidePlantUMLTags(clnum)
+ return indent(clnum)
+ endif
+
+ let pnum = prevnonblank(clnum-1)
+ let pindent = indent(pnum)
+ let pline = getline(pnum)
+ let cline = getline(clnum)
+
+ if cline =~ s:decIndent
+ if pline =~ s:incIndent
+ return pindent
+ else
+ return pindent - shiftwidth()
endif
- let pnum = prevnonblank(clnum-1)
- let pindent = indent(pnum)
- let pline = getline(pnum)
- let cline = getline(clnum)
-
- if cline =~ s:decIndent
- if pline =~ s:incIndent
- return pindent
- else
- return pindent - shiftwidth()
- endif
-
- elseif pline =~ s:incIndent
- return pindent + shiftwidth()
- endif
+ elseif pline =~ s:incIndent
+ return pindent + shiftwidth()
+ endif
- return pindent
+ return pindent
endfunction
function! s:insidePlantUMLTags(lnum) abort
- call cursor(a:lnum, 1)
- return search('@startuml', 'Wbn') && search('@enduml', 'Wn')
+ call cursor(a:lnum, 1)
+ return search('@startuml', 'Wbn') && search('@enduml', 'Wn')
endfunction
endif