Loading ...
Sorry, an error occurred while loading the content.

50459Re: Floating point syntax

Expand Messages
  • Bram Moolenaar
    Jun 4, 2008
    • 0 Attachment
      Ilya Bobir wrote:

      > Bram Moolenaar wrote:
      > > [...]
      > >> The second was a proposal to represent floats as numbers with decimal
      > >> points but no additional punctuation which was implicit in this report
      > >> from Ilya Bobir:
      > >>
      > >> - I did a search for vim scripts that use concatenation operation
      > >> between two numbers without interleaving space. It appears that
      > >> Google Code Search was able to find only 39 matches and all were
      > >> false positives.
      > >>
      > >> Nobody gave any reply to the message.
      > >>
      > >
      > > I wonder how you do that search.
      >
      > I've explained how I did the search in my email on that thread.
      > Probably you missed it, so I include this email here. Here it goes:
      >
      > Ilya Bobir wrote:
      > > Bram Moolenaar wrote:
      > >
      > >> [...]
      > >>
      > >> I would still like feedback on the format of floating point numbers:
      > >>
      > >> &123.456
      > >> &1.23e-3
      > >>
      > >>
      > >
      > > I did a search for vim scripts that use concatenation operation between two
      > > numbers without interleaving space. It appears that Google Code Search was
      > > able to find only 39 matches and all where false positives.
      > > Here is the query:
      > >
      > > http://www.google.com/codesearch?hl=ru&q=+lang:vim+%5E%5Cs*%5B%5E%22%5C+%5D(%22(%5C%5C.%7C%5B%5E%22%5D)*%22%7C%27%5B%5E%27%5D*%27%7C%5B%5E%22%5D)*%5Cs%5Cd%2B%5C.%5Cd%2B%5Cs+-menu&start=30&sa=N
      > >
      > > And here is a regex I've used (along with explanations). Maybe someone will
      > > double check to make sure I did not mistake.
      > >
      > > lang:vim | Vim script language.
      > > ^\s*[^"\ ] | In order to exclude comments the line should
      > > | start with anything but ".
      > > ( | Catches different kind of strings.
      > > " ( \\. | [^"] )* " | Double quoted strings along with escapes
      > > | inside the string.
      > > | ' [^']* ' | Single quoted strings.
      > > | [^"] | All the rest is OK. And there maybe some
      > > | staff preceding the digits.
      > > )* |
      > > \s\d+\.\d+\s | A pattern that I was looking for - two numbers
      > > | concatenated without an interleaving space
      > > | that are not part of a longer sequence.
      > > -menu | menu command uses dot separated numbers to set
      > > | priority. There are plenty of them and all
      > > | are false positives, so remove all lines with
      > > | "menu" string in them.
      > >
      >
      > If something is hard to understand, please ask, I'll try to explain
      > another way. English is not my native language and sometimes I really
      > have no clue whether what I write is understandable at all =)

      It's not perfect and Google code search certainly doesn't contain every
      Vim script, but it's an indication.

      > > And if you manage to come up with the
      > > right pattern, what the number of matches actually means.
      >
      > The number of matches is the number of lines that have two numbers
      > concatenated without interleaving spaces. A real match would mean that
      > adding a "common" syntax for floats into Vim script would break a script
      > with the match.

      I meant: Since Google code search contains only a subset of all the Vim
      scripts, what does it mean not to find a text string there that looks
      like a floating point number? There might be one very important Vim
      script that breaks that isn't in Google code search.

      [...]

      Anyway, here is a patch to accept plain floating point numbers. Goes on
      top of the previous floating point patch. Give it a try and find out if
      any of your scripts break.


      *** ../vim-7.1.311/src/eval.c Thu May 29 21:46:10 2008
      --- src/eval.c Wed Jun 4 22:41:20 2008
      ***************
      *** 4600,4613 ****
      case '7':
      case '8':
      case '9':
      ! vim_str2nr(*arg, NULL, &len, TRUE, TRUE, &n, NULL);
      ! *arg += len;
      ! if (evaluate)
      {
      ! rettv->v_type = VAR_NUMBER;
      ! rettv->vval.v_number = n;
      }
      break;

      /*
      * String constant: "string".
      --- 4799,4847 ----
      case '7':
      case '8':
      case '9':
      ! {
      ! #ifdef FEAT_FLOAT
      ! char_u *p = skipdigits(*arg + 1);
      ! int get_float = FALSE;
      !
      ! /* We accept a float when the format matches
      ! * "[0-9]\+\.[0-9]\+\([eE][+-]\?[0-9]\+\)\?". This is very
      ! * strict to avoid backwards compatibility problems. */
      ! if (p[0] == '.' && vim_isdigit(p[1]))
      ! {
      ! get_float = TRUE;
      ! p = skipdigits(p + 2);
      ! if (*p == 'e' || *p == 'E')
      ! {
      ! ++p;
      ! if (*p == '-' || *p == '+')
      ! ++p;
      ! if (!vim_isdigit(*p))
      ! get_float = FALSE;
      ! else
      ! p = skipdigits(p + 1);
      ! }
      ! if (ASCII_ISALPHA(*p) || *p == '.')
      ! get_float = FALSE;
      ! }
      ! if (get_float)
      {
      ! --*arg; /* pretend there is a '&' TODO: remove */
      ! get_float_tv(arg, rettv, evaluate);
      ! }
      ! else
      ! #endif
      ! {
      ! vim_str2nr(*arg, NULL, &len, TRUE, TRUE, &n, NULL);
      ! *arg += len;
      ! if (evaluate)
      ! {
      ! rettv->v_type = VAR_NUMBER;
      ! rettv->vval.v_number = n;
      ! }
      }
      break;
      + }

      /*
      * String constant: "string".

      --
      It's totally unfair to suggest - as many have - that engineers are socially
      inept. Engineers simply have different objectives when it comes to social
      interaction.
      (Scott Adams - The Dilbert principle)

      /// Bram Moolenaar -- Bram@... -- 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
      -~----------~----~----~----~------~----~------~--~---
    • Show all 15 messages in this topic