summaryrefslogtreecommitdiffstats
path: root/runtime/indent/sas.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/indent/sas.vim')
-rw-r--r--runtime/indent/sas.vim38
1 files changed, 19 insertions, 19 deletions
diff --git a/runtime/indent/sas.vim b/runtime/indent/sas.vim
index d591b2796e..9cc9e025c4 100644
--- a/runtime/indent/sas.vim
+++ b/runtime/indent/sas.vim
@@ -1,8 +1,8 @@
" Vim indent file
" Language: SAS
" Maintainer: Zhen-Huan Hu <wildkeny@gmail.com>
-" Version: 3.0.1
-" Last Change: Mar 13, 2017
+" Version: 3.0.3
+" Last Change: Jun 26, 2018
if exists("b:did_indent")
finish
@@ -27,9 +27,9 @@ let s:section_run = '\v%(^|;)\s*run\s*;'
let s:section_end = '\v%(^|;)\s*%(quit|enddata)\s*;'
" Regex that captures the start of a control block (anything inside a section)
-let s:block_str = '\v<%(do>%([^;]+<%(to|over)>[^;]+)=|%(define|layout|method|select)>[^;]+|begingraph)\s*;'
+let s:block_str = '\v<%(do>%([^;]+<%(to|over|while)>[^;]+)=|%(compute|define\s+%(column|footer|header|style|table|tagset|crosstabs|statgraph)|edit|layout|method|select)>[^;]+|begingraph)\s*;'
" Regex that captures the end of a control block (anything inside a section)
-let s:block_end = '\v<%(end|endlayout|endgraph)\s*;'
+let s:block_end = '\v<%(end|endcomp|endlayout|endgraph)\s*;'
" Regex that captures the start of a macro
let s:macro_str = '\v%(^|;)\s*\%macro>'
@@ -52,7 +52,7 @@ function! s:PrevMatch(lnum, regex)
let prev_lnum = prevnonblank(a:lnum - 1)
while prev_lnum > 0
let prev_line = getline(prev_lnum)
- if prev_line =~ a:regex
+ if prev_line =~? a:regex
break
else
let prev_lnum = prevnonblank(prev_lnum - 1)
@@ -71,11 +71,11 @@ function! GetSASIndent()
let prev_line = getline(prev_lnum)
" Previous non-blank line contains the start of a macro/section/block
" while not the end of a macro/section/block (at the same line)
- if (prev_line =~ s:section_str && prev_line !~ s:section_run && prev_line !~ s:section_end) ||
- \ (prev_line =~ s:block_str && prev_line !~ s:block_end) ||
- \ (prev_line =~ s:macro_str && prev_line !~ s:macro_end)
- let ind = indent(prev_lnum) + &sts
- elseif prev_line =~ s:section_run && prev_line !~ s:section_end
+ if (prev_line =~? s:section_str && prev_line !~? s:section_run && prev_line !~? s:section_end) ||
+ \ (prev_line =~? s:block_str && prev_line !~? s:block_end) ||
+ \ (prev_line =~? s:macro_str && prev_line !~? s:macro_end)
+ let ind = indent(prev_lnum) + shiftwidth()
+ elseif prev_line =~? s:section_run && prev_line !~? s:section_end
let prev_section_str_lnum = s:PrevMatch(v:lnum, s:section_str)
let prev_section_end_lnum = max([
\ s:PrevMatch(v:lnum, s:section_end),
@@ -83,9 +83,9 @@ function! GetSASIndent()
\ s:PrevMatch(v:lnum, s:program_end)])
" Check if the section supports run-processing
if prev_section_end_lnum < prev_section_str_lnum &&
- \ getline(prev_section_str_lnum) =~ '\v%(^|;)\s*proc\s+%(' .
+ \ getline(prev_section_str_lnum) =~? '\v%(^|;)\s*proc\s+%(' .
\ join(s:run_processing_procs, '|') . ')>'
- let ind = indent(prev_lnum) + &sts
+ let ind = indent(prev_lnum) + shiftwidth()
else
let ind = indent(prev_lnum)
endif
@@ -95,26 +95,26 @@ function! GetSASIndent()
endif
" Re-adjustments based on the inputs of the current line
let curr_line = getline(v:lnum)
- if curr_line =~ s:program_end
+ if curr_line =~? s:program_end
" End of the program
" Same indentation as the first non-blank line
return indent(nextnonblank(1))
- elseif curr_line =~ s:macro_end
+ elseif curr_line =~? s:macro_end
" Current line is the end of a macro
" Match the indentation of the start of the macro
return indent(s:PrevMatch(v:lnum, s:macro_str))
- elseif curr_line =~ s:block_end && curr_line !~ s:block_str
+ elseif curr_line =~? s:block_end && curr_line !~? s:block_str
" Re-adjust if current line is the end of a block
" while not the beginning of a block (at the same line)
" Returning the indent of previous block start directly
" would not work due to nesting
- let ind = ind - &sts
- elseif curr_line =~ s:section_str || curr_line =~ s:section_run || curr_line =~ s:section_end
+ let ind = ind - shiftwidth()
+ elseif curr_line =~? s:section_str || curr_line =~? s:section_run || curr_line =~? s:section_end
" Re-adjust if current line is the start/end of a section
" since the end of a section could be inexplicit
let prev_section_str_lnum = s:PrevMatch(v:lnum, s:section_str)
" Check if the previous section supports run-processing
- if getline(prev_section_str_lnum) =~ '\v%(^|;)\s*proc\s+%(' .
+ if getline(prev_section_str_lnum) =~? '\v%(^|;)\s*proc\s+%(' .
\ join(s:run_processing_procs, '|') . ')>'
let prev_section_end_lnum = max([
\ s:PrevMatch(v:lnum, s:section_end),
@@ -128,7 +128,7 @@ function! GetSASIndent()
\ s:PrevMatch(v:lnum, s:program_end)])
endif
if prev_section_end_lnum < prev_section_str_lnum
- let ind = ind - &sts
+ let ind = ind - shiftwidth()
endif
endif
return ind