Update runtime files
diff --git a/runtime/syntax/plsql.vim b/runtime/syntax/plsql.vim
index 0ac53d0..7b36c0a 100644
--- a/runtime/syntax/plsql.vim
+++ b/runtime/syntax/plsql.vim
@@ -4,7 +4,7 @@
 " Previous Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com)
 " Previous Maintainer: C. Laurence Gonsalves (clgonsal@kami.com)
 " URL: https://github.com/lee-lindley/vim_plsql_syntax
-" Last Change: April 25, 2022   
+" Last Change: April 28, 2022   
 " History  Lee Lindley (lee dot lindley at gmail dot com)
 "               updated to 19c keywords. refined quoting. 
 "               separated reserved, non-reserved keywords and functions
@@ -23,9 +23,6 @@
 " To enable folding (It does setlocal foldmethod=syntax)
 " let plsql_fold = 1
 "
-" If you want to try procedure folding, it has issues
-" let plsql_procedure_fold = 1
-"
 "     From my vimrc file -- turn syntax and syntax folding on,
 "     associate file suffixes as plsql, open all the folds on file open
 " let plsql_fold = 1
@@ -67,23 +64,23 @@
 
 " Operators. and words that would be something else if not in operator mode
 syn match   plsqlOperator "[-+*/=<>@"]"
-syn match   plsqlOperator "\%\(\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\*\*\|!=\|\~=\)"
-syn match   plsqlOperator "\<\%\(NOT\|AND\|OR\|LIKE\|BETWEEN\|IN\)\>"
+syn match   plsqlOperator "\(\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\*\*\|!=\|\~=\)"
+syn match   plsqlOperator "\<\(NOT\|AND\|OR\|LIKE\|BETWEEN\|IN\)\>"
 syn match   plsqlBooleanLiteral "\<NULL\>"
-syn match   plsqlOperator "\<IS\\_s\+\%\(NOT\_s\+\)\?NULL\>"
+syn match   plsqlOperator "\<IS\\_s\+\(NOT\_s\+\)\?NULL\>"
 "
 " conditional compilation Preprocessor directives and sqlplus define sigil
 syn match plsqlPseudo "$[$a-z][a-z0-9$_#]*"
 syn match plsqlPseudo "&"
 
-syn match plsqlReserved "\<\%\(CREATE\|THEN\|UPDATE\|INSERT\|SET\)\>"
-syn match plsqlKeyword "\<\%\(REPLACE\|PACKAGE\|FUNCTION\|PROCEDURE\|TYPE|BODY\|WHEN\|MATCHED\)\>"
+syn match plsqlReserved "\<\(CREATE\|THEN\|UPDATE\|INSERT\|SET\)\>"
+syn match plsqlKeyword "\<\(REPLACE\|PACKAGE\|FUNCTION\|PROCEDURE\|TYPE|BODY\|WHEN\|MATCHED\)\>"
 syn region plsqlUpdate 
     \ matchgroup=plsqlReserved 
     \ start="\<UPDATE\>"
     \ end="\<SET\>"
     \ contains=@plsqlIdentifiers
-syn match plsqlReserved "\<WHEN\_s\+\%\(NOT\_s\+\)\?MATCHED\_s\+THEN\_s\+\%\(UPDATE\|INSERT\)\%\(\_s\+SET\)\?"
+syn match plsqlReserved "\<WHEN\_s\+\(NOT\_s\+\)\?MATCHED\_s\+THEN\_s\+\(UPDATE\|INSERT\)\(\_s\+SET\)\?"
 
 "
 " Oracle's non-reserved keywords
@@ -463,7 +460,9 @@
 syn keyword plsqlReserved OCIROWID OCISTRING OCITYPE OF ON OPTION ORACLE ORADATA ORDER ORLANY ORLVARY
 syn keyword plsqlReserved OUT OVERRIDING PARALLEL_ENABLE PARAMETER PASCAL PCTFREE PIPE PIPELINED POLYMORPHIC
 syn keyword plsqlReserved PRAGMA PRIOR PUBLIC RAISE RECORD RELIES_ON REM RENAME RESOURCE RESULT REVOKE ROWID 
