__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
" Vim indent file
" Language:    SQL
" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
" Last Change: 2021 Oct 11
" Version:     4.0
" Download:    http://vim.sourceforge.net/script.php?script_id=495

" Notes:
"    Indenting keywords are based on Oracle and Sybase Adaptive Server
"    Anywhere (ASA).  Test indenting was done with ASA stored procedures and
"    functions and Oracle packages which contain stored procedures and
"    functions.
"    This has not been tested against Microsoft SQL Server or
"    Sybase Adaptive Server Enterprise (ASE) which use the Transact-SQL
"    syntax.  That syntax does not have end tags for IF's, which makes
"    indenting more difficult.
"
" Known Issues:
"    The Oracle MERGE statement does not have an end tag associated with
"    it, this can leave the indent hanging to the right one too many.
"
" History:
"    4.0 (Oct 2021)
"        Added b:undo_indent
"
"    3.0 (Dec 2012)
"        Added cpo check
"
"    2.0
"        Added the FOR keyword to SQLBlockStart to handle (Alec Tica):
"            for i in 1..100 loop
"              |<-- I expect to have indentation here
"            end loop;
"

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

setlocal indentkeys-=0{
setlocal indentkeys-=0}
setlocal indentkeys-=:
setlocal indentkeys-=0#
setlocal indentkeys-=e

" This indicates formatting should take place when one of these
" expressions is used.  These expressions would normally be something
" you would type at the BEGINNING of a line
" SQL is generally case insensitive, so this files assumes that
" These keywords are something that would trigger an indent LEFT, not
" an indent right, since the SQLBlockStart is used for those keywords
setlocal indentkeys+==~end,=~else,=~elseif,=~elsif,0=~when,0=)

" GetSQLIndent is executed whenever one of the expressions
" in the indentkeys is typed
setlocal indentexpr=GetSQLIndent()

let b:undo_indent = "setl indentexpr< indentkeys<"

" Only define the functions once.
if exists("*GetSQLIndent")
    finish
endif

let s:keepcpo= &cpo
set cpo&vim

" List of all the statements that start a new block.
" These are typically words that start a line.
" IS is excluded, since it is difficult to determine when the
" ending block is (especially for procedures/functions).
let s:SQLBlockStart = '^\s*\%('.
                \ 'if\|else\|elseif\|elsif\|'.
                \ 'while\|loop\|do\|for\|'.
                \ 'begin\|'.
                \ 'case\|when\|merge\|exception'.
                \ '\)\>'
let s:SQLBlockEnd = '^\s*\(end\)\>'

" The indent level is also based on unmatched parentheses
" If a line has an extra "(" increase the indent
" If a line has an extra ")" decrease the indent
function! s:CountUnbalancedParen( line, paren_to_check )
    let l = a:line
    let lp = substitute(l, '[^(]', '', 'g')
    let l = a:line
    let rp = substitute(l, '[^)]', '', 'g')

    if a:paren_to_check =~ ')'
        " echom 'CountUnbalancedParen ) returning: ' .
        " \ (strlen(rp) - strlen(lp))
        return (strlen(rp) - strlen(lp))
    elseif a:paren_to_check =~ '('
        " echom 'CountUnbalancedParen ( returning: ' .
        " \ (strlen(lp) - strlen(rp))
        return (strlen(lp) - strlen(rp))
    else
        " echom 'CountUnbalancedParen unknown paren to check: ' .
        " \ a:paren_to_check
        return 0
    endif
endfunction

