##// END OF EJS Templates
Fixed imports and removed references to ETS/EPD
epatters -
Show More
@@ -10,14 +10,11 b' from pygments.lexers import PythonLexer'
10 from PyQt4 import QtCore, QtGui
10 from PyQt4 import QtCore, QtGui
11 import zmq
11 import zmq
12
12
13 # ETS imports
14 from enthought.pyface.ui.qt4.code_editor.pygments_highlighter import \
15 PygmentsHighlighter
16
17 # Local imports
13 # Local imports
18 from call_tip_widget import CallTipWidget
14 from call_tip_widget import CallTipWidget
19 from completion_lexer import CompletionLexer
15 from completion_lexer import CompletionLexer
20 from console_widget import HistoryConsoleWidget
16 from console_widget import HistoryConsoleWidget
17 from pygments_highlighter import PygmentsHighlighter
21
18
22
19
23 class FrontendReplyThread(Thread, QtCore.QObject):
20 class FrontendReplyThread(Thread, QtCore.QObject):
@@ -1,16 +1,5 b''
1 #------------------------------------------------------------------------------
1 # System library imports.
2 # Copyright (c) 2010, Enthought Inc
3 # All rights reserved.
4 #
5 # This software is provided without warranty under the terms of the BSD license.
6
7 #
8 # Author: Enthought Inc
9 # Description: <Enthought pyface code editor>
10 #------------------------------------------------------------------------------
11
12 from PyQt4 import QtGui
2 from PyQt4 import QtGui
13
14 from pygments.lexer import RegexLexer, _TokenType, Text, Error
3 from pygments.lexer import RegexLexer, _TokenType, Text, Error
15 from pygments.lexers import CLexer, CppLexer, PythonLexer
4 from pygments.lexers import CLexer, CppLexer, PythonLexer
16 from pygments.styles.default import DefaultStyle
5 from pygments.styles.default import DefaultStyle
@@ -24,8 +13,8 b" def get_tokens_unprocessed(self, text, stack=('root',)):"
24 """
13 """
25 pos = 0
14 pos = 0
26 tokendefs = self._tokens
15 tokendefs = self._tokens
27 if hasattr(self, '_epd_state_stack'):
16 if hasattr(self, '_saved_state_stack'):
28 statestack = list(self._epd_state_stack)
17 statestack = list(self._saved_state_stack)
29 else:
18 else:
30 statestack = list(stack)
19 statestack = list(stack)
31 statetokens = tokendefs[statestack[-1]]
20 statetokens = tokendefs[statestack[-1]]
@@ -71,39 +60,12 b" def get_tokens_unprocessed(self, text, stack=('root',)):"
71 pos += 1
60 pos += 1
72 except IndexError:
61 except IndexError:
73 break
62 break
74 self._epd_state_stack = list(statestack)
63 self._saved_state_stack = list(statestack)
75
64
76 # Monkeypatch!
65 # Monkeypatch!
77 RegexLexer.get_tokens_unprocessed = get_tokens_unprocessed
66 RegexLexer.get_tokens_unprocessed = get_tokens_unprocessed
78
67
79
68
80 # Even with the above monkey patch to store state, multiline comments do not
81 # work since they are stateless (Pygments uses a single multiline regex for
82 # these comments, but Qt lexes by line). So we need to add a state for comments
83 # to the C and C++ lexers. This means that nested multiline comments will appear
84 # to be valid C/C++, but this is better than the alternative for now.
85
86 def replace_pattern(tokens, new_pattern):
87 """ Given a RegexLexer token dictionary 'tokens', replace all patterns that
88 match the token specified in 'new_pattern' with 'new_pattern'.
89 """
90 for state in tokens.values():
91 for index, pattern in enumerate(state):
92 if isinstance(pattern, tuple) and pattern[1] == new_pattern[1]:
93 state[index] = new_pattern
94
95 # More monkeypatching!
96 comment_start = (r'/\*', Comment.Multiline, 'comment')
97 comment_state = [ (r'[^*/]', Comment.Multiline),
98 (r'/\*', Comment.Multiline, '#push'),
99 (r'\*/', Comment.Multiline, '#pop'),
100 (r'[*/]', Comment.Multiline) ]
101 replace_pattern(CLexer.tokens, comment_start)
102 replace_pattern(CppLexer.tokens, comment_start)
103 CLexer.tokens['comment'] = comment_state
104 CppLexer.tokens['comment'] = comment_state
105
106
107 class BlockUserData(QtGui.QTextBlockUserData):
69 class BlockUserData(QtGui.QTextBlockUserData):
108 """ Storage for the user data associated with each line.
70 """ Storage for the user data associated with each line.
109 """
71 """
@@ -141,9 +103,9 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):'
141 prev_data = self.previous_block_data()
103 prev_data = self.previous_block_data()
142
104
143 if prev_data is not None:
105 if prev_data is not None:
144 self._lexer._epd_state_stack = prev_data.syntax_stack
106 self._lexer._saved_state_stack = prev_data.syntax_stack
145 elif hasattr(self._lexer, '_epd_state_stack'):
107 elif hasattr(self._lexer, '_saved_state_stack'):
146 del self._lexer._epd_state_stack
108 del self._lexer._saved_state_stack
147
109
148 index = 0
110 index = 0
149 # Lex the text using Pygments
111 # Lex the text using Pygments
@@ -154,11 +116,11 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):'
154 self.setFormat(index, l, format)
116 self.setFormat(index, l, format)
155 index += l
117 index += l
156
118
157 if hasattr(self._lexer, '_epd_state_stack'):
119 if hasattr(self._lexer, '_saved_state_stack'):
158 data = BlockUserData(syntax_stack=self._lexer._epd_state_stack)
120 data = BlockUserData(syntax_stack=self._lexer._saved_state_stack)
159 self.currentBlock().setUserData(data)
121 self.currentBlock().setUserData(data)
160 # Clean up for the next go-round.
122 # Clean up for the next go-round.
161 del self._lexer._epd_state_stack
123 del self._lexer._saved_state_stack
162
124
163 def previous_block_data(self):
125 def previous_block_data(self):
164 """ Convenience method for returning the previous block's user data.
126 """ Convenience method for returning the previous block's user data.
General Comments 0
You need to be logged in to leave comments. Login now