Add missing builtin functions
authorJulien Enselme <jenselme@netbeans.org>
Sat, 15 Aug 2015 01:49:37 +0200
changeset 1830813d93fcd23a0
parent 18307 a79b4466b5b1
child 18309 89c06035f355
Add missing builtin functions

List complete according to https://docs.python.org/2/library/functions.html and
https://docs.python.org/3.5/library/functions.html
python.editor/src/org/netbeans/modules/python/editor/lexer/PythonLexer.java
python.editor/src/org/netbeans/modules/python/editor/lexer/PythonTokenId.java
python.editor/src/org/netbeans/modules/python/editor/resources/fontsColors.xml
     1.1 --- a/python.editor/src/org/netbeans/modules/python/editor/lexer/PythonLexer.java	Thu Jul 09 15:46:07 2015 +0200
     1.2 +++ b/python.editor/src/org/netbeans/modules/python/editor/lexer/PythonLexer.java	Sat Aug 15 01:49:37 2015 +0200
     1.3 @@ -703,14 +703,27 @@
     1.4          switch (c1) {
     1.5          case 'a': // and, as, assert, async, await
     1.6              switch (c2) {
     1.7 -            case 'n': // and
     1.8 -                if (TokenUtilities.textEquals(s, "and")) { // NOI18N
     1.9 +            case 'b': // abs
    1.10 +                if (length == 3 && TokenUtilities.textEquals(s, "abs")) { // NOI18N
    1.11 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.12 +                }
    1.13 +            case 'l': // all
    1.14 +                if (length == 3 && TokenUtilities.textEquals(s, "all")) {  // NOI18N
    1.15 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.16 +                }
    1.17 +            case 'n': // and, any
    1.18 +                if (length == 3 && TokenUtilities.textEquals(s, "and")) { // NOI18N
    1.19 +                    return PythonTokenId.ANY_KEYWORD;
    1.20 +                } else if (TokenUtilities.textEquals(s, "any")) {  // NOI18N
    1.21 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.22 +                }
    1.23 +                break;
    1.24 +            case 's':  // as, ascii, assert, async
    1.25 +                if (length == 2) { // as
    1.26                      return PythonTokenId.ANY_KEYWORD;
    1.27                  }
    1.28 -                break;
    1.29 -            case 's':  // as, assert, async
    1.30 -                if (length == 2) { // as
    1.31 -                    return PythonTokenId.ANY_KEYWORD;
    1.32 +                if (length == 5 && TokenUtilities.textEquals(s, "ascii")) {  // NOI18N
    1.33 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.34                  }
    1.35                  if (length == 6 && TokenUtilities.textEquals(s, "assert")) { // NOI18N
    1.36                      return PythonTokenId.ANY_KEYWORD;
    1.37 @@ -725,21 +738,58 @@
    1.38                  }
    1.39              }
    1.40              break;
    1.41 -        case 'b': // break, bytes
    1.42 +        case 'b': // basestring, bin, bool, break, bytearray, bytes
    1.43 +            if (length == 10 && TokenUtilities.textEquals(s, "basestring")) {  // NOI18N
    1.44 +                return PythonTokenId.BUILTIN_FUNCTION;
    1.45 +            }
    1.46 +            if (length == 3 && TokenUtilities.textEquals(s, "bin")) {  // NOI18N
    1.47 +                return PythonTokenId.BUILTIN_FUNCTION;
    1.48 +            }
    1.49 +            if (length == 4 && TokenUtilities.textEquals(s, "bool")) {  // NOI18N
    1.50 +                return PythonTokenId.BUILTIN_FUNCTION;
    1.51 +            }
    1.52              if (length == 5 && TokenUtilities.textEquals(s, "break")) { // NOI18N
    1.53                  return PythonTokenId.ANY_KEYWORD;
    1.54 -            } else if (length == 5 && TokenUtilities.textEquals(s, "bytes")) { // NOI18N
    1.55 -                return PythonTokenId.STD_SYMBOLS;
    1.56 +            }
    1.57 +            if (length == 9 && TokenUtilities.textEquals(s, "bytearray")) {  // NOI18N
    1.58 +                return PythonTokenId.BUILTIN_FUNCTION;
    1.59 +            }
    1.60 +            if (length == 5 && TokenUtilities.textEquals(s, "bytes")) { // NOI18N
    1.61 +                return PythonTokenId.BUILTIN_FUNCTION;
    1.62              }
    1.63              break;
    1.64 -        case 'c': // class, continue
    1.65 +        case 'c': // callable, chr, class, classmethod, continue
    1.66              switch (c2) {
    1.67 -            case 'l': // class
    1.68 +            case 'a': // callable
    1.69 +                if (length == 8 && TokenUtilities.textEquals(s, "callable")) {  // NOI18N
    1.70 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.71 +                }
    1.72 +                break;
    1.73 +            case 'h': // chr
    1.74 +                if (length == 3 && TokenUtilities.textEquals(s, "chr")) {  // NOI18N
    1.75 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.76 +                }
    1.77 +                break;
    1.78 +            case 'l': // class, classmethod
    1.79                  if (length == 5 && TokenUtilities.textEquals(s, "class")) { // NOI18N
    1.80                      return PythonTokenId.CLASS;
    1.81                  }
    1.82 +                if (length == 11 && TokenUtilities.textEquals(s, "classmethod")) {  // NOI18N
    1.83 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.84 +                }
    1.85                  break;
    1.86 -            case 'o':  // continue
    1.87 +            case 'm': // cmp
    1.88 +                if (length == 3 && TokenUtilities.textEquals(s, "cmp")) {  // NOI18N
    1.89 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.90 +                }
    1.91 +                break;
    1.92 +            case 'o':  // compile, complex, continue
    1.93 +                if (length == 7 && TokenUtilities.textEquals(s, "compile")) {  // NOI18N
    1.94 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.95 +                }
    1.96 +                if (length == 7 && TokenUtilities.textEquals(s, "complex")) {  // NOI18N
    1.97 +                    return PythonTokenId.BUILTIN_FUNCTION;
    1.98 +                }
    1.99                  if (length == 8 && TokenUtilities.textEquals(s, "continue")) { // NOI18N
   1.100                      return PythonTokenId.ANY_KEYWORD;
   1.101                  }
   1.102 @@ -747,16 +797,32 @@
   1.103              }
   1.104              break;
   1.105          case 'd': // def, del
   1.106 -            if (c2 == 'e' && length == 3) { // def, del
   1.107 -                char c3 = s.charAt(2);
   1.108 -                if (c3 == 'f') { // def
   1.109 -                    return PythonTokenId.DEF;
   1.110 -                } else if (c3 == 'l') { // del
   1.111 -                    return PythonTokenId.ANY_KEYWORD;
   1.112 -                }
   1.113 +            switch (c2) {
   1.114 +                case 'e': // def, del, delattr
   1.115 +                    if (length == 3 && TokenUtilities.textEquals(s, "def")) {  // NOI18N
   1.116 +                        return PythonTokenId.DEF;
   1.117 +                    }
   1.118 +                    if (length == 3 && TokenUtilities.textEquals(s, "del")) {  // NOI18N
   1.119 +                        return PythonTokenId.ANY_KEYWORD;
   1.120 +                    }
   1.121 +                    if (length == 7 && TokenUtilities.textEquals(s, "delattr")) {  // NOI18N
   1.122 +                        return PythonTokenId.BUILTIN_FUNCTION;
   1.123 +                    }
   1.124 +                    break;
   1.125 +                case 'i': // dict, dir, divmod
   1.126 +                    if (length == 4 && TokenUtilities.textEquals(s, "dict")) {  // NOI18N
   1.127 +                        return PythonTokenId.BUILTIN_FUNCTION;
   1.128 +                    }
   1.129 +                    if (length == 3 && TokenUtilities.textEquals(s, "dir")) {  // NOI18N
   1.130 +                        return PythonTokenId.BUILTIN_FUNCTION;
   1.131 +                    }
   1.132 +                    if (length == 6 && TokenUtilities.textEquals(s, "divmod")) {  // NOI18N
   1.133 +                        return PythonTokenId.BUILTIN_FUNCTION;
   1.134 +                    }
   1.135 +                    break;
   1.136              }
   1.137              break;
   1.138 -        case 'e': // elif, else, except, exec
   1.139 +        case 'e': // elif, else, enumerate, eval, except, exec, execfile
   1.140              switch (c2) {
   1.141              case 'l': // elif, else
   1.142                  if (length == 4) {
   1.143 @@ -770,49 +836,93 @@
   1.144                  break;
   1.145              case 'n': // enumerate
   1.146                  if (length == 9 && TokenUtilities.textEquals(s, "enumerate")) { // NOI18N
   1.147 -                    return PythonTokenId.STD_SYMBOLS;
   1.148 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.149                  }
   1.150 -            case 'x': // except, exec
   1.151 +                break;
   1.152 +            case 'v': // eval
   1.153 +                if (length == 4 && TokenUtilities.textEquals(s, "eval")) {  // NOI18N
   1.154 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.155 +                }
   1.156 +                break;
   1.157 +            case 'x': // except, exec, execfile
   1.158                  if (length == 4 && TokenUtilities.textEquals(s, "exec")) { // NOI18N
   1.159                      return PythonTokenId.ANY_KEYWORD;
   1.160                  }
   1.161 +                if (length == 8 && TokenUtilities.textEquals(s, "execfile")) { // NOI18N
   1.162 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.163 +                }
   1.164                  if (length == 6 && TokenUtilities.textEquals(s, "except")) { // NOI18N
   1.165                      return PythonTokenId.EXCEPT;
   1.166                  }
   1.167                  break;
   1.168              }
   1.169              break;
   1.170 -        case 'f': // finally,for,from
   1.171 +        case 'f': // file, filter, finally, for, from
   1.172              switch (c2) {
   1.173 -            case 'i': // finally
   1.174 +            case 'i': // file, filter, finally
   1.175 +                if (length == 4 && TokenUtilities.textEquals(s, "file")) {  // NOI18N
   1.176 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.177 +                }
   1.178 +                if (length == 6 && TokenUtilities.textEquals(s, "filter")) {  // NOI18N
   1.179 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.180 +                }
   1.181                  if (length == 7 && TokenUtilities.textEquals(s, "finally")) { // NOI18N
   1.182                      return PythonTokenId.FINALLY;
   1.183                  }
   1.184                  break;
   1.185 -            case 'o': // for
   1.186 +            case 'o': // for, format
   1.187                  if (length == 3 && TokenUtilities.textEquals(s, "for")) { // NOI18N
   1.188                      return PythonTokenId.ANY_KEYWORD;
   1.189                  }
   1.190 +                if (length == 6 && TokenUtilities.textEquals(s, "format")) {  // NOI18N
   1.191 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.192 +                }
   1.193                  break;
   1.194 -            case 'r': // from
   1.195 +            case 'r': // from, frozenset
   1.196                  if (length == 4 && TokenUtilities.textEquals(s, "from")) { // NOI18N
   1.197                      return PythonTokenId.FROM;
   1.198                  }
   1.199 +                if (length == 9 && TokenUtilities.textEquals(s, "frozenset")) {  // NOI18N
   1.200 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.201 +                }
   1.202                  break;
   1.203              case 'l':
   1.204                  if (length == 5 && TokenUtilities.textEquals(s, "float")) {
   1.205 -                    return PythonTokenId.STD_SYMBOLS;
   1.206 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.207                  }
   1.208 +                break;
   1.209              }
   1.210              break;
   1.211 -        case 'g': // global
   1.212 +        case 'g': // getattr, global, globals
   1.213 +            if (length == 7 && TokenUtilities.textEquals(s, "getattr")) {  // NOI18N
   1.214 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.215 +            }
   1.216              if (length == 6 && TokenUtilities.textEquals(s, "global")) { // NOI18N
   1.217                  return PythonTokenId.ANY_KEYWORD;
   1.218              }
   1.219 +            if (length == 7 && TokenUtilities.textEquals(s, "globals")) { // NOI18N
   1.220 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.221 +            }
   1.222              break;
   1.223 -        case 'i': // if,import,in,is, int
   1.224 +        case 'h': // hasattr, hash, help, hex
   1.225 +            if (length == 7 && TokenUtilities.textEquals(s, "hasattr")) {  // NOI18N
   1.226 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.227 +            }
   1.228 +            if (length == 4 && TokenUtilities.textEquals(s, "hash")) {  // NOI18N
   1.229 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.230 +            }
   1.231 +            if (length == 4 && TokenUtilities.textEquals(s, "help")) {  // NOI18N
   1.232 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.233 +            }
   1.234 +            if (length == 3 && TokenUtilities.textEquals(s, "hex")) {  // NOI18N
   1.235 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.236 +            }
   1.237 +            break;
   1.238 +        case 'i': // id, if, import, in, input, int, is, issubclass, iter
   1.239              if (length == 2) {
   1.240                  switch (c2) {
   1.241 +                case 'd': // id
   1.242 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.243                  case 'f': // if
   1.244                      return PythonTokenId.IF;
   1.245                  case 'n': // in
   1.246 @@ -823,76 +933,172 @@
   1.247                      return PythonTokenId.ANY_KEYWORD;
   1.248                  }
   1.249              } else if (c2 == 'm' && length == 6 && TokenUtilities.textEquals(s, "import")) { // NOI18N
   1.250 -                // import
   1.251                  return PythonTokenId.IMPORT;
   1.252 +            } else if (length == 5 && TokenUtilities.textEquals(s, "input")) {  // NOI18N
   1.253 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.254              } else if (length == 3 && TokenUtilities.textEquals(s, "int")) { // NOI18N
   1.255 -                return PythonTokenId.STD_SYMBOLS;
   1.256 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.257              } else if (length == 10 && TokenUtilities.textEquals(s, "isinstance")) { // NOI18N
   1.258 -                return PythonTokenId.STD_SYMBOLS;
   1.259 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.260 +            } else if (length == 10 && TokenUtilities.textEquals(s, "issubclass")) { // NOI18N
   1.261 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.262 +            } else if (length == 4 && TokenUtilities.textEquals(s, "iter")) { // NOI18N
   1.263 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.264              }
   1.265              break;
   1.266 -        case 'l': // lambda, len, list
   1.267 +        case 'l': // lambda, len, list, locals, long
   1.268              if (length == 6 && TokenUtilities.textEquals(s, "lambda")) { // NOI18N
   1.269                  return PythonTokenId.ANY_KEYWORD;
   1.270              } else if (length == 3 && TokenUtilities.textEquals(s, "len")) { // NOI18N
   1.271 -                return PythonTokenId.STD_SYMBOLS;
   1.272 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.273              } else if (length == 4 && TokenUtilities.textEquals(s, "list")) { // NOI18N
   1.274 -                return PythonTokenId.STD_SYMBOLS;
   1.275 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.276 +            } else if (length == 6 && TokenUtilities.textEquals(s, "locals")) { // NOI18N
   1.277 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.278 +            } else if (length == 4 && TokenUtilities.textEquals(s, "long")) { // NOI18N
   1.279 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.280              }
   1.281              break;
   1.282 -        case 'n': // not
   1.283 +        case 'm': // map, max, memoryview, min
   1.284 +            if (length == 3 && TokenUtilities.textEquals(s, "map")) { // NOI18N
   1.285 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.286 +            }
   1.287 +            if (length == 3 && TokenUtilities.textEquals(s, "max")) { // NOI18N
   1.288 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.289 +            }
   1.290 +            if (length == 10 && TokenUtilities.textEquals(s, "memoryview")) { // NOI18N
   1.291 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.292 +            }
   1.293 +            if (length == 3 && TokenUtilities.textEquals(s, "min")) { // NOI18N
   1.294 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.295 +            }
   1.296 +            break;
   1.297 +        case 'n': // next, nonlocal, not
   1.298 +            if (length == 4 && TokenUtilities.textEquals(s, "next")) { // NOI18N
   1.299 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.300 +            }
   1.301 +            if (length == 8 && TokenUtilities.textEquals(s, "nonlocal")) { // NOI18N
   1.302 +                return PythonTokenId.ANY_KEYWORD;
   1.303 +            }
   1.304              if (length == 3 && TokenUtilities.textEquals(s, "not")) { // NOI18N
   1.305                  return PythonTokenId.ANY_KEYWORD;
   1.306 -            } else if (length == 8 && TokenUtilities.textEquals(s, "nonlocal")) { // NOI18N
   1.307 -                return PythonTokenId.ANY_KEYWORD;
   1.308              }
   1.309              break;
   1.310 -        case 'o': // or, object
   1.311 +        case 'o': // or, object, oct, open, ord
   1.312              if (length == 2 && TokenUtilities.textEquals(s, "or")) { // NOI18N
   1.313                  return PythonTokenId.ANY_KEYWORD;
   1.314 -            } else if (length == 6 && TokenUtilities.textEquals(s, "object")) { // NOI18N
   1.315 -                return PythonTokenId.STD_SYMBOLS;
   1.316 +            }
   1.317 +            if (length == 6 && TokenUtilities.textEquals(s, "object")) { // NOI18N
   1.318 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.319 +            }
   1.320 +            if (length == 3 && TokenUtilities.textEquals(s, "oct")) { // NOI18N
   1.321 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.322 +            }
   1.323 +            if (length == 4 && TokenUtilities.textEquals(s, "open")) { // NOI18N
   1.324 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.325 +            }
   1.326 +            if (length == 3 && TokenUtilities.textEquals(s, "ord")) { // NOI18N
   1.327 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.328              }
   1.329              break;
   1.330 -        case 'p': // pass,print
   1.331 +        case 'p': // pass, pow, print, property
   1.332              if (c2 == 'a') { // pass
   1.333                  if (length == 4 && TokenUtilities.textEquals(s, "pass")) { // NOI18N
   1.334                      return PythonTokenId.PASS;
   1.335                  }
   1.336 -            } else if (c2 == 'r') { // print
   1.337 +            }
   1.338 +            if (length == 3 && TokenUtilities.textEquals(s, "pow")) { // NOI18N
   1.339 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.340 +            }
   1.341 +            if (c2 == 'r') { // print, property
   1.342                  if (length == 5 && TokenUtilities.textEquals(s, "print")) { // NOI18N
   1.343                      return PythonTokenId.ANY_KEYWORD;
   1.344                  }
   1.345 +                if (length == 8 && TokenUtilities.textEquals(s, "property")) { // NOI18N
   1.346 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.347 +                }
   1.348              }
   1.349              break;
   1.350 -        case 'r': // raise,return
   1.351 -            if (c2 == 'a') { // raise
   1.352 +        case 'r': // raise, range, raise, raw_input, reduce, reload, repr, return, reversed, round
   1.353 +            if (c2 == 'a') { // raise, range
   1.354 +                if (length == 5 && TokenUtilities.textEquals(s, "range")) { // NOI18N
   1.355 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.356 +                }
   1.357                  if (length == 5 && TokenUtilities.textEquals(s, "raise")) { // NOI18N
   1.358                      return PythonTokenId.RAISE;
   1.359                  }
   1.360 -            } else if (c2 == 'e') { // return
   1.361 +                if (length == 9 && TokenUtilities.textEquals(s, "raw_input")) { // NOI18N
   1.362 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.363 +                }
   1.364 +            } else if (c2 == 'e') { // reduce, reload, repr, return, reversed
   1.365 +                if (length == 6 && TokenUtilities.textEquals(s, "reduce")) { // NOI18N
   1.366 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.367 +                }
   1.368 +                if (length == 6 && TokenUtilities.textEquals(s, "reload")) {  // NOI18N
   1.369 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.370 +                }
   1.371 +                if (length == 4 && TokenUtilities.textEquals(s, "repr")) { // NOI18N
   1.372 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.373 +                }
   1.374                  if (length == 6 && TokenUtilities.textEquals(s, "return")) { // NOI18N
   1.375                      return PythonTokenId.RETURN;
   1.376                  }
   1.377 +                if (length == 8 && TokenUtilities.textEquals(s, "reversed")) { // NOI18N
   1.378 +                    return PythonTokenId.BUILTIN_FUNCTION;
   1.379 +                }
   1.380 +            } else if (length == 5 && TokenUtilities.textEquals(s, "round")) { // NOI18N
   1.381 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.382              }
   1.383              break;
   1.384 -        case 's': // self, set, str, super
   1.385 +        case 's': // self, set, setattr, slice, sorted, staticmethod, str, sum, super
   1.386              if (length == 4 && TokenUtilities.textEquals(s, "self")) { // NOI18N
   1.387                  return PythonTokenId.ANY_KEYWORD;
   1.388 -            } else if (length == 3 && TokenUtilities.textEquals(s, "set")) { // NOI18N
   1.389 -                return PythonTokenId.STD_SYMBOLS;
   1.390 -            } else if (length == 3 && TokenUtilities.textEquals(s, "str")) { // NOI18N
   1.391 -                return PythonTokenId.STD_SYMBOLS;
   1.392 -            } else if (length == 5 && TokenUtilities.textEquals(s, "super")) { // NOI18N
   1.393 -                return PythonTokenId.ANY_KEYWORD;
   1.394              }
   1.395 +            if (length == 3 && TokenUtilities.textEquals(s, "set")) { // NOI18N
   1.396 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.397 +            }
   1.398 +            if (length == 7 && TokenUtilities.textEquals(s, "setattr")) { // NOI18N
   1.399 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.400 +            }
   1.401 +            if (length == 5 && TokenUtilities.textEquals(s, "slice")) { // NOI18N
   1.402 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.403 +            }
   1.404 +            if (length == 6 && TokenUtilities.textEquals(s, "sorted")) { // NOI18N
   1.405 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.406 +            }
   1.407 +            if (length == 12 && TokenUtilities.textEquals(s, "staticmethod")) { // NOI18N
   1.408 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.409 +            }
   1.410 +            if (length == 3 && TokenUtilities.textEquals(s, "str")) { // NOI18N
   1.411 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.412 +            }
   1.413 +            if (length == 3 && TokenUtilities.textEquals(s, "sum")) { // NOI18N
   1.414 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.415 +            }
   1.416 +            if (length == 5 && TokenUtilities.textEquals(s, "super")) { // NOI18N
   1.417 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.418 +            }
   1.419 +            break;
   1.420          case 't': // try, tuple, type
   1.421              if (length == 3 && TokenUtilities.textEquals(s, "try")) { // NOI18N
   1.422                  return PythonTokenId.TRY;
   1.423              } else if (length == 5 && TokenUtilities.textEquals(s, "tuple")) { // NOI18N
   1.424 -                return PythonTokenId.STD_SYMBOLS;
   1.425 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.426              } else if (length == 4 && TokenUtilities.textEquals(s, "type")) { // NOI18N
   1.427 -                return PythonTokenId.STD_SYMBOLS;
   1.428 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.429 +            }
   1.430 +            break;
   1.431 +        case 'u': // unichr, unicode
   1.432 +            if (length == 6 && TokenUtilities.textEquals(s, "unichr")) { // NOI18N
   1.433 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.434 +            }
   1.435 +            if (length == 7 && TokenUtilities.textEquals(s, "unicode")) { // NOI18N
   1.436 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.437 +            }
   1.438 +            break;
   1.439 +        case 'v': // vars
   1.440 +            if (length == 4 && TokenUtilities.textEquals(s, "vars")) { // NOI18N
   1.441 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.442              }
   1.443              break;
   1.444          case 'w': // while,with
   1.445 @@ -906,27 +1112,41 @@
   1.446                  }
   1.447              }
   1.448              break;
   1.449 +        case 'x': // xrange
   1.450 +            if (length == 6 && TokenUtilities.textEquals(s, "xrange")) { // NOI18N
   1.451 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.452 +            }
   1.453 +            break;
   1.454          case 'y': // yield
   1.455              if (length == 5 && TokenUtilities.textEquals(s, "yield")) { // NOI18N
   1.456                  return PythonTokenId.ANY_KEYWORD;
   1.457              }
   1.458              break;
   1.459 +        case 'z': // zip
   1.460 +            if (length == 3 && TokenUtilities.textEquals(s, "zip")) { // NOI18N
   1.461 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.462 +            }
   1.463 +            break;
   1.464          case 'F': // False
   1.465              if (length == 5 && TokenUtilities.textEquals(s, "False")) { // NOI18N
   1.466                  return PythonTokenId.FALSE;
   1.467              }
   1.468 +            break;
   1.469          case 'N': // None
   1.470              if (length == 4 && TokenUtilities.textEquals(s, "None")) { // NOI18N
   1.471                  return PythonTokenId.NONE;
   1.472              }
   1.473 +            break;
   1.474          case 'T': // True
   1.475              if (length == 4 && TokenUtilities.textEquals(s, "True")) { // NOI18N
   1.476                  return PythonTokenId.TRUE;
   1.477              }
   1.478 +            break;
   1.479          case '_': // Special symbols of python
   1.480              if (length > 4 && TokenUtilities.startsWith(s, "__") && TokenUtilities.endsWith(s, "__")) { // NOI18N
   1.481 -                return PythonTokenId.STD_SYMBOLS;
   1.482 +                return PythonTokenId.BUILTIN_FUNCTION;
   1.483              }
   1.484 +            break;
   1.485          }
   1.486  
   1.487          return null;
     2.1 --- a/python.editor/src/org/netbeans/modules/python/editor/lexer/PythonTokenId.java	Thu Jul 09 15:46:07 2015 +0200
     2.2 +++ b/python.editor/src/org/netbeans/modules/python/editor/lexer/PythonTokenId.java	Sat Aug 15 01:49:37 2015 +0200
     2.3 @@ -81,7 +81,7 @@
     2.4      DECORATOR(null, OPERATOR_CAT), // NOI18N
     2.5      //    CONTINUED_LINE(null, WHITESPACE_CAT), // NOI18N
     2.6      COMMENT(null, COMMENT_CAT),
     2.7 -    STD_SYMBOLS(null, KEYWORD_CAT), // NOI18N
     2.8 +    BUILTIN_FUNCTION(null, KEYWORD_CAT), // NOI18N
     2.9      LPAREN("(", SEPARATOR_CAT), // NOI18N
    2.10      RPAREN(")", SEPARATOR_CAT), // NOI18N
    2.11      LBRACE("{", SEPARATOR_CAT), // NOI18N
     3.1 --- a/python.editor/src/org/netbeans/modules/python/editor/resources/fontsColors.xml	Thu Jul 09 15:46:07 2015 +0200
     3.2 +++ b/python.editor/src/org/netbeans/modules/python/editor/resources/fontsColors.xml	Sat Aug 15 01:49:37 2015 +0200
     3.3 @@ -45,7 +45,7 @@
     3.4          <font style="bold" />
     3.5      </fontcolor>
     3.6      <fontcolor name="ERROR" foreColor="CC3300" />
     3.7 -    <fontcolor name="STD_SYMBOLS" foreColor="3366CC" />
     3.8 +    <fontcolor name="BUILTIN_FUNCTION" foreColor="3366CC" />
     3.9  
    3.10      <!--"semantic" highlighting:-->
    3.11      <fontcolor name="mod-unused" waveUnderlined="999999"/>