" Unindent commands based on previous indent level
function! s:CheckToIgnoreRightParen( prev_lnum, num_levels )
    let lnum = a:prev_lnum
    let line = getline(lnum)
    let ends = 0
    let num_right_paren = a:num_levels
    let ignore_paren = 0
    let vircol = 1

    while num_right_paren > 0
        silent! exec 'norm! '.lnum."G\<bar>".vircol."\<bar>"
        let right_paren = search( ')', 'W' )
        if right_paren != lnum
            " This should not happen since there should be at least
            " num_right_paren matches for this line
            break
        endif
        let vircol      = virtcol(".")

        " if getline(".") =~ '^)'
        let matching_paren = searchpair('(', '', ')', 'bW',
                    \ 's:IsColComment(line("."), col("."))')

        if matching_paren < 1
            " No match found
            " echom 'CTIRP - no match found, ignoring'
            break
        endif

        if matching_paren == lnum
            " This was not an unmatched parentheses, start the search again
            " again after this column
            " echom 'CTIRP - same line match, ignoring'
            continue
        endif

        " echom 'CTIRP - match: ' . line(".") . '  ' . getline(".")

        if getline(matching_paren) =~? '\(if\|while\)\>'
            " echom 'CTIRP - if/while ignored: ' . line(".") . '  ' . getline(".")
            let ignore_paren = ignore_paren + 1
        endif

        " One match found, decrease and check for further matches
        let num_right_paren = num_right_paren - 1

    endwhile

    " Fallback - just move back one
    " return a:prev_indent - shiftwidth()
    return ignore_paren
endfunction

" Based on the keyword provided, loop through previous non empty
" non comment lines to find the statement that initiated the keyword.
" Return its indent level
"    CASE ..
"    WHEN ...
" Should return indent level of CASE
"    EXCEPTION ..
"    WHEN ...
"         something;
"    WHEN ...
" Should return indent level of exception.
function! s:GetStmtStarterIndent( keyword, curr_lnum )
    let lnum  = a:curr_lnum

    " Default - reduce indent by 1
    let ind = indent(a:curr_lnum) - shiftwidth()

    if a:keyword =~? 'end'
        exec 'normal! ^'
        let stmts = '^\s*\%('.
                    \ '\<begin\>\|' .
                    \ '\%(\%(\<end\s\+\)\@<!\<loop\>\)\|' .
                    \ '\%(\%(\<end\s\+\)\@<!\<case\>\)\|' .
                    \ '\%(\%(\<end\s\+\)\@<!\<for\>\)\|' .
                    \ '\%(\%(\<end\s\+\)\@<!\<if\>\)'.
                    \ '\)'
        let matching_lnum = searchpair(stmts, '', '\<end\>\zs', 'bW',
                    \ 's:IsColComment(line("."), col(".")) == 1')
        exec 'normal! $'
        if matching_lnum > 0 && matching_lnum < a:curr_lnum
            let ind = indent(matching_lnum)
        endif
    elseif a:keyword =~? 'when'
        exec 'normal! ^'
        let matching_lnum = searchpair(
                    \ '\%(\<end\s\+\)\@<!\<case\>\|\<exception\>\|\<merge\>',
                    \ '',
                    \ '\%(\%(\<when\s\+others\>\)\|\%(\<end\s\+case\>\)\)',
                    \ 'bW',
                    \ 's:IsColComment(line("."), col(".")) == 1')
        exec 'normal! $'
        if matching_lnum > 0 && matching_lnum < a:curr_lnum
            let ind = indent(matching_lnum)
        else
            let ind = indent(a:curr_lnum)
        endif
    endif

    return ind
endfunction


" Check if the line is a comment
function! s:IsLineComment(lnum)
    let rc = synIDattr(
                \ synID(a:lnum,
                \     match(getline(a:lnum), '\S')+1, 0)
                \ , "name")
                \ =~? "comment"

    return rc
endfunction


" Check if the column is a comment
function! s:IsColComment(lnum, cnum)
    let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
                \           =~? "comment"

    return rc
endfunction


" Instead of returning a column position, return
" an appropriate value as a factor of shiftwidth.
function! s:ModuloIndent(ind)
    let ind = a:ind

    if ind > 0
        let modulo = ind % shiftwidth()

        if modulo > 0
            let ind = ind - modulo
        endif
    endif

    return ind
endfunction


