Re: `match()` with branches [and a patch]

2007-12-02 Fir de Conversatie Bram Moolenaar


Nico Weber wrote:

 Attached is a patch to filetype.vim that adds objc detection for .h  
 files. I don't know if this is of general interest, but I think so.

I wonder how often the detection will fail.  @interface and @end
could appear in a comment of a C or C++ file, at least.  Esp. when using
something like doxygen.

Is there any way to make it a bit more specific?

The check could be turned into a one liner:

 .h files can be C, Ch C++, ObjC or ObjC++.
 Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
 detected automatically.
au BufNewFile,BufRead *.h   call s:FTheader()

func! s:FTheader()
  if match(getline(1, min([line($), 200])), '@interface\|@end')  -1
setf objc
  elseif exists(c_syntax_for_h)
setf c
  elseif exists(ch_syntax_for_h)
setf ch
  else
setf cpp
  endif
endfunc


-- 
hundred-and-one symptoms of being an internet addict:
169. You hire a housekeeper for your home page.

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\download, build and distribute -- http://www.A-A-P.org///
 \\\help me help AIDS victims -- http://ICCF-Holland.org///

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



Re: `match()` with branches [and a patch]

2007-12-02 Fir de Conversatie Nico Weber

 I wonder how often the detection will fail.  @interface and @end
 could appear in a comment of a C or C++ file, at least.  Esp. when  
 using
 something like doxygen.

What about '[EMAIL PROTECTED]|[EMAIL PROTECTED]' (and maybe throw in a 
'\|[EMAIL PROTECTED]' at  
the end for good measure)?

 The check could be turned into a one liner:

  .h files can be C, Ch C++, ObjC or ObjC++.
  Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch.  
 ObjC is
  detected automatically.
 au BufNewFile,BufRead *.h call s:FTheader()

 func! s:FTheader()
  if match(getline(1, min([line($), 200])), '@interface\|@end')  -1

If we add the '^'s and '\|[EMAIL PROTECTED]', this line would be  80 chars.

setf objc
  elseif exists(c_syntax_for_h)
setf c
  elseif exists(ch_syntax_for_h)
setf ch
  else
setf cpp
  endif
 endfunc

Nico

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



Re: `match()` with branches [and a patch]

2007-12-02 Fir de Conversatie Bram Moolenaar


Nico Weber wrote:

  I wonder how often the detection will fail.  @interface and @end
  could appear in a comment of a C or C++ file, at least.  Esp. when  
  using
  something like doxygen.
 
 What about '[EMAIL PROTECTED]|[EMAIL PROTECTED]' (and maybe throw in a 
 '\|[EMAIL PROTECTED]' at  
 the end for good measure)?

That's a good restriction.

Suppose a .h file is C++ and recognized as objective C, how bad would
the effect be?  I assume that objective C is quite similar to C++.

There are a few mistakes, you can use this to try out:

http://www.google.com/codesearch?hl=enq=+file:%5C.h+%5E%40(interface%7Cclass%7Cend)sa=N

Note that you need to look at the file to verify the type.  Google Code
Search also makes mistakes.

-- 
hundred-and-one symptoms of being an internet addict:
173. You keep tracking down the email addresses of all your friends
 (even childhood friends).

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\download, build and distribute -- http://www.A-A-P.org///
 \\\help me help AIDS victims -- http://ICCF-Holland.org///

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