本文整理汇总了Python中pyqode.core.api.TextBlockHelper类的典型用法代码示例。如果您正苦于以下问题:Python TextBlockHelper类的具体用法?Python TextBlockHelper怎么用?Python TextBlockHelper使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TextBlockHelper类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: collapse_all
def collapse_all(self):
"""
Collapses all triggers and makes all blocks with fold level > 0
invisible.
"""
self._clear_block_deco()
block = self.editor.document().firstBlock()
last = self.editor.document().lastBlock()
while block.isValid():
lvl = TextBlockHelper.get_fold_lvl(block)
trigger = TextBlockHelper.is_fold_trigger(block)
if trigger:
if lvl == 0:
self._show_previous_blank_lines(block)
TextBlockHelper.set_fold_trigger_state(block, True)
block.setVisible(lvl == 0)
if block == last and block.text().strip() == '':
block.setVisible(True)
self._show_previous_blank_lines(block)
block = block.next()
self._refresh_editor_and_scrollbars()
tc = self.editor.textCursor()
tc.movePosition(tc.Start)
self.editor.setTextCursor(tc)
self.collapse_all_triggered.emit()
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:25,代码来源:folding.py
示例2: _on_key_pressed
def _on_key_pressed(self, event):
"""
Override key press to select the current scope if the user wants
to deleted a folded scope (without selecting it).
"""
delete_request = event.key() in [QtCore.Qt.Key_Backspace,
QtCore.Qt.Key_Delete]
if event.text() or delete_request:
cursor = self.editor.textCursor()
if cursor.hasSelection():
# change selection to encompass the whole scope.
positions_to_check = cursor.selectionStart(), cursor.selectionEnd()
else:
positions_to_check = (cursor.position(), )
for pos in positions_to_check:
block = self.editor.document().findBlock(pos)
th = TextBlockHelper()
if th.is_fold_trigger(block) and th.is_collapsed(block):
self.toggle_fold_trigger(block)
if delete_request and cursor.hasSelection():
scope = FoldScope(self.find_parent_scope(block))
tc = TextHelper(self.editor).select_lines(*scope.get_range())
if tc.selectionStart() > cursor.selectionStart():
start = cursor.selectionStart()
else:
start = tc.selectionStart()
if tc.selectionEnd() < cursor.selectionEnd():
end = cursor.selectionEnd()
else:
end = tc.selectionEnd()
tc.setPosition(start)
tc.setPosition(end, tc.KeepAnchor)
self.editor.setTextCursor(tc)
开发者ID:must40,项目名称:pyqode.core,代码行数:33,代码来源:folding.py
示例3: _handle_docstrings
def _handle_docstrings(self, block, lvl, prev_block):
if block.docstring:
is_start = block.text().strip().startswith('"""')
if is_start:
TextBlockHelper.get_fold_lvl(prev_block) + 1
else:
pblock = block.previous()
while pblock.isValid() and pblock.text().strip() == '':
pblock = pblock.previous()
is_start = pblock.text().strip().startswith('"""')
if is_start:
return TextBlockHelper.get_fold_lvl(pblock) + 1
else:
return TextBlockHelper.get_fold_lvl(pblock)
# fix end of docstring
elif prev_block and prev_block.text().strip().endswith('"""'):
single_line = self._single_line_docstring.match(
prev_block.text().strip())
if single_line:
TextBlockHelper.set_fold_lvl(prev_block, lvl)
else:
TextBlockHelper.set_fold_lvl(
prev_block, TextBlockHelper.get_fold_lvl(
prev_block.previous()))
return lvl
开发者ID:AlexLee,项目名称:cadquery-freecad-module,代码行数:25,代码来源:folding.py
示例4: detect_fold_level
def detect_fold_level(self, prev_block, block):
if prev_block:
prev_text = prev_block.text().strip()
else:
prev_text = ''
if '[]' not in prev_text and '{}' not in prev_text:
if prev_text.endswith(('{', '[')):
return TextBlockHelper.get_fold_lvl(prev_block) + 1
if prev_text.replace(',', '').endswith(('}', ']')):
return TextBlockHelper.get_fold_lvl(prev_block) - 1
return TextBlockHelper.get_fold_lvl(prev_block)
开发者ID:SirmoGames,项目名称:hackedit,代码行数:11,代码来源:folding.py
示例5: test_dynamic_folding_insert_section
def test_dynamic_folding_insert_section():
# test insert section under empty data division
# data division (which is not a fold trigger initially) block will become a fold trigger
editor = CobolCodeEdit()
editor.setPlainText(section_code, '', '')
th = TextHelper(editor)
block = editor.document().findBlockByNumber(2)
assert TextBlockHelper.is_fold_trigger(block) is False
cursor = th.goto_line(2, column=len(' DATA DIVISION.'))
cursor.insertText('\n WORKING-STORAGE SECTION.')
assert TextBlockHelper.is_fold_trigger(block) is True
开发者ID:SirmoGames,项目名称:pyqode.cobol,代码行数:11,代码来源:test_folding.py
示例6: expand_all
def expand_all(self):
"""
Expands all fold triggers.
"""
block = self.editor.document().firstBlock()
while block.isValid():
TextBlockHelper.set_fold_trigger_state(block, False)
block.setVisible(True)
block = block.next()
self._clear_block_deco()
self._refresh_editor_and_scrollbars()
self.expand_all_triggered.emit()
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:12,代码来源:folding.py
示例7: test_expand_all
def test_expand_all(editor):
panel = get_panel(editor)
QTest.qWait(1000)
panel.collapse_all()
QTest.qWait(1000)
panel.expand_all()
block = editor.document().firstBlock()
while block.blockNumber() < editor.document().blockCount() - 1:
assert block.isVisible()
if TextBlockHelper.is_fold_trigger(block):
assert TextBlockHelper.is_collapsed(block) is False
block = block.next()
开发者ID:must40,项目名称:pyqode.core,代码行数:12,代码来源:test_folding.py
示例8: convert
def convert(name, editor, to_collapse):
ti = QtWidgets.QTreeWidgetItem()
ti.setText(0, name.name)
if isinstance(name.icon, list):
icon = QtGui.QIcon.fromTheme(
name.icon[0], QtGui.QIcon(name.icon[1]))
else:
icon = QtGui.QIcon(name.icon)
ti.setIcon(0, icon)
name.block = editor.document().findBlockByNumber(name.line)
ti.setData(0, QtCore.Qt.UserRole, name)
ti.setToolTip(0, name.description)
block_data = name.block.userData()
if block_data is None:
block_data = TextBlockUserData()
name.block.setUserData(block_data)
block_data.tree_item = ti
if to_collapse is not None and \
TextBlockHelper.is_collapsed(name.block):
to_collapse.append(ti)
for ch in name.children:
ti_ch, to_collapse = convert(ch, editor, to_collapse)
if ti_ch:
ti.addChild(ti_ch)
return ti, to_collapse
开发者ID:abdullahtahiriyo,项目名称:cadquery-freecad-module,代码行数:27,代码来源:outline.py
示例9: test_collapse_all
def test_collapse_all(editor):
panel = get_panel(editor)
QTest.qWait(1000)
panel.collapse_all()
QTest.qWait(1000)
block = editor.document().firstBlock()
while block.blockNumber() < editor.document().blockCount() - 1:
blank_line = len(block.text().strip()) == 0
if TextBlockHelper.get_fold_lvl(block) > 0:
if not blank_line:
assert block.isVisible() is False
else:
assert block.isVisible() is True
if TextBlockHelper.is_fold_trigger(block):
assert TextBlockHelper.is_collapsed(block) is True
block = block.next()
开发者ID:must40,项目名称:pyqode.core,代码行数:16,代码来源:test_folding.py
示例10: find_parent_scope
def find_parent_scope(block):
"""
Find parent scope, if the block is not a fold trigger.
"""
original = block
if not TextBlockHelper.is_fold_trigger(block):
# search level of next non blank line
while block.text().strip() == '' and block.isValid():
block = block.next()
ref_lvl = TextBlockHelper.get_fold_lvl(block) - 1
block = original
while (block.blockNumber() and
(not TextBlockHelper.is_fold_trigger(block) or
TextBlockHelper.get_fold_lvl(block) > ref_lvl)):
block = block.previous()
return block
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:17,代码来源:folding.py
示例11: test_fold_limit
def test_fold_limit(editor):
editor.syntax_highlighter.fold_detector.limit = 1
editor.file.open('test/test_api/folding_cases/foo.py')
block = editor.document().firstBlock()
while block.blockNumber() < editor.blockCount() - 1:
assert TextBlockHelper.get_fold_lvl(block) <= 1
block = block.next()
editor.syntax_highlighter.fold_detector.limit = sys.maxsize
开发者ID:SirmoGames,项目名称:pyqode.core,代码行数:8,代码来源:test_folding.py
示例12: _on_item_state_changed
def _on_item_state_changed(self, item):
if self._updating:
return
block = item.data(0, QtCore.Qt.UserRole).block
assert isinstance(item, QtWidgets.QTreeWidgetItem)
item_state = not item.isExpanded()
block_state = TextBlockHelper.get_fold_trigger_state(block)
if item_state != block_state:
self._updating = True
self._folding_panel.toggle_fold_trigger(block)
self._updating = False
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:11,代码来源:outline.py
示例13: paintEvent
def paintEvent(self, event):
# Paints the fold indicators and the possible fold region background
# on the folding panel.
super(FoldingPanel, self).paintEvent(event)
painter = QtGui.QPainter(self)
# Draw background over the selected non collapsed fold region
if self._mouse_over_line is not None:
block = self.editor.document().findBlockByNumber(
self._mouse_over_line)
try:
self._draw_fold_region_background(block, painter)
except ValueError:
pass
# Draw fold triggers
for top_position, line_number, block in self.editor.visible_blocks:
if TextBlockHelper.is_fold_trigger(block):
collapsed = TextBlockHelper.get_fold_trigger_state(block)
mouse_over = self._mouse_over_line == line_number
self._draw_fold_indicator(
top_position, mouse_over, collapsed, painter)
if collapsed:
# check if the block already has a decoration, it might
# have been folded by the parent editor/document in the
# case of cloned editor
for deco in self._block_decos:
if deco.block == block:
# no need to add a deco, just go to the next block
break
else:
self._add_fold_decoration(block, FoldScope(block))
else:
for deco in self._block_decos:
# check if the block decoration has been removed, it
# might have been unfolded by the parent
# editor/document in the case of cloned editor
if deco.block == block:
# remove it and
self._block_decos.remove(deco)
self.editor.decorations.remove(deco)
del deco
break
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:41,代码来源:folding.py
示例14: get_parent_scopes
def get_parent_scopes(block):
"""
Gets the list of hierarchical parent scopes of the current block.
:param block: current block
:return: list of QTextBlock
"""
scopes = [block]
scope = FoldScope.find_parent_scope(block)
while scope is not None:
ref = TextBlockHelper.get_fold_lvl(scopes[-1])
if TextBlockHelper.get_fold_lvl(scope) < ref:
# ignore sibling scopes
scopes.append(scope)
if scope.blockNumber() == 0:
# stop
scope = None
else:
# next parent
scope = FoldScope.find_parent_scope(scope.previous())
return reversed(scopes)
开发者ID:SirmoGames,项目名称:hackedit,代码行数:21,代码来源:navigation.py
示例15: detect_fold_level
def detect_fold_level(self, prev_block, block):
ctext, ptext = self.stripped_texts(block, prev_block)
if not self.editor.free_format:
ctext = self.normalize_text(ctext)
ptext = self.normalize_text(ptext)
if regex.DIVISION.indexIn(ctext) != -1 and not ctext.lstrip().startswith('*'):
return OFFSET_DIVISION
elif regex.SECTION.indexIn(ctext) != -1 and not ctext.lstrip().startswith('*'):
return OFFSET_SECTION
else:
# anywhere else, folding is mostly based on the indentation level
indent = self.get_indent(ctext)
pindent = self.get_indent(ptext)
if ctext.strip().upper().startswith('END-') and self.is_valid(prev_block) and pindent > indent:
# find previous block with the same indent, use it's fold level + 1 to include
# the end-branch statement in the fold scope
pblock = prev_block
while self.is_valid(pblock) and (pindent != indent or len(ptext.strip()) == 0):
pblock = pblock.previous()
ptext = self.normalize_text(pblock.text())
pindent = self.get_indent(ptext)
lvl = TextBlockHelper.get_fold_lvl(pblock.next())
else:
lvl = OFFSET_OTHER + indent
# if not self.editor.free_format and (ctext.lstrip().startswith('-') or ctext.lstrip().startswith('*')):
if not self.editor.free_format and (ctext.lstrip().startswith('-')):
# use previous fold level
lvl = TextBlockHelper.get_fold_lvl(prev_block)
if not self.editor.free_format and ctext.strip().startswith('*'):
if regex.DIVISION.indexIn(ptext) != -1 and not ptext.lstrip().startswith('*'):
lvl = OFFSET_SECTION
elif regex.SECTION.indexIn(ptext) != -1 and not ptext.lstrip().startswith('*'):
return OFFSET_SECTION + 2
else:
lvl = TextBlockHelper.get_fold_lvl(prev_block)
return lvl
开发者ID:OpenCobolIDE,项目名称:OpenCobolIDE,代码行数:40,代码来源:folding.py
示例16: _highlight_surrounding_scopes
def _highlight_surrounding_scopes(self, block):
"""
Highlights the scopes surrounding the current fold scope.
:param block: Block that starts the current fold scope.
"""
scope = FoldScope(block)
if (self._current_scope is None or
self._current_scope.get_range() != scope.get_range()):
self._current_scope = scope
self._clear_scope_decos()
# highlight surrounding parent scopes with a darker color
start, end = scope.get_range()
if not TextBlockHelper.get_fold_trigger_state(block):
self._add_scope_decorations(block, start, end)
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:15,代码来源:folding.py
示例17: _on_item_state_changed
def _on_item_state_changed(self, item):
if self._updating:
return
if item == self._root_item:
item_state = not item.isExpanded()
if item_state:
QtCore.QTimer.singleShot(
1, self._editor.folding_panel.collapse_all)
else:
QtCore.QTimer.singleShot(
1, self._editor.folding_panel.expand_all)
else:
block = item.data(0, QtCore.Qt.UserRole).block
assert isinstance(item, QtWidgets.QTreeWidgetItem)
item_state = not item.isExpanded()
block_state = TextBlockHelper.get_fold_trigger_state(block)
if item_state != block_state:
self._editor.folding_panel.toggle_fold_trigger(block)
开发者ID:dtonal,项目名称:pyqode.cobol,代码行数:18,代码来源:outline.py
示例18: toggle_fold_trigger
def toggle_fold_trigger(self, block):
"""
Toggle a fold trigger block (expand or collapse it).
:param block: The QTextBlock to expand/collapse
"""
if not TextBlockHelper.is_fold_trigger(block):
return
region = FoldScope(block)
if region.collapsed:
region.unfold()
if self._mouse_over_line is not None:
self._add_scope_decorations(
region._trigger, *region.get_range())
else:
region.fold()
self._clear_scope_decos()
self._refresh_editor_and_scrollbars()
self.trigger_state_changed.emit(region._trigger, region.collapsed)
开发者ID:sopak,项目名称:cadquery-freecad-module,代码行数:19,代码来源:folding.py
示例19: open
def open(self, path, encoding=None, use_cached_encoding=True):
encoding = self.detect_encoding(path)
super(PyFileManager, self).open(
path, encoding=encoding, use_cached_encoding=use_cached_encoding)
try:
folding_panel = self.editor.panels.get('FoldingPanel')
except KeyError:
pass
else:
# fold imports and/or docstrings
blocks_to_fold = []
sh = self.editor.syntax_highlighter
if self.fold_imports and sh.import_statements:
blocks_to_fold += sh.import_statements
if self.fold_docstrings and sh.docstrings:
blocks_to_fold += sh.docstrings
for block in blocks_to_fold:
if TextBlockHelper.is_fold_trigger(block):
folding_panel.toggle_fold_trigger(block)
开发者ID:SirmoGames,项目名称:hackedit,代码行数:21,代码来源:file.py
示例20: convert
def convert(name, editor, to_collapse):
ti = QtWidgets.QTreeWidgetItem()
ti.setText(0, name.name)
ti.setIcon(0, QtGui.QIcon(name.icon))
name.block = editor.document().findBlockByNumber(name.line)
ti.setData(0, QtCore.Qt.UserRole, name)
block_data = name.block.userData()
if block_data is None:
block_data = TextBlockUserData()
name.block.setUserData(block_data)
block_data.tree_item = ti
if to_collapse is not None and \
TextBlockHelper.get_fold_trigger_state(name.block):
to_collapse.append(ti)
for ch in name.children:
ti_ch, to_collapse = convert(ch, editor, to_collapse)
if ti_ch:
ti.addChild(ti_ch)
return ti, to_collapse
开发者ID:AlexLee,项目名称:cadquery-freecad-module,代码行数:21,代码来源:document_analyser.py
注:本文中的pyqode.core.api.TextBlockHelper类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论