" Find correct indent of a new line based upon the previous line
function! GetSQLIndent()
    let lnum = v:lnum
    let ind = indent(lnum)

    " If the current line is a comment, leave the indent as is
    " Comment out this additional check since it affects the
    " indenting of =, and will not reindent comments as it should
    " if s:IsLineComment(lnum) == 1
    "     return ind
    " endif

    " Get previous non-blank line
    let prevlnum = prevnonblank(lnum - 1)
    if prevlnum <= 0
        return ind
    endif

    if s:IsLineComment(prevlnum) == 1
        if getline(v:lnum) =~ '^\s*\*'
            let ind = s:ModuloIndent(indent(prevlnum))
            return ind + 1
        endif
        " If the previous line is a comment, then return -1
        " to tell Vim to use the formatoptions setting to determine
        " the indent to use
        " But only if the next line is blank.  This would be true if
        " the user is typing, but it would not be true if the user
        " is reindenting the file
        if getline(v:lnum) =~ '^\s*$'
            return -1
        endif
    endif

    " echom 'PREVIOUS INDENT: ' . indent(prevlnum) . '  LINE: ' . getline(prevlnum)

    " This is the line you just hit return on, it is not the current line
    " which is new and empty
    " Based on this line, we can determine how much to indent the new
    " line

    " Get default indent (from prev. line)
    let ind      = indent(prevlnum)
    let prevline = getline(prevlnum)

    " Now check what's on the previous line to determine if the indent
    " should be changed, for example IF, BEGIN, should increase the indent
    " where END IF, END, should decrease the indent.
    if prevline =~? s:SQLBlockStart
        " Move indent in
        let ind = ind + shiftwidth()
        " echom 'prevl - SQLBlockStart - indent ' . ind . '  line: ' . prevline
    elseif prevline =~ '[()]'
        if prevline =~ '('
            let num_unmatched_left = s:CountUnbalancedParen( prevline, '(' )
        else
            let num_unmatched_left = 0
        endif
        if prevline =~ ')'
            let num_unmatched_right  = s:CountUnbalancedParen( prevline, ')' )
        else
            let num_unmatched_right  = 0
            " let num_unmatched_right  = s:CountUnbalancedParen( prevline, ')' )
        endif
        if num_unmatched_left > 0
            " There is a open left parenthesis
            " increase indent
            let ind = ind + ( shiftwidth() * num_unmatched_left )
        elseif num_unmatched_right > 0
            " if it is an unbalanced parenthesis only unindent if
            " it was part of a command (ie create table(..)  )
            " instead of part of an if (ie if (....) then) which should
            " maintain the indent level
            let ignore = s:CheckToIgnoreRightParen( prevlnum, num_unmatched_right )
            " echom 'prevl - ) unbalanced - CTIRP - ignore: ' . ignore

            if prevline =~ '^\s*)'
                let ignore = ignore + 1
                " echom 'prevl - begins ) unbalanced ignore: ' . ignore
            endif

            if (num_unmatched_right - ignore) > 0
                let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) )
            endif

        endif
    endif


    " echom 'CURRENT INDENT: ' . ind . '  LINE: '  . getline(v:lnum)

    " This is a new blank line since we just typed a carriage return
    " Check current line; search for simplistic matching start-of-block
    let line = getline(v:lnum)

    if line =~? '^\s*els'
        " Any line when you type else will automatically back up one
        " ident level  (ie else, elseif, elsif)
        let ind = ind - shiftwidth()
        " echom 'curr - else - indent ' . ind
    elseif line =~? '^\s*end\>'
        let ind = s:GetStmtStarterIndent('end', v:lnum)
        " General case for end
        " let ind = ind - shiftwidth()
        " echom 'curr - end - indent ' . ind
    elseif line =~? '^\s*when\>'
        let ind = s:GetStmtStarterIndent('when', v:lnum)
        " If the WHEN clause is used with a MERGE or EXCEPTION
        " clause, do not change the indent level, since these
        " statements do not have a corresponding END statement.
        " if stmt_starter =~? 'case'
        "    let ind = ind - shiftwidth()
        " endif
        " elseif line =~ '^\s*)\s*;\?\s*$'
        " elseif line =~ '^\s*)'
    elseif line =~ '^\s*)'
        let num_unmatched_right  = s:CountUnbalancedParen( line, ')' )
        let ignore = s:CheckToIgnoreRightParen( v:lnum, num_unmatched_right )
        " If the line ends in a ), then reduce the indent
        " This catches items like:
        " CREATE TABLE T1(
        "    c1 int,
        "    c2 int
        "    );
        " But we do not want to unindent a line like:
        " IF ( c1 = 1
        " AND  c2 = 3 ) THEN
        " let num_unmatched_right  = s:CountUnbalancedParen( line, ')' )
        " if num_unmatched_right > 0
        " elseif strpart( line, strlen(line)-1, 1 ) =~ ')'
        " let ind = ind - shiftwidth()
        if line =~ '^\s*)'
            " let ignore = ignore + 1
            " echom 'curr - begins ) unbalanced ignore: ' . ignore
        endif

        if (num_unmatched_right - ignore) > 0
            let ind = ind - ( shiftwidth() * (num_unmatched_right - ignore) )
        endif
        " endif
    endif

    " echom 'final - indent ' . ind
    return s:ModuloIndent(ind)
