--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QScintilla/MarkupProviders/RestructuredTextProvider.py Mon Jan 02 12:49:28 2017 +0100 @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the reStructured Text markup provider. +""" + +from __future__ import unicode_literals + +from .MarkupBase import MarkupBase + + +class RestructuredTextProvider(MarkupBase): + """ + Class implementing the reStructured Text markup provider. + """ + def __init__(self): + """ + Constructor + """ + super(RestructuredTextProvider, self).__init__() + + def hasBold(self): + """ + Public method to indicate the availability of bold markup. + + @return flag indicating the availability of bold markup + @rtype bool + """ + return True + + def hasItalic(self): + """ + Public method to indicate the availability of italic markup. + + @return flag indicating the availability of italic markup + @rtype bool + """ + return True + + def bold(self, editor): + """ + Public method to generate bold text. + + @param editor reference to the editor to work on + @type Editor + """ + self.__insertMarkup("**", editor) + + def italic(self, editor): + """ + Public method to generate italic text. + + @param editor reference to the editor to work on + @type Editor + """ + self.__insertMarkup("*", editor) + + def __insertMarkup(self, markup, editor): + """ + Private method to insert the specified markup. + + If the editor has selected text, this text is enclosed by the given + markup. If no text is selected, the markup is inserted at the cursor + position and the cursor is positioned in between. + + @param markup markup string to be inserted + @type str + @param editor reference to the editor to work on + @type Editor + """ + if editor is None: + return + + editor.beginUndoAction() + if editor.hasSelectedText(): + newText = "{0}{1}{0}".format(markup, editor.selectedText()) + editor.replaceSelectedText(newText) + else: + editor.insert(2 * markup) + cline, cindex = editor.getCursorPosition() + editor.setCursorPosition(cline, cindex + len(markup)) + editor.endUndoAction()