--- a/QScintilla/MarkupProviders/HtmlProvider.py Sat Jan 07 19:00:58 2017 +0100 +++ b/QScintilla/MarkupProviders/HtmlProvider.py Sat Jan 07 19:35:40 2017 +0100 @@ -9,6 +9,8 @@ from __future__ import unicode_literals +from PyQt5.QtWidgets import QDialog + from .MarkupBase import MarkupBase @@ -124,6 +126,38 @@ """ self.__insertMarkup("code", editor) + def hasCodeBlock(self): + """ + Public method to indicate the availability of code block markup. + + @return flag indicating the availability of code block markup + @rtype bool + """ + return True + + def codeBlock(self, editor): + """ + Public method to generate code block text. + + @param editor reference to the editor to work on + @type Editor + """ + if editor is None: + return + + lineSeparator = editor.getLineSeparator() + editor.beginUndoAction() + if editor.hasSelectedText(): + newText = "<pre><code>{0}{1}</code></pre>{0}".format( + lineSeparator, editor.selectedText()) + editor.replaceSelectedText(newText) + else: + editor.insert("<pre><code>{0}{0}</code></pre>{0}".format( + lineSeparator)) + cline, cindex = editor.getCursorPosition() + editor.setCursorPosition(cline + 1, 0) + editor.endUndoAction() + def __insertMarkup(self, markup, editor): """ Private method to insert the specified markup. @@ -149,3 +183,64 @@ cline, cindex = editor.getCursorPosition() editor.setCursorPosition(cline, cindex + len(markup) + 2) editor.endUndoAction() + + def hasHyperlink(self): + """ + Public method to indicate the availability of hyperlink markup. + + @return flag indicating the availability of hyperlink markup + @rtype bool + """ + return True + + def hyperlink(self, editor): + """ + Public method to generate hyperlink text. + + @param editor reference to the editor to work on + @type Editor + """ + from .HyperlinkMarkupDialog import HyperlinkMarkupDialog + dlg = HyperlinkMarkupDialog(True, False) + if dlg.exec_() == QDialog.Accepted: + text, target, title = dlg.getData() + if not text: + text = target + + if title: + link = '<a href="{0}" title="{2}">{1}</a>'.format( + target, text, title) + else: + link = '<a href="{0}">{1}</a>'.format(target, text) + + editor.beginUndoAction() + cline, cindex = editor.getCursorPosition() + editor.insert(link) + editor.setCursorPosition(cline, cindex + len(link)) + editor.endUndoAction() + + def hasLine(self): + """ + Public method to indicate the availability of a horizontal line markup. + + @return flag indicating the availability of a horizontal line markup + @rtype bool + """ + return True + + def line(self, editor): + """ + Public method to generate a horizontal line text. + + @param editor reference to the editor to work on + @type Editor + """ + if editor is None: + return + + editor.beginUndoAction() + markup = "<hr />" + editor.insert(markup) + cline, cindex = editor.getCursorPosition() + editor.setCursorPosition(cline, cindex + len(markup)) + editor.endUndoAction()