On Jul 9, 2:42 am, "Yakov Lerner" <[EMAIL PROTECTED]> wrote:
> On Tue, Jul 8, 2008 at 8:14 PM, Ben Fritz <[EMAIL PROTECTED]> wrote:
>
> > Consider the following:
>
> > perl << EOF
> > some code that contains Vim keywords
> > EOF
>
> > If has("perl") is true, no problem! A syntax region is defined that
> > does not include any Vim groups, and the perl syntax is included
> > within the region.
>
> > If has("perl") is false, however, the code within perl << EOF to EOF
> > will be (incorrectly?) highlighted as if it were Vim code.
>
> > If has("perl") is false, Vim still tries to run the code as Perl code,
> > but will raise an error.
>
> Therefore, I think that a containing region should be defined even if
>
> > has("perl") is false. However, if has("perl") is false, either the
> > entire region or at least the "perl << EOF" and the "EOF" should be
> > highlighted as errors.
>
> I agree
>
> Yakov

I made a simple patch against the version of vim.vim that I have to
add this functionality. Unfortunately, I believe that my version
(7.1-77) is outdated.

It will, regardless of the value of vimsym_embed, highlight the begin
and end markers of the aforementioned constructs using the vimWarn
group (but not if g:vimsyn_noerror exists). It will also prevent all
highlighting of the script itself if the language is not supported (is
this also desired if the user chooses not to highlight that embedded
script?)

This is my first patch ever, so be nice.

**********************************************************************

*** vim.vim     Tue Jul 08 10:58:28 2008
--- U:\vimfiles\syntax\vim.vim  Wed Jul 09 14:58:31 2008
***************
*** 537,576 ****
  endif

  " [-- perl --] {{{3
! if (g:vimsyn_embed =~ 'p' && has("perl")) &&
filereadable(expand("<sfile>:p:h")."/perl.vim")
!  unlet! b:current_syntax
!  syn include @vimPerlScript <sfile>:p:h/perl.vim
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'p'
!   syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%
[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\%
[rl]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   else
!   syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]
\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   endif
  endif

  " [-- ruby --] {{{3
! if (g:vimsyn_embed =~ 'r' && has("ruby")) &&
filereadable(expand("<sfile>:p:h")."/ruby.vim")
!  unlet! b:current_syntax
!  syn include @vimRubyScript <sfile>:p:h/ruby.vim
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'r'
!   syn region vimRubyRegion fold matchgroup=vimScriptDelim start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
   else
!   syn region vimRubyRegion fold matchgroup=vimScriptDelim start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
   endif
!  syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
  endif

  " [-- python --] {{{3
