summaryrefslogtreecommitdiffstats
path: root/Misc/Vim/vim_syntax.py
diff options
context:
space:
mode:
Diffstat (limited to 'Misc/Vim/vim_syntax.py')
-rw-r--r--Misc/Vim/vim_syntax.py229
1 files changed, 0 insertions, 229 deletions
diff --git a/Misc/Vim/vim_syntax.py b/Misc/Vim/vim_syntax.py
deleted file mode 100644
index 172b350..0000000
--- a/Misc/Vim/vim_syntax.py
+++ /dev/null
@@ -1,229 +0,0 @@
-from __future__ import with_statement
-# XXX(nnorwitz): what versions of python is this file supposed to work with?
-# It uses the old print statement not in py3k.
-
-import keyword
-import exceptions
-import builtins
-from string import Template
-from sys import subversion
-
-comment_header = '''" Auto-generated Vim syntax file for Python (%s: r%s).
-"
-" 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 = sorted(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 = sorted(builtin for builtin in dir(builtins)
- 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 = next(it)
- 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 % subversion[1:]
- 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 + next(stmt_iter)
- 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")