-syn keyword plsqlReserved SB1 SB2 SELECT SEPARATE SHARE SHORT SIZE SIZE_T SPARSE SQLCODE SQLDATA
+syn keyword plsqlReserved SB1 SB2 
+syn match plsqlReserved "\<SELECT\>"
+syn keyword plsqlReserved SEPARATE SHARE SHORT SIZE SIZE_T SPARSE SQLCODE SQLDATA
 syn keyword plsqlReserved SQLNAME SQLSTATE STANDARD START STORED STRUCT STYLE SYNONYM TABLE TDO
 syn keyword plsqlReserved TRANSACTIONAL TRIGGER UB1 UB4 UNION UNIQUE UNSIGNED UNTRUSTED VALIST
 syn keyword plsqlReserved VALUES VARIABLE VIEW VOID WHERE WITH
@@ -517,28 +516,30 @@
 syn match   plsqlFunction "\.NEXT\>"hs=s+1
 
 if exists("plsql_legacy_sql_keywords")
-" Some of Oracle's SQL keywords.
-syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
-syn keyword plsqlSQLKeyword ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
-syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
-syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
-syn keyword plsqlSQLKeyword CONSTRAINT CRASH CURRENT DATA DATABASE
-syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
-syn keyword plsqlSQLKeyword DROP DUAL EXCLUSIVE EXISTS EXTENDS EXTRACT
-syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
-syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
-syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
-syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE ISOLATION KEY LIBRARY
-syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
-syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
-syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION ORDER ORGANIZATION
-syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
-syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
-syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA SELECT SEPARATE SESSION SET
-syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
-syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
-syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
-syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
+    " Some of Oracle's SQL keywords.
+    syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
+    syn keyword plsqlSQLKeyword ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
+    syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
+    syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
+    syn keyword plsqlSQLKeyword CONSTRAINT CRASH CURRENT DATA DATABASE
+    syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
+    syn keyword plsqlSQLKeyword DROP DUAL EXCLUSIVE EXISTS EXTENDS EXTRACT
+    syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
+    syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
+    syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
+    syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE ISOLATION KEY LIBRARY
+    syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
+    syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
+    syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION ORDER ORGANIZATION
+    syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
+    syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
+    syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA 
+    syn match plsqlSQLKeyword "\<SELECT\>"
+    syn keyword plsqlSQLKeyword SEPARATE SESSION SET
+    syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
+    syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
+    syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
+    syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
 endif
 
 
@@ -565,17 +566,16 @@
 syn keyword plsqlException ZERO_DIVIDE
 
 if exists("plsql_highlight_triggers")
-  syn keyword plsqlTrigger INSERTING UPDATING DELETING
+    syn keyword plsqlTrigger INSERTING UPDATING DELETING
 endif
 
-" so can not contain it for folding
+" so can not contain it for folding. May no longer be necessary and can change them to plsqlKeyword
 syn match plsqlBEGIN "\<BEGIN\>"
 syn match plsqlEND "\<END\>"
-syn match plsqlISAS "\<\%\(IS\|AS\)\>"
-
+syn match plsqlISAS "\<\(IS\|AS\)\>"
 
 " Various types of comments.
-  syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend extend contains=@plsqlCommentGroup,plsqlSpaceError
+syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend extend contains=@plsqlCommentGroup,plsqlSpaceError
 if exists("plsql_fold")
     syntax region plsqlComment
         \ start="/\*" end="\*/"
@@ -599,11 +599,12 @@
 " Various types of literals.
 " the + and - get sucked up as operators. Not sure how to take precedence here. Something to do with word boundaries.
 " most other syntax files do not try to includ +/- in the number token, so leave them as unary operators
+" even though the oracle documentation counts the sign as part of the numeric literal
 syn match   plsqlNumbers transparent "\<\d\|\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
 syn match   plsqlNumbersCom contained transparent "\<\d\|\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
 syn match   plsqlIntLiteral contained "\d\+"
