QScintilla/MarkupProviders/MarkdownProvider.py

changeset 5394
b2c6179184f6
child 5397
fee5485e67f4
--- /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()

eric ide

mercurial