endfunction

"  Restore:
let &cpo= s:keepcpo
unlet s:keepcpo
" vim: ts=4 fdm=marker sw=4

Filemanager

Name Type Size Permission Actions
aap.vim File 331 B 0644
ada.vim File 11.06 KB 0644
ant.vim File 290 B 0644
automake.vim File 243 B 0644
awk.vim File 7.68 KB 0644
bash.vim File 390 B 0644
basic.vim File 250 B 0644
bib.vim File 346 B 0644
bitbake.vim File 583 B 0644
bst.vim File 1.86 KB 0644
bzl.vim File 2.86 KB 0644
c.vim File 391 B 0644
cdl.vim File 4.26 KB 0644
ch.vim File 556 B 0644
chaiscript.vim File 1.18 KB 0644
changelog.vim File 264 B 0644
chatito.vim File 731 B 0644
clojure.vim File 11.29 KB 0644
cmake.vim File 2.98 KB 0644
cobol.vim File 8.63 KB 0644
config.vim File 2.17 KB 0644
context.vim File 1.67 KB 0644
cpp.vim File 395 B 0644
cs.vim File 1.88 KB 0644
css.vim File 1.77 KB 0644
cucumber.vim File 2.74 KB 0644
cuda.vim File 371 B 0644
d.vim File 605 B 0644
dictconf.vim File 411 B 0644
dictdconf.vim File 414 B 0644
docbk.vim File 336 B 0644
dosbatch.vim File 1.35 KB 0644
dtd.vim File 11.79 KB 0644
dtrace.vim File 451 B 0644
dts.vim File 1.69 KB 0644
dune.vim File 430 B 0644
dylan.vim File 2.75 KB 0644
eiffel.vim File 3.24 KB 0644
elm.vim File 3.2 KB 0644
erlang.vim File 50.74 KB 0644
eruby.vim File 2.95 KB 0644
eterm.vim File 743 B 0644
expect.vim File 207 B 0644
falcon.vim File 13.84 KB 0644
fennel.vim File 273 B 0644
fish.vim File 2.66 KB 0644
fortran.vim File 7.72 KB 0644
framescript.vim File 891 B 0644
freebasic.vim File 237 B 0644
gdscript.vim File 4.26 KB 0644
gitconfig.vim File 841 B 0644
gitolite.vim File 1.29 KB 0644
go.vim File 1.73 KB 0644
gyp.vim File 169 B 0644
haml.vim File 2.19 KB 0644
hamster.vim File 1.65 KB 0644
hare.vim File 4.38 KB 0644
hog.vim File 1.85 KB 0644
html.vim File 33.12 KB 0644
htmldjango.vim File 273 B 0644
idlang.vim File 1.68 KB 0644
ishd.vim File 1.83 KB 0644
j.vim File 1.77 KB 0644
java.vim File 4.19 KB 0644
javascript.vim File 15.13 KB 0644
javascriptreact.vim File 109 B 0644
json.vim File 4.54 KB 0644
jsonc.vim File 4.74 KB 0644
jsp.vim File 462 B 0644
julia.vim File 15.29 KB 0644
kotlin.vim File 1.53 KB 0644
krl.vim File 4.25 KB 0644
ld.vim File 1.82 KB 0644
less.vim File 243 B 0644
lifelines.vim File 638 B 0644
liquid.vim File 2.03 KB 0644
lisp.vim File 349 B 0644
livebook.vim File 206 B 0644
logtalk.vim File 1.91 KB 0644
lua.vim File 2.22 KB 0644
luau.vim File 252 B 0644
mail.vim File 385 B 0644
make.vim File 3.48 KB 0644
matlab.vim File 4.81 KB 0644
meson.vim File 5.19 KB 0644
mf.vim File 164 B 0644
mma.vim File 2.31 KB 0644
mp.vim File 9.72 KB 0644
nginx.vim File 1.7 KB 0644
nsis.vim File 3.23 KB 0644
objc.vim File 1.65 KB 0644
obse.vim File 1.4 KB 0644
ocaml.vim File 9.09 KB 0644
occam.vim File 4.63 KB 0644
pascal.vim File 5.66 KB 0644
perl.vim File 5.91 KB 0644
php.vim File 25.76 KB 0644
postscr.vim File 1.64 KB 0644
pov.vim File 2.71 KB 0644
prolog.vim File 1.91 KB 0644
ps1.vim File 410 B 0644
pyrex.vim File 326 B 0644
python.vim File 886 B 0644
qb64.vim File 232 B 0644
qml.vim File 1.27 KB 0644
quarto.vim File 23 B 0644
r.vim File 13.96 KB 0644
racket.vim File 2.87 KB 0644
raku.vim File 3.45 KB 0644
raml.vim File 285 B 0644
rapid.vim File 7.97 KB 0644
readline.vim File 786 B 0644
rhelp.vim File 2.83 KB 0644
rmd.vim File 2.25 KB 0644
rnoweb.vim File 1.1 KB 0644
rpl.vim File 1.82 KB 0644
rrst.vim File 1.19 KB 0644
rst.vim File 1.9 KB 0644
ruby.vim File 30.33 KB 0644
rust.vim File 10.26 KB 0644
sas.vim File 5.18 KB 0644
sass.vim File 926 B 0644
scala.vim File 19.3 KB 0644
scheme.vim File 372 B 0644
scss.vim File 191 B 0644
sdl.vim File 2.76 KB 0644
sh.vim File 9.04 KB 0644
sml.vim File 6.42 KB 0644
solidity.vim File 12.61 KB 0644
sql.vim File 1.18 KB 0644
sqlanywhere.vim File 12.96 KB 0644
sshconfig.vim File 796 B 0644
systemverilog.vim File 10.55 KB 0644
tcl.vim File 2.48 KB 0644
tcsh.vim File 1.35 KB 0644
teraterm.vim File 1.38 KB 0644
tex.vim File 13.52 KB 0644
tf.vim File 1.57 KB 0644
tilde.vim File 1.11 KB 0644
treetop.vim File 785 B 0644
typescript.vim File 14.28 KB 0644
typescriptreact.vim File 109 B 0644
vb.vim File 4.69 KB 0644
verilog.vim File 8.08 KB 0644
vhdl.vim File 14.43 KB 0644
vim.vim File 675 B 0644
vroom.vim File 379 B 0644
vue.vim File 385 B 0644
wat.vim File 458 B 0644
xf86conf.vim File 786 B 0644
xhtml.vim File 325 B 0644
xinetd.vim File 1.28 KB 0644
xml.vim File 7.6 KB 0644
xsd.vim File 253 B 0644
xslt.vim File 297 B 0644
yacc.vim File 858 B 0644
yaml.vim File 5.45 KB 0644
zig.vim File 2.09 KB 0644
zimbu.vim File 3.92 KB 0644
zsh.vim File 411 B 0644
Filemanager