QScintilla/MarkupProviders/MarkdownProvider.py

Sun, 01 Jan 2017 18:09:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Jan 2017 18:09:48 +0100
changeset 5394
b2c6179184f6
child 5397
fee5485e67f4
permissions
-rw-r--r--

Started implementing a format button bar and provider classes for various markup languages.

# -*- 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