! if (g:vimsyn_embed =~ 'P' && has("python")) &&
filereadable(expand("<sfile>:p:h")."/python.vim")
!  unlet! b:current_syntax
!  syn include @vimPythonScript <sfile>:p:h/python.vim
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
!   syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py
\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimPythonRegion fold matchgroup=vimScriptDelim start=+py
\%[thon]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   else
!   syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%
[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%
[thon]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   endif
  endif

--- 537,608 ----
  endif

  " [-- perl --] {{{3
! if has("perl")
!  if g:vimsyn_embed =~ 'p' && filereadable(expand("<sfile>:p:h")."/
perl.vim")
!   unlet! b:current_syntax
!   syn include @vimPerlScript <sfile>:p:h/perl.vim
!   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'p'
!    syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\
%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimPerlRegion fold matchgroup=vimScriptDelim start=+pe\
%[rl]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   else
!    syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]
\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimPerlRegion matchgroup=vimScriptDelim start=+pe\%[rl]
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   endif
!  endif
! else
!  " perl not supported
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'p'
!   syn region vimPerlRegion fold matchgroup=vimNotSupported start=+pe\
%[rl]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimPerlRegion fold matchgroup=vimNotSupported start=+pe\
%[rl]\s*<<\s*$+ end=+\.$+ contains=NONE
   else
!   syn region vimPerlRegion matchgroup=vimNotSupported start=+pe\%[rl]
\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimPerlRegion matchgroup=vimNotSupported start=+pe\%[rl]
\s*<<\s*$+ end=+\.$+ contains=NONE
   endif
  endif

  " [-- ruby --] {{{3
! if has("ruby")
!  if g:vimsyn_embed =~ 'r' && filereadable(expand("<sfile>:p:h")."/
ruby.vim")
!   unlet! b:current_syntax
!   syn include @vimRubyScript <sfile>:p:h/ruby.vim
!   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'r'
!    syn region vimRubyRegion fold matchgroup=vimScriptDelim start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   else
!    syn region vimRubyRegion fold matchgroup=vimScriptDelim start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   endif
!   syn region vimRubyRegion matchgroup=vimScriptDelim start=+rub[y]
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!  endif
! else
!  " ruby not supported
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'r'
!   syn region vimRubyRegion fold matchgroup=vimNotSupported start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
   else
!   syn region vimRubyRegion fold matchgroup=vimNotSupported start=
+rub[y]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
   endif
!  syn region vimRubyRegion matchgroup=vimNotSupported start=+rub[y]
\s*<<\s*$+ end=+\.$+ contains=NONE
  endif

  " [-- python --] {{{3
! if has("python")
!  if g:vimsyn_embed =~ 'P' && filereadable(expand("<sfile>:p:h")."/
python.vim")
!   unlet! b:current_syntax
!   syn include @vimPythonScript <sfile>:p:h/python.vim
!   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
!    syn region vimPythonRegion fold matchgroup=vimScriptDelim start=
+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimPythonRegion fold matchgroup=vimScriptDelim start=
+py\%[thon]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   else
!    syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%
[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%
[thon]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   endif
!  endif
! else
!  " Python not supported
   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
!   syn region vimPythonRegion fold matchgroup=vimNotSupported start=
+py\%[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimPythonRegion fold matchgroup=vimNotSupported start=
+py\%[thon]\s*<<\s*$+ end=+\.$+ contains=NONE
   else
!   syn region vimPythonRegion matchgroup=vimNotSupported start=+py\%
[thon]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimPythonRegion matchgroup=vimNotSupported start=+py\%
[thon]\s*<<\s*$+ end=+\.$+ contains=NONE
   endif
  endif

***************
*** 582,613 ****
   let trytcl= 1
  endif
  if trytcl
!  if (g:vimsyn_embed =~ 't' && has("tcl")) &&
filereadable(expand("<sfile>:p:h")."/tcl.vim")
!   unlet! b:current_syntax
!   syn include @vimTclScript <sfile>:p:h/tcl.vim
    if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
!    syn region vimTclRegion fold matchgroup=vimScriptDelim start=
+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimTclRegion fold matchgroup=vimScriptDelim start=
+tc[l]\=\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
    else
!    syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=
\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
    endif
   endif
  endif
  unlet trytcl

  " [-- mzscheme --] {{{3
! if (g:vimsyn_embed =~ 'm' && has("mzscheme")) &&
filereadable(expand("<sfile>:p:h")."/scheme.vim")
!  unlet! b:current_syntax
!  let iskKeep= &isk
!  syn include @vimMzSchemeScript <sfile>:p:h/scheme.vim
!  let &isk= iskKeep
!  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
!   syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=
+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=
+mz\%[scheme]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   else
!   syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%
[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!   syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%
[scheme]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
   endif
  endif

--- 614,666 ----
   let trytcl= 1
  endif
  if trytcl
!  if has("tcl")
!   if g:vimsyn_embed =~ 't' && filereadable(expand("<sfile>:p:h")."/
tcl.vim")
!    unlet! b:current_syntax
!    syn include @vimTclScript <sfile>:p:h/tcl.vim
!    if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
!     syn region vimTclRegion fold matchgroup=vimScriptDelim start=
+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!     syn region vimTclRegion fold matchgroup=vimScriptDelim start=
+tc[l]\=\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!    else
!     syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=
\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!     syn region vimTclRegion matchgroup=vimScriptDelim start=+tc[l]\=
\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!    endif
!   endif
!  else
!   " tcl not supported
    if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 't'
!    syn region vimTclRegion fold matchgroup=vimNotSupported start=
+tc[l]\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!    syn region vimTclRegion fold matchgroup=vimNotSupported start=
+tc[l]\=\s*<<\s*$+ end=+\.$+ contains=NONE
    else
!    syn region vimTclRegion matchgroup=vimNotSupported start=+tc[l]\=
\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!    syn region vimTclRegion matchgroup=vimNotSupported start=+tc[l]\=
\s*<<\s*$+ end=+\.$+ contains=NONE
    endif
   endif
  endif
  unlet trytcl

  " [-- mzscheme --] {{{3
! if has("mzscheme")
!  if g:vimsyn_embed =~ 'm' && filereadable(expand("<sfile>:p:h")."/
scheme.vim")
!   unlet! b:current_syntax
!   let iskKeep= &isk
!   syn include @vimMzSchemeScript <sfile>:p:h/scheme.vim
!   let &isk= iskKeep
!   if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'm'
!    syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=
+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimMzSchemeRegion fold matchgroup=vimScriptDelim start=
+mz\%[scheme]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   else
!    syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%
[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ [EMAIL PROTECTED]
!    syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%
[scheme]\s*<<\s*$+ end=+\.$+ [EMAIL PROTECTED]
!   endif
!  endif
! else
!  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'm'
!   syn region vimMzSchemeRegion fold matchgroup=vimNotSupported start=
+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimMzSchemeRegion fold matchgroup=vimNotSupported start=
+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=NONE
   else
!   syn region vimMzSchemeRegion matchgroup=vimNotSupported start=+mz\%
[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=NONE
!   syn region vimMzSchemeRegion matchgroup=vimNotSupported start=+mz\%
[scheme]\s*<<\s*$+ end=+\.$+ contains=NONE
   endif
  endif

***************
*** 646,651 ****
--- 699,705 ----
   hi def link vimSubstFlagErr  vimError
   hi def link vimSynCaseError  vimError
   hi def link vimBufnrWarn     vimWarn
+  hi def link vimNotSupported  vimWarn
  endif

  hi def link vimAddress        vimMark

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to