-syn match   plsqlFloatLiteral contained "\d\+\.\%\(\d\+\%\([eE][+-]\?\d\+\)\?\)\?"
-syn match   plsqlFloatLiteral contained "\.\%\(\d\+\%\([eE][+-]\?\d\+\)\?\)"
+syn match   plsqlFloatLiteral contained "\d\+\.\(\d\+\([eE][+-]\?\d\+\)\?\)\?[fd]\?"
+syn match   plsqlFloatLiteral contained "\.\(\d\+\([eE][+-]\?\d\+\)\?\)[fd]\?"
 
 " double quoted strings in SQL are database object names. Should be a subgroup of Normal.
 " We will use Character group as a proxy for that so color can be chosen close to Normal
@@ -639,146 +640,82 @@
 syn cluster plsqlParenGroup contains=plsqlParenError,@plsqlCommentGroup,plsqlCommentSkip,plsqlIntLiteral,plsqlFloatLiteral,plsqlNumbersCom
 
 if exists("plsql_bracket_error")
-  if exists("plsql_fold")
-    syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket fold keepend extend transparent
-  else
-    syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
-  endif
-  syn match plsqlParenError "[\])]"
-  syn match plsqlErrInParen contained "[{}]"
-  syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
-  syn match plsqlErrInBracket contained "[);{}]"
+    " I suspect this code was copied from c.vim and never properly considered. Do
+    " we even use braces or brackets in sql or pl/sql?
+    if exists("plsql_fold")
+        syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket fold keepend extend transparent
+    else
+        syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
+    endif
+    syn match plsqlParenError "[\])]"
+    syn match plsqlErrInParen contained "[{}]"
+    syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
+    syn match plsqlErrInBracket contained "[);{}]"
 else
-  if exists("plsql_fold")
-    syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlFoldingGroupIgnore,plsqlErrInParen fold keepend extend transparent
-  else
-    syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlFoldingGroupIgnore,plsqlErrInParen
-  endif
-  "syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlProcedureGroup,plsqlBlock,plsqlBlockCont,plsqlPackage,plsqlProcedureJava
-  syn match plsqlParenError ")"
-  syn match plsqlErrInParen contained "[{}]"
+    if exists("plsql_fold")
+        syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen fold keepend extend transparent
+    else
+        syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
+    endif
+    syn match plsqlParenError ")"
+    " should this not be parens isntead of brackets? I never quite followed what this was doing
+    syn match plsqlErrInParen contained "[{}]"
 endif
 
 syn match plsqlReserved "\<BODY\>"
-syn match plsqlReserved "\<CREATE\_s\+\%\(OR\_s\+REPLACE\_s\+\)\?"
-" Loops.
-syn match   plsqlRepeat "\<\%\(FOR\|WHILE\|LOOP\|FORALL\)\>"
-syn match   plsqlRepeat "\<END\_s\+LOOP\>"
-syn match plsqlConditional "\<\%\(ELSIF\|IF\|ELSE\)\>"
-"syn match plsqlConditional "\<END\>\_s\+\<IF\>"
+syn match plsqlReserved "\<CREATE\_s\+\(OR\_s\+REPLACE\_s\+\)\?"
+" Loops
+syn match plsqlRepeat "\<\(FOR\|WHILE\|LOOP\|FORALL\)\>"
+syn match plsqlRepeat "\<END\_s\+LOOP\>"
+" conditionals
+syn match plsqlConditional "\<\(ELSIF\|IF\|ELSE\)\>"
+syn match plsqlConditional "\<END\>\_s\+\<IF\>"
+syn match plsqlCase "\<END\>\_s\+\<CASE\>"
 syn match plsqlCase "\<CASE\>"
-"syn match plsqlCase "\<END\>\s_\+\<CASE\>"
 
 if exists("plsql_fold")
     setlocal foldmethod=syntax
     syn sync fromstart
 
-    syn cluster plsqlFoldingGroupIgnore contains=plsqlProcedureDeclaration
+    syn cluster plsqlProcedureGroup contains=plsqlProcedure
+    syn cluster plsqlOnlyGroup contains=@plsqlProcedure,plsqlConditionalBlock,plsqlLoopBlock,plsqlBlock
 
