annotate Misc/Vim/vim_syntax.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents 418ad159fe84
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
36771
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
1 from __future__ import with_statement
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
2
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
3 import keyword
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
4 import exceptions
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
5 import __builtin__
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
6 from string import Template
45042
418ad159fe84 Update Vim syntax highlighting to specify what revision was used to generate
Brett Cannon <bcannon@gmail.com>
parents: 39864
diff changeset
7 from sys import subversion
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
8
45042
418ad159fe84 Update Vim syntax highlighting to specify what revision was used to generate
Brett Cannon <bcannon@gmail.com>
parents: 39864
diff changeset
9 comment_header = '''" Auto-generated Vim syntax file for Python (%s: r%s).
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
10 "
39864
71e0f3fc57da Make python.vim output more deterministic.
Brett Cannon <bcannon@gmail.com>
parents: 36771
diff changeset
11 " To use: copy or symlink to ~/.vim/syntax/python.vim'''
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
12
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
13 statement_header = """
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
14 if exists("b:current_syntax")
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
15 finish
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
16 endif"""
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
17
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
18 statement_footer = '''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
19 " Uncomment the 'minlines' statement line and comment out the 'maxlines'
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
20 " statement line; changes behaviour to look at least 2000 lines previously for
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
21 " syntax matches instead of at most 200 lines
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
22 syn sync match pythonSync grouphere NONE "):$"
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
23 syn sync maxlines=200
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
24 "syn sync minlines=2000
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
25
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
26 let b:current_syntax = "python"'''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
27
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
28 looping = ('for', 'while')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
29 conditionals = ('if', 'elif', 'else')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
30 boolean_ops = ('and', 'in', 'is', 'not', 'or')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
31 import_stmts = ('import', 'from')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
32 object_defs = ('def', 'class')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
33
39864
71e0f3fc57da Make python.vim output more deterministic.
Brett Cannon <bcannon@gmail.com>
parents: 36771
diff changeset
34 exception_names = sorted(exc for exc in dir(exceptions)
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
35 if not exc.startswith('__'))
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
36
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
37 # Need to include functions that start with '__' (e.g., __import__), but
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
38 # nothing that comes with modules (e.g., __name__), so just exclude anything in
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
39 # the 'exceptions' module since we want to ignore exceptions *and* what any
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
40 # module would have
39864
71e0f3fc57da Make python.vim output more deterministic.
Brett Cannon <bcannon@gmail.com>
parents: 36771
diff changeset
41 builtin_names = sorted(builtin for builtin in dir(__builtin__)
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
42 if builtin not in dir(exceptions))
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
43
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
44 escapes = (r'+\\[abfnrtv\'"\\]+', r'"\\\o\{1,3}"', r'"\\x\x\{2}"',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
45 r'"\(\\u\x\{4}\|\\U\x\{8}\)"', r'"\\$"')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
46
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
47 todos = ("TODO", "FIXME", "XXX")
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
48
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
49 # XXX codify?
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
50 numbers = (r'"\<0x\x\+[Ll]\=\>"', r'"\<\d\+[LljJ]\=\>"',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
51 '"\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
52 '"\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
53 '"\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
54
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
55 contained = lambda x: "%s contained" % x
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
56
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
57 def str_regexes():
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
58 """Generator to yield various combinations of strings regexes"""
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
59 regex_template = Template('matchgroup=Normal ' +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
60 'start=+[uU]\=${raw}${sep}+ ' +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
61 'end=+${sep}+ ' +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
62 '${skip} ' +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
63 '${contains}')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
64 skip_regex = Template(r'skip=+\\\\\|\\${sep}+')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
65 for raw in ('', '[rR]'):
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
66 for separator in ("'", '"', '"""', "'''"):
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
67 if len(separator) == 1:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
68 skip = skip_regex.substitute(sep=separator)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
69 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
70 skip = ''
36752
7b66b2dcc5e9 Add Misc/NEWS entry for Misc/Vim/vim_syntax.py . Also use conditional
Brett Cannon <bcannon@gmail.com>
parents: 36658
diff changeset
71 contains = 'contains=pythonEscape' if not raw else ''
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
72 yield regex_template.substitute(raw=raw, sep=separator, skip=skip,
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
73 contains = contains)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
74
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
75 space_errors = (r'excludenl "\S\s\+$"ms=s+1', r'" \+\t"', r'"\t\+ "')
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
76
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
77 statements = (
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
78 ('',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
79 # XXX Might need to change pythonStatement since have
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
80 # specific Repeat, Conditional, Operator, etc. for 'while',
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
81 # etc.
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
82 [("Statement", "pythonStatement", "keyword",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
83 (kw for kw in keyword.kwlist
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
84 if kw not in (looping + conditionals + boolean_ops +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
85 import_stmts + object_defs))
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
86 ),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
87 ("Statement", "pythonStatement", "keyword",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
88 (' '.join(object_defs) +
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
89 ' nextgroup=pythonFunction skipwhite')),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
90 ("Function","pythonFunction", "match",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
91 contained('"[a-zA-Z_][a-zA-Z0-9_]*"')),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
92 ("Repeat", "pythonRepeat", "keyword", looping),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
93 ("Conditional", "pythonConditional", "keyword",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
94 conditionals),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
95 ("Operator", "pythonOperator", "keyword", boolean_ops),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
96 ("PreCondit", "pythonPreCondit", "keyword", import_stmts),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
97 ("Comment", "pythonComment", "match",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
98 '"#.*$" contains=pythonTodo'),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
99 ("Todo", "pythonTodo", "keyword",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
100 contained(' '.join(todos))),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
101 ("String", "pythonString", "region", str_regexes()),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
102 ("Special", "pythonEscape", "match",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
103 (contained(esc) for esc in escapes
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
104 if not '$' in esc)),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
105 ("Special", "pythonEscape", "match", r'"\\$"'),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
106 ]
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
107 ),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
108 ("python_highlight_numbers",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
109 [("Number", "pythonNumber", "match", numbers)]
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
110 ),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
111 ("python_highlight_builtins",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
112 [("Function", "pythonBuiltin", "keyword", builtin_names)]
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
113 ),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
114 ("python_highlight_exceptions",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
115 [("Exception", "pythonException", "keyword",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
116 exception_names)]
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
117 ),
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
118 ("python_highlight_space_errors",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
119 [("Error", "pythonSpaceError", "match",
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
120 ("display " + err for err in space_errors))]
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
121 )
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
122 )
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
123
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
124 def syn_prefix(type_, kind):
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
125 return 'syn %s %s ' % (type_, kind)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
126
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
127 def fill_stmt(iterable, fill_len):
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
128 """Yield a string that fills at most fill_len characters with strings
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
129 returned by 'iterable' and separated by a space"""
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
130 # Deal with trailing char to handle ' '.join() calculation
36658
c9fbb067c2a6 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 36652
diff changeset
131 fill_len += 1
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
132 overflow = None
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
133 it = iter(iterable)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
134 while True:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
135 buffer_ = []
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
136 total_len = 0
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
137 if overflow:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
138 buffer_.append(overflow)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
139 total_len += len(overflow) + 1
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
140 overflow = None
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
141 while total_len < fill_len:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
142 try:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
143 new_item = it.next()
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
144 buffer_.append(new_item)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
145 total_len += len(new_item) + 1
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
146 except StopIteration:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
147 if buffer_:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
148 break
36771
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
149 if overflow:
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
150 yield overflow
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
151 return
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
152 if total_len > fill_len:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
153 overflow = buffer_.pop()
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
154 total_len -= len(overflow) - 1
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
155 ret = ' '.join(buffer_)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
156 assert len(ret) <= fill_len
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
157 yield ret
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
158
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
159 FILL = 80
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
160
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
161 def main(file_path):
36771
f8ffa7cbf960 Update for 'with' statement.
Brett Cannon <bcannon@gmail.com>
parents: 36752
diff changeset
162 with open(file_path, 'w') as FILE:
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
163 # Comment for file
45042
418ad159fe84 Update Vim syntax highlighting to specify what revision was used to generate
Brett Cannon <bcannon@gmail.com>
parents: 39864
diff changeset
164 print>>FILE, comment_header % subversion[1:]
36652
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
165 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
166 # Statements at start of file
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
167 print>>FILE, statement_header
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
168 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
169 # Generate case for python_highlight_all
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
170 print>>FILE, 'if exists("python_highlight_all")'
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
171 for statement_var, statement_parts in statements:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
172 if statement_var:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
173 print>>FILE, ' let %s = 1' % statement_var
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
174 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
175 print>>FILE, 'endif'
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
176 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
177 # Generate Python groups
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
178 for statement_var, statement_parts in statements:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
179 if statement_var:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
180 print>>FILE, 'if exists("%s")' % statement_var
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
181 indent = ' '
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
182 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
183 indent = ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
184 for colour_group, group, type_, arguments in statement_parts:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
185 if not isinstance(arguments, basestring):
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
186 prefix = syn_prefix(type_, group)
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
187 if type_ == 'keyword':
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
188 stmt_iter = fill_stmt(arguments,
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
189 FILL - len(prefix) - len(indent))
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
190 try:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
191 while True:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
192 print>>FILE, indent + prefix + stmt_iter.next()
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
193 except StopIteration:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
194 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
195 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
196 for argument in arguments:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
197 print>>FILE, indent + prefix + argument
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
198 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
199 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
200
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
201 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
202 print>>FILE, indent + syn_prefix(type_, group) + arguments
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
203 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
204 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
205 if statement_var:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
206 print>>FILE, 'endif'
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
207 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
208 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
209 # Associating Python group with Vim colour group
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
210 for statement_var, statement_parts in statements:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
211 if statement_var:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
212 print>>FILE, ' if exists("%s")' % statement_var
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
213 indent = ' '
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
214 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
215 indent = ' '
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
216 for colour_group, group, type_, arguments in statement_parts:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
217 print>>FILE, (indent + "hi def link %s %s" %
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
218 (group, colour_group))
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
219 else:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
220 if statement_var:
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
221 print>>FILE, ' endif'
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
222 print>>FILE, ''
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
223 # Statements at the end of the file
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
224 print>>FILE, statement_footer
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
225
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
226 if __name__ == '__main__':
8db985b4086e Add a script that auto-generates a Vim syntax highlighting file for Python.
Brett Cannon <bcannon@gmail.com>
parents:
diff changeset
227 main("python.vim")