def _indentSelection(self, selection):
        startMarker = selection.getStartMarker()
        endMarker = selection.getEndMarker()

        # Get the statements that contain the start and end markers
        startContext = getStatementContextFromElement(startMarker.getElement())
        endContext = getStatementContextFromElement(endMarker.getElement())
        # Get the statement elements
        startStmtElement = startContext.getFragmentContentElement()
        endStmtElement = endContext.getFragmentContentElement()

        # Get paths to start and end nodes, from the common root statement
        path0, path1 = getStatementContextPathsFromCommonRoot(
            startContext, endContext)
        root = path0[0]

        # Get the content element, not the fragment itself, otherwise editing operations that involve the module (top level) will trigger events that will NOT be caught
        rootElement = root.getFragmentContentElement()

        event = IndentPythonSelectionTreeEvent(self, rootElement)
        visitor = event.getRichStringVisitor()
        visitor.ignoreElementFixedValuesOnPath(
            startContext.getFragmentContentElement(), rootElement)
        visitor.ignoreElementFixedValuesOnPath(
            endContext.getFragmentContentElement(), rootElement)
        visitor.setElementPrefix(startStmtElement, Schema.Indent())
        visitor.setElementSuffix(endStmtElement, Schema.Dedent())

        bSuccess = root.getFragmentContentElement().postTreeEvent(event)
        if not bSuccess:
            print 'PythonSyntaxRecognizingController._indentSelection(): INDENT SELECTION FAILED'
 def _indentLine(self, element, fragment, node):
     event = PythonIndentTreeEvent()
     visitor = event.getRichStringVisitor()
     visitor.setElementPrefix(element, Schema.Indent())
     visitor.setElementSuffix(element, Schema.Dedent())
     bSuccess = element.postTreeEventToParent(event)
     if not bSuccess:
         print 'PythonSyntaxRecognizingController._indentLine(): INDENT LINE FAILED'
 def _dedentLine(self, element, fragment, node):
     suite = node.getParent()
     suiteParent = suite.getParent()
     if not isTopLevel(suiteParent):
         # This statement is not within a top-level node
         event = PythonDedentTreeEvent()
         visitor = event.getRichStringVisitor()
         visitor.setElementPrefix(element, Schema.Dedent())
         visitor.setElementSuffix(element, Schema.Indent())
         bSuccess = element.postTreeEventToParent(event)
         if not bSuccess:
             print 'PythonSyntaxRecognizingController._dedentLine(): DEDENT LINE FAILED'
     else:
         print 'PythonSyntaxRecognizingController._dedentLine(): Attempted to dedent line in top-level module'