-    "syntax match plsqlWhiteSpaceGroup "\_s\+" contained transparent
+    syntax region plsqlUpdateSet
+        \ start="\(\<update\>\_s\+\(\<set\>\)\@![a-z][a-z0-9$_#]*\_s\+\(\(\<set\>\)\@![a-z][a-z0-9$_#]*\_s\+\)\?\)\|\(\<when\>\_s\+\<matched\>\_s\+\<then\>\_s\+\<update\>\_s\+\)\<set\>"
+        \ end="\(\_s*\(;\|\<from\>\|\<where\>\|\<when\>\)\)\@="
+        \ fold
+        \ keepend 
+        \ extend
+        \ transparent
+        \ contains=ALLBUT,@plsqlOnlyGroup,plsqlSelect
 
+    syntax region plsqlSelect
+        \ start="\<select\>"
+        \ end="\(\_s*\<from\>\)\@="
+        \ fold
+        \ keepend 
+        \ extend
+        \ transparent
+        \ contains=ALLBUT,@plsqlOnlyGroup,plsqlUpdateSet
 
-  if exists("plsql_procedure_fold")
-  " this fails when a begin/end block is in a procedure. Unable to figure out why. - Lee
-
+    " this is brute force and requires you have the procedure/function name in the END
+    " statement. ALthough Oracle makes it optional, we cannot. If you do not
+    " have it, then you can fold the BEGIN/END block of the procedure but not
+    " the specification of it (other than a paren group). You also cannot fold
+    " BEGIN/END blocks in the procedure body. Local procedures will fold as
+    " long as the END statement includes the procedure/function name.
+    " As for why we cannot make it work any other way, I don't know. It is
+    " something to do with both plsqlBlock and plsqlProcedure both consuming BEGIN and END,
+    " even if we use a lookahead for one of them.
     syntax region plsqlProcedure
         "\ start="\(create\(\_s\+or\_s\+replace\)\?\_s\+\)\?\<\(procedure\|function\)\>\_s\+\z([a-z][a-z0-9$_#]*\)"
-        \ start="\(create\(\_s\+or\_s\+replace\)\?\_s\+\)\?\<\(procedure\|function\)\>\_s\+\z([a-z][a-z0-9$_#]*\)\([^;]\|\n\)\{-}\(\_s\+\<\(is\|as\)\>\)\@="
-        \ end="\(\<end\>\(\_s\+\z1\)\?\_s*;\)"
+        \ start="\<\(procedure\|function\)\>\_s\+\(\z([a-z][a-z0-9$_#]*\)\)\([^;]\|\n\)\{-}\<\(is\|as\)\>\_.\{-}\(\<end\>\_s\+\2\_s*;\)\@="
+        \ end="\<end\>\_s\+\z1\_s*;"
         \ fold
+        \ keepend 
         \ extend
         \ transparent
-        \ keepend 
-        \ contains=plsqlProcedureDeclaration,plsqlProcedureBlock,@plsqlCommentAll,plsqlKeyword,plsqlReserved,plsqlTypeAttribute,plsqlStorage
- 
-    syntax region plsqlProcedureDeclaration
-        \ transparent
-        \ fold
-        "\ start="\<\(is\|as\)\>\(\(\_.\)\{-}\<begin\>\)\@="
-        \ start="\<\(is\|as\)\>"
-        \ end="\(\_s\+\<begin\>\)\@="
-        \ nextgroup=plsqlProcedureBlock
-        \ contained
-        \ contains=ALLBUT,plsqlBlockCont,plsqlBlock,plsqlErrInBracket,plsqlPackage,plsqlProcedureDeclaration
-    ",plsqlProcedureBlock
-        \ keepend 
-        "\ extend
-" must have keepend which is weird because it is 0 lenght
-        " ,plsqlEnd,plsqlISAS
-    
-    syntax region plsqlProcedureBlock
-        \ start="\<begin\>"
-        "\ skip="\_s\+\<begin\>\_.\{-}\<end\>\_s*;"
-        \ matchgroup=NONE
-        \ end="\(\<end\>\(\_s\+\(if\|loop\|case\)\@![a-z][a-z0-9$_#]*\)\?\_s*;\)"
-        "\ end="\(\<end\>\)\@="
-        \ fold
-        \ contained
-        \ transparent
-        \ keepend
-        "\ extend
-        \ contains=ALLBUT,plsqlPackage,plsqlProcedure,plsqlProcedureBlock,plsqlProcedureDeclaration,plsqlProcedureJava,plsqlBlock
-
-    "syn cluster plsqlProcedureGroup contains=plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock
-    syn cluster plsqlProcedureGroup contains=plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock
-
-    " for inside packages
-    syn region plsqlProcedureSpec
-        \ start="\(procedure\|function\)\(\([^;]\|\n\)\{-}\<\(is\|as\)\>\)\@!"
-        "\ start="\(procedure\|function\)\(\([^;]\|\n\)\{-}\<\(is\|as\)\>\)\@!\(\_.*;\)\@="
-        \ end=";"
-        \ keepend extend
-        \ contains=@plsqlIdentifiers,plsqlKeyword,plsqlReserved,@plsqlCommentAll,plsqlParen
-        \ transparent
-    
-    syntax region plsqlBlockCont
-        \ transparent
-        \ start="\<begin\>"
-        \ end="\<end\>\_s*;"
-        \ fold
-        \ extend
-        \ contained
-        \ contains=ALLBUT,@plsqlProcedureGroup,plsqlPackage,plsqlErrInBracket,PlsqlProcedureJava,plsqlBlock
-        \ keepend
-        "\ end="\<end\>\_s*\;"
-
-    syntax region plsqlProcedureJava
-      \ matchgroup=NONE
-      \ start="\(\/\*\(\(\*\/\)\@!\_.\)*\*\/\_s*\)\?\(\(\(overriding\_s*\)\?member\|constructor\|static\)\_s*\)\?\<\(procedure\|function\)\>\_s*\(\k*\)\_[^;]\{-}\<\(is\|as\)\>\_s*language\_s*java\_s*name"
-      \ matchgroup=plsqlStringLiteral
-      \ end="'\_[^']*'\_s*;"
-      \ keepend extend
-      \ fold
-      \ contains=ALLBUT,plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock,plsqlBlockCont,plsqlBlock,plsqlProcedureJava,plsqlErrInBracket,plsqlStringLiteral
-    
-    
-"    syntax region plsqlPackage
-"        \ start="\<create\>\_s\+\(or\_s\+replace\_s\+\)\?package\_s\+\(body\_s\+\)\?\z([a-z][a-z0-9$_#]*\)\>"
-"        \ matchgroup=plsqlEnd
-"        \ end="\<end\>\(\%\(\_s\+\z1\)\?\_s*;\)\@="
-"        \ fold
-"        \ transparent
-"        \ keepend extend
-"        \ contains=plsqlProcedure,plsqlBlockCont,@plsqlCommentAll,plsqlKeyword,plsqlReserved,@plsqlIdentifiers
-"        "\ contains=ALLBUT,plsqlPackage,plsqlProcedureDeclaration,plsqlBlock,plsqlConditionalBlock,plsqlLoopBlock,plsqlCaseBlock
-    
-    if exists("plsql_syntax_test_flag") 
-      hi plsqlProcedureDeclaration guifg='blue'
-      hi plsqlProcedureBlock guifg='red'
-      hi plsqlProcedure guifg='green'
-      hi plsqlCaseBlock guifg='pink'
-      hi plsqlBlock NONE
-    else
-      hi plsqlPackage NONE
-      hi plsqlProcedureDeclaration NONE
-      hi plsqlProcedureBlock NONE
-      hi plsqlProcedure NONE
-      hi plsqlBlock NONE
-      hi plsqlCaseBlock NONE
-    endif
-
-  " end plsql_procedure_fold
-  endif
+        \ contains=ALLBUT,plsqlBlock
 
     syntax region plsqlBlock
         \ start="\<begin\>"
@@ -809,7 +746,6 @@
         \ contained
         \ contains=ALLBUT,@plsqlProcedureGroup,plsqlPackage,plsqlErrInBracket,PlsqlProcedureJava
     
-    " Conditionals.
     syn region plsqlConditionalBlock
         \ transparent
         \ start="\<if\>\(\_s*;\)\@!"
@@ -827,45 +763,45 @@
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet.
 
-  hi def link plsqlAttribute	    Macro
-  hi def link plsqlBlockError	    Error
-  hi def link plsqlBooleanLiteral   Boolean
-  hi def link plsqlQuotedIdentifier	Character
-  hi def link plsqlComment	        Comment
-  hi def link plsqlCommentL	        Comment
-  hi def link plsqlConditional	    Keyword
-  hi def link plsqlCase	            Conditional
-  hi def link plsqlError	        Error
-  hi def link plsqlErrInBracket	    Error
-  hi def link plsqlErrInBlock	    Error
-  hi def link plsqlErrInParen	    Error
-  hi def link plsqlException	    Function
-  hi def link plsqlFloatLiteral	    Float
-  hi def link plsqlFunction	        Function
-  hi def link plsqlGarbage	        Error
-  hi def link plsqlHostIdentifier   Label
-  hi def link plsqlIdentifier	    Normal
-  hi def link plsqlIntLiteral	    Number
-  hi def link plsqlOperator	        Operator
-  hi def link plsqlParenError	    Error
-  hi def link plsqlSpaceError	    Error
-  hi def link plsqlPseudo	        PreProc
-  hi def link plsqlKeyword	        Keyword
-  hi def link plsqlEND              Keyword
-  hi def link plsqlBEGIN            Keyword
-  hi def link plsqlISAS             Statement
-  hi def link plsqlReserved         Statement
-  hi def link plsqlRepeat	        Repeat
-  hi def link plsqlStorage	        StorageClass
-  hi def link plsqlFunction  	    Function
-  hi def link plsqlStringError	    Error
-  hi def link plsqlStringLiteral    String
-  hi def link plsqlCommentString    String
-  hi def link plsqlComment2String   String
-  hi def link plsqlTrigger	        Function
-  hi def link plsqlTypeAttribute    StorageClass
-  hi def link plsqlTodo		        Todo
-" to be able to change them, need override whether defined or not
+hi def link plsqlAttribute	        Macro
+hi def link plsqlBlockError	        Error
+hi def link plsqlBooleanLiteral     Boolean
+hi def link plsqlQuotedIdentifier	Character
+hi def link plsqlComment	        Comment
+hi def link plsqlCommentL	        Comment
+hi def link plsqlConditional	    Conditional
+hi def link plsqlCase	            Conditional
+hi def link plsqlError	            Error
+hi def link plsqlErrInBracket	    Error
+hi def link plsqlErrInBlock	        Error
+hi def link plsqlErrInParen	        Error
+hi def link plsqlException	        Function
+hi def link plsqlFloatLiteral	    Float
+hi def link plsqlFunction	        Function
+hi def link plsqlGarbage	        Error
+hi def link plsqlHostIdentifier     Label
+hi def link plsqlIdentifier	        Normal
+hi def link plsqlIntLiteral	        Number
+hi def link plsqlOperator	        Operator
+hi def link plsqlParenError	        Error
+hi def link plsqlSpaceError	        Error
+hi def link plsqlPseudo	            PreProc
+hi def link plsqlKeyword	        Keyword
+hi def link plsqlEND                Keyword
+hi def link plsqlBEGIN              Keyword
+hi def link plsqlISAS               Statement
+hi def link plsqlReserved           Statement
+hi def link plsqlRepeat	            Repeat
+hi def link plsqlStorage	        StorageClass
+hi def link plsqlFunction  	        Function
+hi def link plsqlStringError	    Error
+hi def link plsqlStringLiteral      String
+hi def link plsqlCommentString      String
+hi def link plsqlComment2String     String
+hi def link plsqlTrigger	        Function
+hi def link plsqlTypeAttribute      StorageClass
+hi def link plsqlTodo		        Todo
+" to be able to change them after loading, need override whether defined or not
 if exists("plsql_legacy_sql_keywords")
     hi link plsqlSQLKeyword         Function
     hi link plsqlSymbol	            Normal
@@ -876,6 +812,8 @@
 endif
 
 let b:current_syntax = "plsql"
+
+" restore setting from when we entered this file
 let &cpo = s:cpo_sav
 unlet! s:cpo_sav