本文整理汇总了Python中pyqode.core.api.TextHelper.cursor_position方法的典型用法代码示例。如果您正苦于以下问题:Python TextHelper.cursor_position方法的具体用法?Python TextHelper.cursor_position怎么用?Python TextHelper.cursor_position使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyqode.core.api.TextHelper
的用法示例。
在下文中一共展示了TextHelper.cursor_position方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _auto_import
# 需要导入模块: from pyqode.core.api import TextHelper [as 别名]
# 或者: from pyqode.core.api.TextHelper import cursor_position [as 别名]
def _auto_import(self):
helper = TextHelper(self.editor)
name = helper.word_under_cursor(select_whole_word=True).selectedText()
if name:
import_stmt = 'import %s' % name
else:
import_stmt = ''
import_stmt, status = QtWidgets.QInputDialog.getText(
self.editor, _('Add import'), _('Import statement:'),
QtWidgets.QLineEdit.Normal, import_stmt)
if status:
sh = self.editor.syntax_highlighter
line_number = sh.import_statements[0].blockNumber()
for stmt in sh.import_statements:
if stmt.text() == import_stmt:
# same import already exists
return
l, c = helper.cursor_position()
cursor = helper.goto_line(line_number)
cursor.insertText(import_stmt + '\n')
helper.goto_line(l + 1, c)
示例2: PyAutoIndentMode
# 需要导入模块: from pyqode.core.api import TextHelper [as 别名]
# 或者: from pyqode.core.api.TextHelper import cursor_position [as 别名]
class PyAutoIndentMode(AutoIndentMode):
""" Automatically indents text, respecting the PEP8 conventions.
Customised :class:`pyqode.core.modes.AutoIndentMode` for python
that tries its best to follow the pep8 indentation guidelines.
"""
def __init__(self):
super(PyAutoIndentMode, self).__init__()
self._helper = None
def on_install(self, editor):
super(PyAutoIndentMode, self).on_install(editor)
self._helper = TextHelper(editor)
def _get_indent(self, cursor):
ln, column = self._helper.cursor_position()
fullline = self._get_full_line(cursor)
line = fullline[:column]
pre, post = AutoIndentMode._get_indent(self, cursor)
if self._at_block_start(cursor, line):
return pre, post
# return pressed in comments
c2 = QTextCursor(cursor)
if c2.atBlockEnd():
c2.movePosition(c2.Left)
if (self._helper.is_comment_or_string(
c2, formats=['comment', 'docstring']) or
fullline.endswith('"""')):
if line.strip().startswith("#") and column != len(fullline):
post += '# '
return pre, post
# between parens
elif self._between_paren(cursor, column):
return self._handle_indent_between_paren(
column, line, (pre, post), cursor)
else:
lastword = self._get_last_word(cursor)
lastwordu = self._get_last_word_unstripped(cursor)
in_string_def, char = self._is_in_string_def(fullline, column)
if in_string_def:
post, pre = self._handle_indent_inside_string(
char, cursor, fullline, post)
elif (fullline.rstrip().endswith(":") and
lastword.rstrip().endswith(':') and
self._at_block_end(cursor, fullline)):
post = self._handle_new_scope_indentation(
cursor, fullline)
elif line.endswith("\\"):
# if user typed \ and press enter -> indent is always
# one level higher
post += self.editor.tab_length * " "
elif (fullline.endswith((')', '}', ']')) and
lastword.endswith((')', '}', ']'))):
post = self._handle_indent_after_paren(cursor, post)
elif ("\\" not in fullline and "#" not in fullline and
not self._at_block_end(cursor, fullline)):
post, pre = self._handle_indent_in_statement(
fullline, lastwordu, post, pre)
elif ((self._at_block_end(cursor, fullline) and
fullline.strip().startswith('return ')) or
lastword == "pass"):
post = post[:-self.editor.tab_length]
return pre, post
@staticmethod
def _is_in_string_def(full_line, column):
count = 0
char = "'"
for i in range(len(full_line)):
if full_line[i] == "'" or full_line[i] == '"':
count += 1
if full_line[i] == '"' and i < column:
char = '"'
count_after_col = 0
for i in range(column, len(full_line)):
if full_line[i] == "'" or full_line[i] == '"':
count_after_col += 1
return count % 2 == 0 and count_after_col % 2 == 1, char
@staticmethod
def _is_paren_open(paren):
return (paren.character == "(" or paren.character == "["
or paren.character == '{')
@staticmethod
def _is_paren_closed(paren):
return (paren.character == ")" or paren.character == "]"
or paren.character == '}')
@staticmethod
def _get_full_line(tc):
tc2 = QTextCursor(tc)
tc2.select(QTextCursor.LineUnderCursor)
full_line = tc2.selectedText()
return full_line
def _parens_count_for_block(self, col, block):
open_p = []
closed_p = []
#.........这里部分代码省略.........
示例3: PyAutoIndentMode
# 需要导入模块: from pyqode.core.api import TextHelper [as 别名]
# 或者: from pyqode.core.api.TextHelper import cursor_position [as 别名]
#.........这里部分代码省略.........
post = openingindent * " " + 4 * " "
# align elems in fct declaration (we align with first
# token)
else:
if len(tokens):
post = oC * " "
else:
post = openingindent * " " + 4 * " "
pre = ""
in_string_def, char = self.is_in_string_def(fullline, column)
if in_string_def:
pre = char
post += char
return pre, post
def at_block_start(self, tc, line):
"""
Improve QTextCursor.atBlockStart to ignore spaces
"""
if tc.atBlockStart():
return True
column = tc.columnNumber()
indentation = len(line) - len(line.lstrip())
return column <= indentation
def at_block_end(self, tc, fullline):
if tc.atBlockEnd():
return True
column = tc.columnNumber()
return column >= len(fullline.rstrip()) - 1
def _get_indent(self, cursor):
pos = cursor.position()
ln, column = self._helper.cursor_position()
fullline = self.get_full_line(cursor)
line = fullline[:column]
# no indent
if pos == 0 or column == 0:
return "", ""
pre, post = AutoIndentMode._get_indent(self, cursor)
if self.at_block_start(cursor, line):
if self.has_two_empty_line_before(cursor):
post = post[:-4]
return pre, post
# return pressed in comments
if self.is_in_comment(column, cursor, fullline):
if line.strip().startswith("#") and column != len(fullline):
post += '# '
return pre, post
elif self.between_paren(cursor, column):
try:
pre, post = self.handle_indent_after_paren(
column, line, fullline, cursor)
except TypeError:
return pre, post
else:
lastword = self.get_last_word(cursor)
inStringDef, char = self.is_in_string_def(fullline, column)
if inStringDef:
# the string might be between paren if multiline
# check if there a at least a non closed paren on the previous
# lines
if self.has_unclosed_paren(cursor):
pre = char
else:
pre = '" \\'