diff options
| -rwxr-xr-x | build | 2 | ||||
| -rw-r--r-- | indent/python.vim | 213 | ||||
| -rw-r--r-- | syntax/python.vim | 165 | 
3 files changed, 270 insertions, 110 deletions
| @@ -99,7 +99,7 @@ PACKS="    php:StanAngeloff/php.vim    puppet:ajf/puppet-vim    protobuf:uarun/vim-protobuf -  python:vim-scripts/python.vim--Vasiliev +  python:mitsuhiko/vim-python-combined    r-lang:vim-scripts/R.vim    rspec:sheerun/rspec.vim    ruby:vim-ruby/vim-ruby diff --git a/indent/python.vim b/indent/python.vim new file mode 100644 index 00000000..24ffd88c --- /dev/null +++ b/indent/python.vim @@ -0,0 +1,213 @@ +" PEP8 compatible Python indent file +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +    finish +endif +let b:did_indent = 1 + +setlocal expandtab +setlocal nolisp +setlocal autoindent +setlocal indentexpr=GetPythonPEPIndent(v:lnum) +setlocal indentkeys=!^F,o,O,<:>,0),0],0},=elif,=except + +let s:maxoff = 50 + +" Find backwards the closest open parenthesis/bracket/brace. +function! s:SearchParensPair() +  let line = line('.') +  let col = col('.') + +  " Skip strings and comments and don't look too far +  let skip = "line('.') < " . (line - s:maxoff) . " ? dummy :" . +        \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? ' . +        \ '"string\\|comment"' + +  " Search for parentheses +  call cursor(line, col) +  let parlnum = searchpair('(', '', ')', 'bW', skip) +  let parcol = col('.') + +  " Search for brackets +  call cursor(line, col) +  let par2lnum = searchpair('\[', '', '\]', 'bW', skip) +  let par2col = col('.') + +  " Search for braces +  call cursor(line, col) +  let par3lnum = searchpair('{', '', '}', 'bW', skip) +  let par3col = col('.') + +  " Get the closest match +  if par2lnum > parlnum || (par2lnum == parlnum && par2col > parcol) +    let parlnum = par2lnum +    let parcol = par2col +  endif +  if par3lnum > parlnum || (par3lnum == parlnum && par3col > parcol) +    let parlnum = par3lnum +    let parcol = par3col +  endif + +  " Put the cursor on the match +  if parlnum > 0 +    call cursor(parlnum, parcol) +  endif +  return parlnum +endfunction + +" Find the start of a multi-line statement +function! s:StatementStart(lnum) +  let lnum = a:lnum +  while 1 +    if getline(lnum - 1) =~ '\\$' +      let lnum = lnum - 1 +    else +      call cursor(lnum, 1) +      let maybe_lnum = s:SearchParensPair() +      if maybe_lnum < 1 +        return lnum +      else +        let lnum = maybe_lnum +      endif +    endif +  endwhile +endfunction + +" Find the block starter that matches the current line +function! s:BlockStarter(lnum, block_start_re) +  let lnum = a:lnum +  let maxindent = 10000       " whatever +  while lnum > 1 +    let lnum = prevnonblank(lnum - 1) +    if indent(lnum) < maxindent +      if getline(lnum) =~ a:block_start_re +        return lnum +      else +        let maxindent = indent(lnum) +        " It's not worth going further if we reached the top level +        if maxindent == 0 +          return -1 +        endif +      endif +    endif +  endwhile +  return -1 +endfunction + +function! GetPythonPEPIndent(lnum) +  let scol = col('.') + +  " First line has indent 0 +  if a:lnum == 1 +    return 0 +  endif + +  " If we can find an open parenthesis/bracket/brace, line up with it. +  call cursor(a:lnum, 1) +  let parlnum = s:SearchParensPair() +  if parlnum > 0 +    let parcol = col('.') +    let matches = matchlist(getline(a:lnum), '^\(\s*\)[])}]') +    if len(matches) == 0 +      let closing_paren = 0 +      let closing_paren_pos = 0 +    else +      let closing_paren = 1 +      let closing_paren_pos = len(matches[1]) +    endif +    if match(getline(parlnum), '[([{]\s*$', parcol - 1) != -1 +      if closing_paren +        return indent(parlnum) +      else +        return indent(parlnum) + &shiftwidth +      endif +    elseif a:lnum - 1 != parlnum +      if closing_paren && closing_paren_pos > scol +        return indent(parlnum) +      else +        let lastindent = match(getline(a:lnum - 1), '\S') +        if lastindent != -1 && lastindent < parcol +          return lastindent +        endif +      endif +    endif + +    " If we line up with an opening column there is a special case +    " we want to handle: a docstring as argument.  In that case we +    " don't want to line up with the paren but with the statement +    " imagine foo(doc=""" as example +    echo getline(parlnum) +    if match(getline(parlnum), '\("""\|' . "'''" . '\)\s*$') != -1 +      return indent(parlnum) +    endif + +    return parcol +  endif + +  " Examine this line +  let thisline = getline(a:lnum) +  let thisindent = indent(a:lnum) + +  " If the line starts with 'elif' or 'else', line up with 'if' or 'elif' +  if thisline =~ '^\s*\(elif\|else\)\>' +    let bslnum = s:BlockStarter(a:lnum, '^\s*\(if\|elif\)\>') +    if bslnum > 0 +      return indent(bslnum) +    else +      return -1 +    endif +  endif + +  " If the line starts with 'except' or 'finally', line up with 'try' +  " or 'except' +  if thisline =~ '^\s*\(except\|finally\)\>' +    let bslnum = s:BlockStarter(a:lnum, '^\s*\(try\|except\)\>') +    if bslnum > 0 +      return indent(bslnum) +    else +      return -1 +    endif +  endif + +  " Examine previous line +  let plnum = a:lnum - 1 +  let pline = getline(plnum) +  let sslnum = s:StatementStart(plnum) + +  " If the previous line is blank, keep the same indentation +  if pline =~ '^\s*$' +    return -1 +  endif + +  " If this line is explicitly joined, try to find an indentation that looks +  " good. +  if pline =~ '\\$' +    let compound_statement = '^\s*\(if\|while\|from\|import\|for\s.*\sin\|except\)\s*' +    let maybe_indent = matchend(getline(sslnum), compound_statement) +    if maybe_indent != -1 +      return maybe_indent +    else +      return indent(sslnum) + &sw * 2 +    endif +  endif + +  " If the previous line ended with a colon and is not a comment, indent +  " relative to statement start. +  if pline =~ '^[^#]*:\s*\(#.*\)\?$' +    return indent(sslnum) + &sw +  endif + +  " If the previous line was a stop-execution statement or a pass +  if getline(sslnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>' +    " See if the user has already dedented +    if indent(a:lnum) > indent(sslnum) - &sw +      " If not, recommend one dedent +      return indent(sslnum) - &sw +    endif +    " Otherwise, trust the user +    return -1 +  endif + +  " In all other cases, line up with the start of the previous statement. +  return indent(sslnum) +endfunction diff --git a/syntax/python.vim b/syntax/python.vim index 0e0bb126..7482d076 100644 --- a/syntax/python.vim +++ b/syntax/python.vim @@ -1,27 +1,20 @@  " Vim syntax file -" Language:	Python -" Maintainer:	Dmitry Vasiliev <dima@hlabs.spb.ru> -" URL:		http://www.hlabs.spb.ru/vim/python.vim -" Last Change:	2010-04-09 -" Filenames:	*.py -" Version:	2.6.6  "  " Based on python.vim (from Vim 6.1 distribution)  " by Neil Schemenauer <nas@python.ca>  " +" Notes Armin: +" +"     This version of the syntax file works better for 2.x and 3.x without +"     having to switch modes. +"  " Thanks:  "  "    Jeroen Ruigrok van der Werven -"        for the idea to highlight erroneous operators +"        for the idea of highlighting for erroneous operators  "    Pedro Algarvio  "        for the patch to enable spell checking only for the right spots  "        (strings and comments) -"    John Eikenberry -"        for the patch fixing small typo -"    Caleb Adamantine -"        for the patch fixing highlighting for decorators -"    Andrea Riciputi -"        for the patch with new configuration options  "  " Options: @@ -31,27 +24,15 @@  "  " Option names:  " -"    For highlight builtin functions and objects: +"    For highlight builtin functions:  "       python_highlight_builtins  " -"    For highlight builtin objects: -"       python_highlight_builtin_objs -" -"    For highlight builtin funtions: -"       python_highlight_builtin_funcs -"  "    For highlight standard exceptions:  "       python_highlight_exceptions  "  "    For highlight string formatting:  "       python_highlight_string_formatting  " -"    For highlight str.format syntax: -"       python_highlight_string_format -" -"    For highlight string.Template syntax: -"       python_highlight_string_templates -"  "    For highlight indentation errors:  "       python_highlight_indent_errors  " @@ -61,15 +42,13 @@  "    For highlight doc-tests:  "       python_highlight_doctests  " -"    If you want all Python highlightings above: -"       python_highlight_all +"    If you want all possible Python highlighting:  "    (This option not override previously set options) +"       python_highlight_all  "  "    For fast machines:  "       python_slow_sync  " -"    For "print" builtin as function: -"       python_print_as_function  " For version 5.x: Clear all syntax items  " For version 6.x: Quit when a syntax file was already loaded @@ -82,12 +61,7 @@ endif  if exists("python_highlight_all") && python_highlight_all != 0    " Not override previously set options    if !exists("python_highlight_builtins") -    if !exists("python_highlight_builtin_objs") -      let python_highlight_builtin_objs = 1 -    endif -    if !exists("python_highlight_builtin_funcs") -      let python_highlight_builtin_funcs = 1 -    endif +    let python_highlight_builtins = 1    endif    if !exists("python_highlight_exceptions")      let python_highlight_exceptions = 1 @@ -95,12 +69,6 @@ if exists("python_highlight_all") && python_highlight_all != 0    if !exists("python_highlight_string_formatting")      let python_highlight_string_formatting = 1    endif -  if !exists("python_highlight_string_format") -    let python_highlight_string_format = 1 -  endif -  if !exists("python_highlight_string_templates") -    let python_highlight_string_templates = 1 -  endif    if !exists("python_highlight_indent_errors")      let python_highlight_indent_errors = 1    endif @@ -118,23 +86,20 @@ syn keyword pythonStatement	exec return  syn keyword pythonStatement	pass raise  syn keyword pythonStatement	global assert  syn keyword pythonStatement	lambda yield -syn keyword pythonStatement	with +syn keyword pythonStatement	with nonlocal True False None  syn keyword pythonStatement	def class nextgroup=pythonFunction skipwhite  syn match   pythonFunction	"[a-zA-Z_][a-zA-Z0-9_]*" display contained  syn keyword pythonRepeat	for while  syn keyword pythonConditional	if elif else -syn keyword pythonPreCondit	import from as +syn keyword pythonImport	import from as  syn keyword pythonException	try except finally  syn keyword pythonOperator	and in is not or -if !exists("python_print_as_function") || python_print_as_function == 0 -  syn keyword pythonStatement print -endif +" Print keyword but only if not used as function +syn match pythonStatement "\<print\>\((\)\@!" display  " Decorators (new in Python 2.4) -syn match   pythonDecorator	"@" display nextgroup=pythonDottedName skipwhite -syn match   pythonDottedName "[a-zA-Z_][a-zA-Z0-9_]*\(\.[a-zA-Z_][a-zA-Z0-9_]*\)*" display contained -syn match   pythonDot        "\." display containedin=pythonDottedName +syn match   pythonDecorator	"@" display nextgroup=pythonFunction skipwhite  " Comments  syn match   pythonComment	"#.*$" display contains=pythonTodo,@Spell @@ -145,7 +110,7 @@ syn keyword pythonTodo		TODO FIXME XXX contained  " Errors  syn match pythonError		"\<\d\+\D\+\>" display  syn match pythonError		"[$?]" display -syn match pythonError		"[&|]\{2,}" display +syn match pythonError		"[-+&|]\{2,}" display  syn match pythonError		"[=]\{3,}" display  " TODO: Mixing spaces and tabs also may be used for pretty formatting multiline @@ -160,10 +125,10 @@ if exists("python_highlight_space_errors") && python_highlight_space_errors != 0  endif  " Strings -syn region pythonString		start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell -syn region pythonString		start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell -syn region pythonString		start=+[bB]\="""+ end=+"""+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest2,pythonSpaceError,@Spell -syn region pythonString		start=+[bB]\='''+ end=+'''+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest,pythonSpaceError,@Spell +syn region pythonString		start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell +syn region pythonString		start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell +syn region pythonString		start=+"""+ end=+"""+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest2,pythonSpaceError,@Spell +syn region pythonString		start=+'''+ end=+'''+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest,pythonSpaceError,@Spell  syn match  pythonEscape		+\\[abfnrtv'"\\]+ display contained  syn match  pythonEscape		"\\\o\o\=\o\=" display contained @@ -172,6 +137,19 @@ syn match  pythonEscape		"\\x\x\{2}" display contained  syn match  pythonEscapeError	"\\x\x\=\X" display contained  syn match  pythonEscape		"\\$" +" Byte-Strings +syn region pythonBString	start=+[bB]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBEscape,pythonBEscapeError,@Spell +syn region pythonBString	start=+[bB]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBEscape,pythonBEscapeError,@Spell +syn region pythonBString	start=+[bB]"""+ end=+"""+ keepend contains=pythonBEscape,pythonBEscapeError,pythonDocTest2,pythonSpaceError,@Spell +syn region pythonBString	start=+[bB]'''+ end=+'''+ keepend contains=pythonBEscape,pythonBEscapeError,pythonDocTest,pythonSpaceError,@Spell + +syn match  pythonBEscape	+\\[abfnrtv'"\\]+ display contained +syn match  pythonBEscape	"\\\o\o\=\o\=" display contained +syn match  pythonBEscapeError	"\\\o\{,2}[89]" display contained +syn match  pythonBEscape	"\\x\x\{2}" display contained +syn match  pythonBEscapeError	"\\x\x\=\X" display contained +syn match  pythonBEscape	"\\$" +  " Unicode strings  syn region pythonUniString	start=+[uU]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell  syn region pythonUniString	start=+[uU]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell @@ -204,21 +182,8 @@ syn match  pythonUniRawEscapeError	"\([^\\]\(\\\\\)*\)\@<=\\u\x\{,3}\X" display  if exists("python_highlight_string_formatting") && python_highlight_string_formatting != 0    " String formatting -  syn match pythonStrFormatting	"%\(([^)]\+)\)\=[-#0 +]*\d*\(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -  syn match pythonStrFormatting	"%[-#0 +]*\(\*\|\d\+\)\=\(\.\(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -endif - -if exists("python_highlight_string_format") && python_highlight_string_format != 0 -  " str.format syntax -  syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -  syn match pythonStrFormat	"{\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)\(\.[a-zA-Z_][a-zA-Z0-9_]*\|\[\(\d\+\|[^!:\}]\+\)\]\)*\(![rs]\)\=\(:\({\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)}\|\([^}]\=[<>=^]\)\=[ +-]\=#\=0\=\d*\(\.\d\+\)\=[bcdeEfFgGnoxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -endif - -if exists("python_highlight_string_templates") && python_highlight_string_templates != 0 -  " String templates -  syn match pythonStrTemplate	"\$\$" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -  syn match pythonStrTemplate	"\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString -  syn match pythonStrTemplate	"\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString +  syn match pythonStrFormat	"%\(([^)]\+)\)\=[-#0 +]*\d*\(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonBString,pythonUniString,pythonRawString,pythonUniRawString +  syn match pythonStrFormat	"%[-#0 +]*\(\*\|\d\+\)\=\(\.\(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonBString,pythonUniString,pythonRawString,pythonUniRawString  endif  if exists("python_highlight_doctests") && python_highlight_doctests != 0 @@ -228,47 +193,33 @@ if exists("python_highlight_doctests") && python_highlight_doctests != 0  endif  " Numbers (ints, longs, floats, complex) -syn match   pythonHexError	"\<0[xX]\x*[g-zG-Z]\x*[lL]\=\>" display -  syn match   pythonHexNumber	"\<0[xX]\x\+[lL]\=\>" display -syn match   pythonOctNumber "\<0[oO]\o\+[lL]\=\>" display -syn match   pythonBinNumber "\<0[bB][01]\+[lL]\=\>" display - +syn match   pythonHexNumber	"\<0[xX]\>" display  syn match   pythonNumber	"\<\d\+[lLjJ]\=\>" display -  syn match   pythonFloat		"\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" display  syn match   pythonFloat		"\<\d\+[eE][+-]\=\d\+[jJ]\=\>" display  syn match   pythonFloat		"\<\d\+\.\d*\([eE][+-]\=\d\+\)\=[jJ]\=" display -syn match   pythonOctError	"\<0[oO]\=\o*[8-9]\d*[lL]\=\>" display -syn match   pythonBinError	"\<0[bB][01]*[2-9]\d*[lL]\=\>" display +syn match   pythonOctalError	"\<0\o*[89]\d*[lL]\=\>" display +syn match   pythonHexError	"\<0[xX]\X\+[lL]\=\>" display -if exists("python_highlight_builtin_objs") && python_highlight_builtin_objs != 0 -  " Builtin objects and types -  syn keyword pythonBuiltinObj	True False Ellipsis None NotImplemented -  syn keyword pythonBuiltinObj	__debug__ __doc__ __file__ __name__ __package__ -endif +if exists("python_highlight_builtins") && python_highlight_builtins != 0 +  " Builtin functions, types and objects +  syn keyword pythonBuiltinObj	Ellipsis NotImplemented -if exists("python_highlight_builtin_funcs") && python_highlight_builtin_funcs != 0 -  " Builtin functions    syn keyword pythonBuiltinFunc	__import__ abs all any apply -  syn keyword pythonBuiltinFunc	basestring bin bool buffer bytearray bytes callable +  syn keyword pythonBuiltinFunc	basestring bool buffer callable    syn keyword pythonBuiltinFunc	chr classmethod cmp coerce compile complex    syn keyword pythonBuiltinFunc	delattr dict dir divmod enumerate eval -  syn keyword pythonBuiltinFunc	execfile file filter float format frozenset getattr -  syn keyword pythonBuiltinFunc	globals hasattr hash help hex id +  syn keyword pythonBuiltinFunc	execfile file filter float frozenset getattr +  syn keyword pythonBuiltinfunc globals hasattr hash help hex id     syn keyword pythonBuiltinFunc	input int intern isinstance    syn keyword pythonBuiltinFunc	issubclass iter len list locals long map max -  syn keyword pythonBuiltinFunc	min next object oct open ord -  syn keyword pythonBuiltinFunc	pow property range +  syn keyword pythonBuiltinFunc	min object oct open ord pow property range    syn keyword pythonBuiltinFunc	raw_input reduce reload repr -  syn keyword pythonBuiltinFunc	reversed round set setattr +  syn keyword pythonBuiltinFunc reversed round set setattr    syn keyword pythonBuiltinFunc	slice sorted staticmethod str sum super tuple    syn keyword pythonBuiltinFunc	type unichr unicode vars xrange zip - -  if exists("python_print_as_function") && python_print_as_function != 0 -      syn keyword pythonBuiltinFunc	print -  endif  endif  if exists("python_highlight_exceptions") && python_highlight_exceptions != 0 @@ -277,7 +228,7 @@ if exists("python_highlight_exceptions") && python_highlight_exceptions != 0    syn keyword pythonExClass	Exception StandardError ArithmeticError    syn keyword pythonExClass	LookupError EnvironmentError -  syn keyword pythonExClass	AssertionError AttributeError BufferError EOFError +  syn keyword pythonExClass	AssertionError AttributeError EOFError    syn keyword pythonExClass	FloatingPointError GeneratorExit IOError    syn keyword pythonExClass	ImportError IndexError KeyError    syn keyword pythonExClass	KeyboardInterrupt MemoryError NameError @@ -287,12 +238,12 @@ if exists("python_highlight_exceptions") && python_highlight_exceptions != 0    syn keyword pythonExClass	SystemError SystemExit TypeError    syn keyword pythonExClass	UnboundLocalError UnicodeError    syn keyword pythonExClass	UnicodeEncodeError UnicodeDecodeError -  syn keyword pythonExClass	UnicodeTranslateError ValueError VMSError +  syn keyword pythonExClass	UnicodeTranslateError ValueError    syn keyword pythonExClass	WindowsError ZeroDivisionError -  syn keyword pythonExClass	Warning UserWarning BytesWarning DeprecationWarning +  syn keyword pythonExClass	Warning UserWarning DeprecationWarning    syn keyword pythonExClass	PendingDepricationWarning SyntaxWarning -  syn keyword pythonExClass	RuntimeWarning FutureWarning +  syn keyword pythonExClass	RuntimeWarning FutureWarning OverflowWarning    syn keyword pythonExClass	ImportWarning UnicodeWarning  endif @@ -315,7 +266,7 @@ if version >= 508 || !exists("did_python_syn_inits")    endif    HiLink pythonStatement	Statement -  HiLink pythonPreCondit	Statement +  HiLink pythonImport		Statement    HiLink pythonFunction		Function    HiLink pythonConditional	Conditional    HiLink pythonRepeat		Repeat @@ -323,8 +274,6 @@ if version >= 508 || !exists("did_python_syn_inits")    HiLink pythonOperator		Operator    HiLink pythonDecorator	Define -  HiLink pythonDottedName	Function -  HiLink pythonDot          Normal    HiLink pythonComment		Comment    HiLink pythonCoding		Special @@ -336,32 +285,30 @@ if version >= 508 || !exists("did_python_syn_inits")    HiLink pythonSpaceError	Error    HiLink pythonString		String +  HiLink pythonBString		String    HiLink pythonUniString	String    HiLink pythonRawString	String    HiLink pythonUniRawString	String    HiLink pythonEscape			Special +  HiLink pythonBEscape			Special    HiLink pythonEscapeError		Error +  HiLink pythonBEscapeError		Error    HiLink pythonUniEscape		Special    HiLink pythonUniEscapeError		Error    HiLink pythonUniRawEscape		Special    HiLink pythonUniRawEscapeError	Error -  HiLink pythonStrFormatting	Special -  HiLink pythonStrFormat    	Special -  HiLink pythonStrTemplate	    Special +  HiLink pythonStrFormat	Special    HiLink pythonDocTest		Special    HiLink pythonDocTest2		Special    HiLink pythonNumber		Number    HiLink pythonHexNumber	Number -  HiLink pythonOctNumber	Number -  HiLink pythonBinNumber	Number    HiLink pythonFloat		Float -  HiLink pythonOctError	    Error +  HiLink pythonOctalError	Error    HiLink pythonHexError		Error -  HiLink pythonBinError		Error    HiLink pythonBuiltinObj	Structure    HiLink pythonBuiltinFunc	Function | 
