--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QScintilla/MarkupProviders/MarkdownProvider.py Sun Jan 01 18:09:48 2017 +0100 @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the base class for the markup providers. +""" + +from __future__ import unicode_literals + +from .MarkupBase import MarkupBase + + +class MarkdownProvider(MarkupBase): + """ + Class implementing the base class for the markup providers. + + Note: Derived classes need only implement those method they provide + functionality for. This base class implements do nothing variants for + all methods. + """ + def __init__(self): + """ + Constructor + """ + super(MarkdownProvider, 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 hasStrikethrough(self): + """ + Public method to indicate the availability of strikethrough markup. + + @return flag indicating the availability of strikethrough 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 strikethrough(self, editor): + """ + Public method to generate strikethrough 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()