diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Misc/Vim | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Misc/Vim')
-rw-r--r-- | sys/src/cmd/python/Misc/Vim/python.vim | 147 | ||||
-rw-r--r-- | sys/src/cmd/python/Misc/Vim/syntax_test.py | 63 | ||||
-rw-r--r-- | sys/src/cmd/python/Misc/Vim/vim_syntax.py | 226 | ||||
-rw-r--r-- | sys/src/cmd/python/Misc/Vim/vimrc | 95 |
4 files changed, 531 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Misc/Vim/python.vim b/sys/src/cmd/python/Misc/Vim/python.vim new file mode 100644 index 000000000..61d75e2ce --- /dev/null +++ b/sys/src/cmd/python/Misc/Vim/python.vim @@ -0,0 +1,147 @@ +" Auto-generated Vim syntax file for Python +" +" To use: copy or symlink to ~/.vim/syntax/python.vim + + +if exists("b:current_syntax") + finish +endif + +if exists("python_highlight_all") + let python_highlight_numbers = 1 + let python_highlight_builtins = 1 + let python_highlight_exceptions = 1 + let python_highlight_space_errors = 1 +endif + +syn keyword pythonStatement as assert break continue del except exec finally +syn keyword pythonStatement global lambda pass print raise return try with +syn keyword pythonStatement yield + +syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite + +syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" contained + +syn keyword pythonRepeat for while + +syn keyword pythonConditional if elif else + +syn keyword pythonOperator and in is not or + +syn keyword pythonPreCondit import from + +syn match pythonComment "#.*$" contains=pythonTodo + +syn keyword pythonTodo TODO FIXME XXX contained + +syn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape +syn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape +syn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape +syn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape +syn region pythonString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ +syn region pythonString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ +syn region pythonString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ +syn region pythonString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ + +syn match pythonEscape +\\[abfnrtv\'"\\]+ contained +syn match pythonEscape "\\\o\{1,3}" contained +syn match pythonEscape "\\x\x\{2}" contained +syn match pythonEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained + +syn match pythonEscape "\\$" + + +if exists("python_highlight_numbers") + syn match pythonNumber "\<0x\x\+[Ll]\=\>" + syn match pythonNumber "\<\d\+[LljJ]\=\>" + syn match pythonNumber "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" + syn match pythonNumber "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>" + syn match pythonNumber "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" + +endif + + +if exists("python_highlight_builtins") + syn keyword pythonBuiltin unichr all set abs vars int __import__ unicode + syn keyword pythonBuiltin enumerate reduce coerce intern exit issubclass + syn keyword pythonBuiltin divmod file Ellipsis apply isinstance open any + syn keyword pythonBuiltin locals help filter basestring slice copyright min + syn keyword pythonBuiltin super sum tuple hex execfile long id xrange chr + syn keyword pythonBuiltin complex bool zip pow dict True oct NotImplemented + syn keyword pythonBuiltin map None float hash getattr buffer max reversed + syn keyword pythonBuiltin object quit len repr callable credits setattr + syn keyword pythonBuiltin eval frozenset sorted ord __debug__ hasattr + syn keyword pythonBuiltin delattr False input license classmethod type + syn keyword pythonBuiltin raw_input list iter compile reload range globals + syn keyword pythonBuiltin staticmethod str property round dir cmp + +endif + + +if exists("python_highlight_exceptions") + syn keyword pythonException GeneratorExit ImportError RuntimeError + syn keyword pythonException UnicodeTranslateError MemoryError StopIteration + syn keyword pythonException PendingDeprecationWarning EnvironmentError + syn keyword pythonException LookupError OSError DeprecationWarning + syn keyword pythonException UnicodeError UnicodeEncodeError + syn keyword pythonException FloatingPointError ReferenceError NameError + syn keyword pythonException IOError SyntaxError + syn keyword pythonException FutureWarning ImportWarning SystemExit + syn keyword pythonException Exception EOFError StandardError ValueError + syn keyword pythonException TabError KeyError ZeroDivisionError SystemError + syn keyword pythonException UnicodeDecodeError IndentationError + syn keyword pythonException AssertionError TypeError IndexError + syn keyword pythonException RuntimeWarning KeyboardInterrupt UserWarning + syn keyword pythonException SyntaxWarning UnboundLocalError ArithmeticError + syn keyword pythonException Warning NotImplementedError AttributeError + syn keyword pythonException OverflowError BaseException + +endif + + +if exists("python_highlight_space_errors") + syn match pythonSpaceError display excludenl "\S\s\+$"ms=s+1 + syn match pythonSpaceError display " \+\t" + syn match pythonSpaceError display "\t\+ " + +endif + + + hi def link pythonStatement Statement + hi def link pythonStatement Statement + hi def link pythonFunction Function + hi def link pythonRepeat Repeat + hi def link pythonConditional Conditional + hi def link pythonOperator Operator + hi def link pythonPreCondit PreCondit + hi def link pythonComment Comment + hi def link pythonTodo Todo + hi def link pythonString String + hi def link pythonEscape Special + hi def link pythonEscape Special + + if exists("python_highlight_numbers") + hi def link pythonNumber Number + endif + + if exists("python_highlight_builtins") + hi def link pythonBuiltin Function + endif + + if exists("python_highlight_exceptions") + hi def link pythonException Exception + endif + + if exists("python_highlight_space_errors") + hi def link pythonSpaceError Error + endif + + +" Uncomment the 'minlines' statement line and comment out the 'maxlines' +" statement line; changes behaviour to look at least 2000 lines previously for +" syntax matches instead of at most 200 lines +syn sync match pythonSync grouphere NONE "):$" +syn sync maxlines=200 +"syn sync minlines=2000 + +let b:current_syntax = "python" diff --git a/sys/src/cmd/python/Misc/Vim/syntax_test.py b/sys/src/cmd/python/Misc/Vim/syntax_test.py new file mode 100644 index 000000000..ccc7f309c --- /dev/null +++ b/sys/src/cmd/python/Misc/Vim/syntax_test.py @@ -0,0 +1,63 @@ +"""Test file for syntax highlighting of editors. + +Meant to cover a wide range of different types of statements and expressions. +Not necessarily sensical or comprehensive (assume that if one exception is +highlighted that all are, for instance). + +Highlighting extraneous whitespace at the end of the line is not represented +here as all trailing whitespace is automatically removed from .py files in the +repository. + +""" +# Comment +# OPTIONAL: XXX catch your attention + +# Statements +from __future__ import with_statement # Import +from sys import path as thing +assert True # keyword +def foo(): # function definition + return [] +class Bar(object): # Class definition + def __enter__(self): + pass + def __exit__(self, *args): + pass +foo() # UNCOLOURED: function call +while False: # 'while' + continue +for x in foo(): # 'for' + break +with Bar() as stuff: + pass +if False: pass # 'if' +elif False: pass +else: pass + +# Constants +'single-quote', u'unicode' # Strings of all kinds; prefixes not highlighted +"double-quote" +"""triple double-quote""" +'''triple single-quote''' +r'raw' +ur'unicode raw' +'escape\n' +'\04' # octal +'\xFF' # hex +'\u1111' # unicode character +1 # Integral +1L +1.0 # Float +.1 +1+2j # Complex + +# Expressions +1 and 2 or 3 # Boolean operators +2 < 3 # UNCOLOURED: comparison operators +spam = 42 # UNCOLOURED: assignment +2 + 3 # UNCOLOURED: number operators +[] # UNCOLOURED: list +{} # UNCOLOURED: dict +(1,) # UNCOLOURED: tuple +all # Built-in functions +GeneratorExit # Exceptions diff --git a/sys/src/cmd/python/Misc/Vim/vim_syntax.py b/sys/src/cmd/python/Misc/Vim/vim_syntax.py new file mode 100644 index 000000000..3f2a3d8a2 --- /dev/null +++ b/sys/src/cmd/python/Misc/Vim/vim_syntax.py @@ -0,0 +1,226 @@ +from __future__ import with_statement + +import keyword +import exceptions +import __builtin__ +from string import Template + +comment_header = """" Auto-generated Vim syntax file for Python +" +" To use: copy or symlink to ~/.vim/syntax/python.vim""" + +statement_header = """ +if exists("b:current_syntax") + finish +endif""" + +statement_footer = ''' +" Uncomment the 'minlines' statement line and comment out the 'maxlines' +" statement line; changes behaviour to look at least 2000 lines previously for +" syntax matches instead of at most 200 lines +syn sync match pythonSync grouphere NONE "):$" +syn sync maxlines=200 +"syn sync minlines=2000 + +let b:current_syntax = "python"''' + +looping = ('for', 'while') +conditionals = ('if', 'elif', 'else') +boolean_ops = ('and', 'in', 'is', 'not', 'or') +import_stmts = ('import', 'from') +object_defs = ('def', 'class') + +exception_names = frozenset(exc for exc in dir(exceptions) + if not exc.startswith('__')) + +# Need to include functions that start with '__' (e.g., __import__), but +# nothing that comes with modules (e.g., __name__), so just exclude anything in +# the 'exceptions' module since we want to ignore exceptions *and* what any +# module would have +builtin_names = frozenset(builtin for builtin in dir(__builtin__) + if builtin not in dir(exceptions)) + +escapes = (r'+\\[abfnrtv\'"\\]+', r'"\\\o\{1,3}"', r'"\\x\x\{2}"', + r'"\(\\u\x\{4}\|\\U\x\{8}\)"', r'"\\$"') + +todos = ("TODO", "FIXME", "XXX") + +# XXX codify? +numbers = (r'"\<0x\x\+[Ll]\=\>"', r'"\<\d\+[LljJ]\=\>"', + '"\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"', + '"\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"', + '"\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"') + +contained = lambda x: "%s contained" % x + +def str_regexes(): + """Generator to yield various combinations of strings regexes""" + regex_template = Template('matchgroup=Normal ' + + 'start=+[uU]\=${raw}${sep}+ ' + + 'end=+${sep}+ ' + + '${skip} ' + + '${contains}') + skip_regex = Template(r'skip=+\\\\\|\\${sep}+') + for raw in ('', '[rR]'): + for separator in ("'", '"', '"""', "'''"): + if len(separator) == 1: + skip = skip_regex.substitute(sep=separator) + else: + skip = '' + contains = 'contains=pythonEscape' if not raw else '' + yield regex_template.substitute(raw=raw, sep=separator, skip=skip, + contains = contains) + +space_errors = (r'excludenl "\S\s\+$"ms=s+1', r'" \+\t"', r'"\t\+ "') + +statements = ( + ('', + # XXX Might need to change pythonStatement since have + # specific Repeat, Conditional, Operator, etc. for 'while', + # etc. + [("Statement", "pythonStatement", "keyword", + (kw for kw in keyword.kwlist + if kw not in (looping + conditionals + boolean_ops + + import_stmts + object_defs)) + ), + ("Statement", "pythonStatement", "keyword", + (' '.join(object_defs) + + ' nextgroup=pythonFunction skipwhite')), + ("Function","pythonFunction", "match", + contained('"[a-zA-Z_][a-zA-Z0-9_]*"')), + ("Repeat", "pythonRepeat", "keyword", looping), + ("Conditional", "pythonConditional", "keyword", + conditionals), + ("Operator", "pythonOperator", "keyword", boolean_ops), + ("PreCondit", "pythonPreCondit", "keyword", import_stmts), + ("Comment", "pythonComment", "match", + '"#.*$" contains=pythonTodo'), + ("Todo", "pythonTodo", "keyword", + contained(' '.join(todos))), + ("String", "pythonString", "region", str_regexes()), + ("Special", "pythonEscape", "match", + (contained(esc) for esc in escapes + if not '$' in esc)), + ("Special", "pythonEscape", "match", r'"\\$"'), + ] + ), + ("python_highlight_numbers", + [("Number", "pythonNumber", "match", numbers)] + ), + ("python_highlight_builtins", + [("Function", "pythonBuiltin", "keyword", builtin_names)] + ), + ("python_highlight_exceptions", + [("Exception", "pythonException", "keyword", + exception_names)] + ), + ("python_highlight_space_errors", + [("Error", "pythonSpaceError", "match", + ("display " + err for err in space_errors))] + ) + ) + +def syn_prefix(type_, kind): + return 'syn %s %s ' % (type_, kind) + +def fill_stmt(iterable, fill_len): + """Yield a string that fills at most fill_len characters with strings + returned by 'iterable' and separated by a space""" + # Deal with trailing char to handle ' '.join() calculation + fill_len += 1 + overflow = None + it = iter(iterable) + while True: + buffer_ = [] + total_len = 0 + if overflow: + buffer_.append(overflow) + total_len += len(overflow) + 1 + overflow = None + while total_len < fill_len: + try: + new_item = it.next() + buffer_.append(new_item) + total_len += len(new_item) + 1 + except StopIteration: + if buffer_: + break + if overflow: + yield overflow + return + if total_len > fill_len: + overflow = buffer_.pop() + total_len -= len(overflow) - 1 + ret = ' '.join(buffer_) + assert len(ret) <= fill_len + yield ret + +FILL = 80 + +def main(file_path): + with open(file_path, 'w') as FILE: + # Comment for file + print>>FILE, comment_header + print>>FILE, '' + # Statements at start of file + print>>FILE, statement_header + print>>FILE, '' + # Generate case for python_highlight_all + print>>FILE, 'if exists("python_highlight_all")' + for statement_var, statement_parts in statements: + if statement_var: + print>>FILE, ' let %s = 1' % statement_var + else: + print>>FILE, 'endif' + print>>FILE, '' + # Generate Python groups + for statement_var, statement_parts in statements: + if statement_var: + print>>FILE, 'if exists("%s")' % statement_var + indent = ' ' + else: + indent = '' + for colour_group, group, type_, arguments in statement_parts: + if not isinstance(arguments, basestring): + prefix = syn_prefix(type_, group) + if type_ == 'keyword': + stmt_iter = fill_stmt(arguments, + FILL - len(prefix) - len(indent)) + try: + while True: + print>>FILE, indent + prefix + stmt_iter.next() + except StopIteration: + print>>FILE, '' + else: + for argument in arguments: + print>>FILE, indent + prefix + argument + else: + print>>FILE, '' + + else: + print>>FILE, indent + syn_prefix(type_, group) + arguments + print>>FILE, '' + else: + if statement_var: + print>>FILE, 'endif' + print>>FILE, '' + print>>FILE, '' + # Associating Python group with Vim colour group + for statement_var, statement_parts in statements: + if statement_var: + print>>FILE, ' if exists("%s")' % statement_var + indent = ' ' + else: + indent = ' ' + for colour_group, group, type_, arguments in statement_parts: + print>>FILE, (indent + "hi def link %s %s" % + (group, colour_group)) + else: + if statement_var: + print>>FILE, ' endif' + print>>FILE, '' + # Statements at the end of the file + print>>FILE, statement_footer + +if __name__ == '__main__': + main("python.vim") diff --git a/sys/src/cmd/python/Misc/Vim/vimrc b/sys/src/cmd/python/Misc/Vim/vimrc new file mode 100644 index 000000000..af60614b1 --- /dev/null +++ b/sys/src/cmd/python/Misc/Vim/vimrc @@ -0,0 +1,95 @@ +" vimrc file for following the coding standards specified in PEP 7 & 8. +" +" To use this file, source it in your own personal .vimrc file (``source +" <filename>``) or, if you don't have a .vimrc file, you can just symlink to it +" (``ln -s <this file> ~/.vimrc``). All options are protected by autocmds +" (read below for an explanation of the command) so blind sourcing of this file +" is safe and will not affect your settings for non-Python or non-C files. +" +" +" All setting are protected by 'au' ('autocmd') statements. Only files ending +" in .py or .pyw will trigger the Python settings while files ending in *.c or +" *.h will trigger the C settings. This makes the file "safe" in terms of only +" adjusting settings for Python and C files. +" +" Only basic settings needed to enforce the style guidelines are set. +" Some suggested options are listed but commented out at the end of this file. + + +" Number of spaces to use for an indent. +" This will affect Ctrl-T and 'autoindent'. +" Python: 4 spaces +" C: tab (8 spaces) +au BufRead,BufNewFile *.py,*pyw set shiftwidth=4 +au BufRead,BufNewFile *.c,*.h set shiftwidth=4 + +" Number of spaces that a pre-existing tab is equal to. +" For the amount of space used for a new tab use shiftwidth. +" Python: 8 +" C: 8 +au BufRead,BufNewFile *py,*pyw,*.c,*.h set tabstop=8 + +" Replace tabs with the equivalent number of spaces. +" Also have an autocmd for Makefiles since they require hard tabs. +" Python: yes +" C: no +" Makefile: no +au BufRead,BufNewFile *.py,*.pyw set expandtab +au BufRead,BufNewFile *.c,*.h set noexpandtab +au BufRead,BufNewFile Makefile* set noexpandtab + +" Use the below highlight group when displaying bad whitespace is desired +highlight BadWhitespace ctermbg=red guibg=red + +" Display tabs at the beginning of a line in Python mode as bad +au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/ + +" Wrap text after a certain number of characters +" Python: 79 +" C: 79 +au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set textwidth=79 + +" Turn off settings in 'formatoptions' relating to comment formatting. +" - c : do not automatically insert the comment leader when wrapping based on +" 'textwidth' +" - o : do not insert the comment leader when using 'o' or 'O' from command mode +" - r : do not insert the comment leader when hitting <Enter> in insert mode +" Python: not needed +" C: prevents insertion of '*' at the beginning of every line in a comment +au BufRead,BufNewFile *.c,*.h set formatoptions-=c formatoptions-=o formatoptions-=r + +" Use UNIX (\n) line endings. +" Only used for new files so as to not force existing files to change their +" line endings. +" Python: yes +" C: yes +au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix + + +" ---------------------------------------------------------------------------- +" The following section contains suggested settings. While in no way required +" to meet coding standards, they are helpful. + +" Set the default file encoding to UTF-8: ``set encoding=utf-8`` + +" Puts a marker at the beginning of the file to differentiate between UTF and +" UCS encoding (WARNING: can trick shells into thinking a text file is actually +" a binary file when executing the text file): ``set bomb`` + +" For full syntax highlighting: +"``let python_highlight_all=1`` +"``syntax on`` + +" Automatically indent based on file type: ``filetype indent on`` +" Keep indentation level from previous line: ``set autoindent`` + +" Folding based on indentation: ``set foldmethod=indent`` + +" Make trailing whitespace explicit (left off since this will automatically +" insert the highlight or characters *as you type*, which can get annoying): +"``match BadWhitespace /\s\+$/`` +" +" or, for a non-colored, character-based solution: +" +"``set list listchars=trail:-`` + |