コード例 #1
0
 def __init__(self, start=-1, end=-1):
     self.start = start
     self.end = end
     self.changes = ChangeRange()
     self.newly_inserted = True
コード例 #2
0
    def __init__(self, notebook, edit_only=False):
        # Chunk changed is emitted when the text or tokenization of a chunk
        # changes. Note that "changes" here specifically includes being
        # replaced by identical text, so if I have the two chunks
        #
        #  if
        #  if
        #
        # And I delete the from the first 'i' to the second f, the first
        # chunk is considered to change, even though it's text remains 'if'.
        # This is because text in a buffering that is shadowing us may
        # be tagged with fonts/styles.
        #
        self.sig_chunk_inserted = signals.Signal()
        self.sig_chunk_changed = signals.Signal()
        self.sig_chunk_deleted = signals.Signal()
        self.sig_chunk_status_changed = signals.Signal()
        self.sig_chunk_results_changed = signals.Signal()

        # text-* are emitted before we fix up our internal state, so what can be done
        # in them are limited. They are meant for keeping a UI in sync with the internal
        # state.
        self.sig_text_inserted = signals.Signal()
        self.sig_text_deleted = signals.Signal()

        self.sig_lines_inserted = signals.Signal()
        self.sig_lines_deleted = signals.Signal()

        # This is only for the convenience of the undo stack; otherwise we ignore cursor position
        self.sig_place_cursor = signals.Signal()

        self.notebook = notebook
        self.edit_only = edit_only

        self.__file = None
        self.sig_file = signals.Signal()

        self.__filename = None
        self.sig_filename_changed = signals.Signal()

        self.__code_modified = False
        self.sig_code_modified = signals.Signal()

        self.__state = NotebookFile.EXECUTE_SUCCESS
        self.sig_state = signals.Signal()

        self.global_scope = {}
        notebook.setup_globals(self.global_scope)
        exec _DEFINE_GLOBALS in self.global_scope

        self.__lines = [""]
        self.__chunks = [BlankChunk(0, 1)]

        # There's quite a bit of complexity knowing when a change to lines changes
        # adjacent chunks. We use a simple and slightly inefficient algorithm for this
        # and just scan everything that might have changed. But we don't want typing
        # within a line to cause an unlimited rescan, so we keep track if the only
        # changes we've made are inserting/deleting within a line without changing
        # that lines class
        self.__changes = ChangeRange()
        self.__scan_adjacent = False

        self.__changed_chunks = set()
        self.__deleted_chunks = set()
        self.__freeze_changes_count = 0
        self.__user_action_count = 0

        self.__undo_stack = UndoStack(self)
        self.__executor = None

        notebook._add_worksheet(self)