Patch 8.2.0953
Problem:    Spell checking doesn't work for CamelCased words.
Solution:   Add the "camel" value in the new option 'spelloptions'.
            (closes #1235)
Files:      runtime/doc/options.txt, runtime/doc/spell.txt, src/optiondefs.h,
            src/option.h, src/option.c, src/buffer.c, src/optionstr.c,
            src/testdir/gen_opt_test.vim, src/testdir/test_spell.vim


*** ../vim-8.2.0952/runtime/doc/options.txt     2020-06-07 22:21:35.220132507 
+0200
--- runtime/doc/options.txt     2020-06-10 21:07:06.331864186 +0200
***************
*** 7106,7111 ****
--- 7105,7120 ----
        up to the first character that is not an ASCII letter or number and
        not a dash.  Also see |set-spc-auto|.
  
+                                               *'spelloptions'* *'spo'*
+ 'spelloptions' 'spo'  string  (default "")
+                       local to buffer
+                       {not available when compiled without the |+syntax|
+                       feature}
+       A comma separated list of options for spell checking:
+          camel        When a word is CamelCased, assume "Cased" is a
+                       separate word: every upper-case character in a word
+                       that comes after a lower case character indicates the
+                       start of a new word.
  
                                                *'spellsuggest'* *'sps'*
  'spellsuggest' 'sps'  string  (default "best")
*** ../vim-8.2.0952/runtime/doc/spell.txt       2019-12-12 12:49:06.000000000 
+0100
--- runtime/doc/spell.txt       2020-06-10 21:08:57.055556930 +0200
***************
*** 215,220 ****
--- 215,223 ----
  line may be postponed.  Use |CTRL-L| when needed.  Also see |set-spc-auto| for
  how it can be set automatically when 'spelllang' is set.
  
+ The 'spelloptions' option has a few more flags that influence the way spell
+ checking works.
+ 
  Vim counts the number of times a good word is encountered.  This is used to
  sort the suggestions: words that have been seen before get a small bonus,
  words that have been seen often get a bigger bonus.  The COMMON item in the
*** ../vim-8.2.0952/src/optiondefs.h    2020-05-31 23:11:02.082515688 +0200
--- src/optiondefs.h    2020-06-10 21:23:57.432906772 +0200
***************
*** 129,134 ****
--- 129,135 ----
  # define PV_SPC               OPT_BUF(BV_SPC)
  # define PV_SPF               OPT_BUF(BV_SPF)
  # define PV_SPL               OPT_BUF(BV_SPL)
+ # define PV_SPO               OPT_BUF(BV_SPO)
  #endif
  #define PV_STS                OPT_BUF(BV_STS)
  #ifdef FEAT_SEARCHPATH
***************
*** 2396,2401 ****
--- 2397,2412 ----
  #else
                            (char_u *)NULL, PV_NONE,
                            {(char_u *)0L, (char_u *)0L}
+ #endif
+                           SCTX_INIT},
+     {"spelloptions", "spo",  P_STRING|P_ALLOCED|P_VI_DEF
+                                                   |P_ONECOMMA|P_NODUP|P_RBUF,
+ #ifdef FEAT_SPELL
+                           (char_u *)&p_spo, PV_SPO,
+                           {(char_u *)"", (char_u *)0L}
+ #else
+                           (char_u *)NULL, PV_NONE,
+                           {(char_u *)0L, (char_u *)0L}
  #endif
                            SCTX_INIT},
      {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_ONECOMMA,
*** ../vim-8.2.0952/src/option.h        2020-06-04 18:21:56.046395485 +0200
--- src/option.h        2020-06-10 21:18:38.369865493 +0200
***************
*** 913,918 ****
--- 913,919 ----
  EXTERN char_u *p_spc;         // 'spellcapcheck'
  EXTERN char_u *p_spf;         // 'spellfile'
  EXTERN char_u *p_spl;         // 'spelllang'
+ EXTERN char_u *p_spo;         // 'spelloptions'
  EXTERN char_u *p_sps;         // 'spellsuggest'
  #endif
  EXTERN int    p_spr;          // 'splitright'
***************
*** 1185,1190 ****
--- 1186,1192 ----
      , BV_SPC
      , BV_SPF
      , BV_SPL
+     , BV_SPO
  #endif
      , BV_STS
  #ifdef FEAT_SEARCHPATH
*** ../vim-8.2.0952/src/option.c        2020-05-30 21:52:49.242816719 +0200
--- src/option.c        2020-06-10 21:10:51.627232404 +0200
***************
*** 5329,5334 ****
--- 5329,5335 ----
        case PV_SPC:    return (char_u *)&(curwin->w_s->b_p_spc);
        case PV_SPF:    return (char_u *)&(curwin->w_s->b_p_spf);
        case PV_SPL:    return (char_u *)&(curwin->w_s->b_p_spl);
+       case PV_SPO:    return (char_u *)&(curwin->w_s->b_p_spo);
  #endif
        case PV_SW:     return (char_u *)&(curbuf->b_p_sw);
        case PV_TS:     return (char_u *)&(curbuf->b_p_ts);
***************
*** 5838,5843 ****
--- 5839,5846 ----
            COPY_OPT_SCTX(buf, BV_SPF);
            buf->b_s.b_p_spl = vim_strsave(p_spl);
            COPY_OPT_SCTX(buf, BV_SPL);
+           buf->b_s.b_p_spo = vim_strsave(p_spo);
+           COPY_OPT_SCTX(buf, BV_SPO);
  #endif
  #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
            buf->b_p_inde = vim_strsave(p_inde);
*** ../vim-8.2.0952/src/buffer.c        2020-05-30 20:30:42.888816585 +0200
--- src/buffer.c        2020-06-10 21:11:32.639114815 +0200
***************
*** 2287,2292 ****
--- 2287,2293 ----
      vim_regfree(buf->b_s.b_cap_prog);
      buf->b_s.b_cap_prog = NULL;
      clear_string_option(&buf->b_s.b_p_spl);
+     clear_string_option(&buf->b_s.b_p_spo);
  #endif
  #ifdef FEAT_SEARCHPATH
      clear_string_option(&buf->b_p_sua);
*** ../vim-8.2.0952/src/optionstr.c     2020-06-08 18:54:44.957796367 +0200
--- src/optionstr.c     2020-06-10 21:21:06.441422152 +0200
***************
*** 248,253 ****
--- 248,254 ----
      check_string_option(&buf->b_s.b_p_spc);
      check_string_option(&buf->b_s.b_p_spf);
      check_string_option(&buf->b_s.b_p_spl);
+     check_string_option(&buf->b_s.b_p_spo);
  #endif
  #ifdef FEAT_SEARCHPATH
      check_string_option(&buf->b_p_sua);
***************
*** 1714,1719 ****
--- 1715,1726 ----
      {
        errmsg = compile_cap_prog(curwin->w_s);
      }
+     // 'spelloptions'
+     else if (varp == &(curwin->w_s->b_p_spo))
+     {
+       if (**varp != NUL && STRCMP("camel", *varp) != 0)
+           errmsg = e_invarg;
+     }
      // 'spellsuggest'
      else if (varp == &p_sps)
      {
*** ../vim-8.2.0952/src/testdir/gen_opt_test.vim        2020-04-17 
19:41:16.100078313 +0200
--- src/testdir/gen_opt_test.vim        2020-06-10 21:44:34.576170474 +0200
***************
*** 132,137 ****
--- 132,138 ----
        \ 'signcolumn': [['', 'auto', 'no'], ['xxx', 'no,yes']],
        \ 'spellfile': [['', 'file.en.add'], ['xxx', '/tmp/file']],
        \ 'spelllang': [['', 'xxx', 'sr@latin'], ['not&lang', "that\\\rthere"]],
+       \ 'spelloptions': [['', 'camel'], ['xxx']],
        \ 'spellsuggest': [['', 'best', 'double,33'], ['xxx']],
        \ 'switchbuf': [['', 'useopen', 'split,newtab'], ['xxx']],
        \ 'tagcase': [['smart', 'match'], ['', 'xxx', 'smart,match']],
*** ../vim-8.2.0952/src/testdir/test_spell.vim  2020-06-10 16:39:27.359613652 
+0200
--- src/testdir/test_spell.vim  2020-06-10 21:38:21.313550244 +0200
***************
*** 77,82 ****
--- 77,87 ----
    call assert_equal(['bycycle', 'bad'],  spellbadword('My bycycle.'))
    call assert_equal(['another', 'caps'], 'A sentence. another 
sentence'->spellbadword())
  
+   call assert_equal(['TheCamelWord', 'bad'], 'TheCamelWord 
asdf'->spellbadword())
+   set spelloptions=camel
+   call assert_equal(['asdf', 'bad'], 'TheCamelWord asdf'->spellbadword())
+   set spelloptions=
+ 
    set spelllang=en
    call assert_equal(['', ''],            spellbadword('centre'))
    call assert_equal(['', ''],            spellbadword('center'))
*** ../vim-8.2.0952/src/version.c       2020-06-10 20:56:55.025354576 +0200
--- src/version.c       2020-06-10 21:46:07.539841347 +0200
***************
*** 756,757 ****
--- 756,759 ----
  {   /* Add new patch number below this line */
+ /**/
+     953,
  /**/

-- 
GUARD #1:  What, ridden on a horse?
ARTHUR:    Yes!
GUARD #1:  You're using coconuts!
ARTHUR:    What?
GUARD #1:  You've got two empty halves of coconut and you're bangin' 'em
           together.
                                  The Quest for the Holy Grail (Monty Python)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202006101947.05AJlPqF948058%40masaka.moolenaar.net.

Raspunde prin e-mail lui