diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py
index 8fe626a..be771d0 100644
--- a/manuskript/mainWindow.py
+++ b/manuskript/mainWindow.py
@@ -28,6 +28,7 @@ from manuskript.ui.mainWindow import Ui_MainWindow
from manuskript.ui.tools.frequencyAnalyzer import frequencyAnalyzer
from manuskript.ui.views.outlineDelegates import outlineCharacterDelegate
from manuskript.ui.views.plotDelegate import plotDelegate
+from manuskript.ui.views.MDEditView import MDEditView
# Spellcheck support
from manuskript.ui.views.textEditView import textEditView
@@ -57,6 +58,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# Var
self.currentProject = None
self._lastFocus = None
+ self._lastMDEditView = None
self._defaultCursorFlashTime = 1000 # Overriden at startup with system
# value. In manuskript.main.
@@ -113,19 +115,43 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.actSaveAs.triggered.connect(self.welcome.saveAsFile)
self.actImport.triggered.connect(self.doImport)
self.actCompile.triggered.connect(self.doCompile)
- self.actLabels.triggered.connect(self.settingsLabel)
- self.actStatus.triggered.connect(self.settingsStatus)
- self.actSettings.triggered.connect(self.settingsWindow)
self.actCloseProject.triggered.connect(self.closeProject)
self.actQuit.triggered.connect(self.close)
- # Main menu:: Documents
+ # Main menu:: Edit
self.actCopy.triggered.connect(self.documentsCopy)
self.actCut.triggered.connect(self.documentsCut)
self.actPaste.triggered.connect(self.documentsPaste)
self.actRename.triggered.connect(self.documentsRename)
self.actDuplicate.triggered.connect(self.documentsDuplicate)
self.actDelete.triggered.connect(self.documentsDelete)
+ self.actLabels.triggered.connect(self.settingsLabel)
+ self.actStatus.triggered.connect(self.settingsStatus)
+ self.actSettings.triggered.connect(self.settingsWindow)
+
+ # Main menu:: Edit:: Format
+ self.actHeaderSetextL1.triggered.connect(self.formatSetext1)
+ self.actHeaderSetextL2.triggered.connect(self.formatSetext2)
+ self.actHeaderAtxL1.triggered.connect(self.formatAtx1)
+ self.actHeaderAtxL2.triggered.connect(self.formatAtx2)
+ self.actHeaderAtxL3.triggered.connect(self.formatAtx3)
+ self.actHeaderAtxL4.triggered.connect(self.formatAtx4)
+ self.actHeaderAtxL5.triggered.connect(self.formatAtx5)
+ self.actHeaderAtxL6.triggered.connect(self.formatAtx6)
+ self.actFormatBold.triggered.connect(self.formatBold)
+ self.actFormatItalic.triggered.connect(self.formatItalic)
+ self.actFormatStrike.triggered.connect(self.formatStrike)
+ self.actFormatVerbatim.triggered.connect(self.formatVerbatim)
+ self.actFormatSuperscript.triggered.connect(self.formatSuperscript)
+ self.actFormatSubscript.triggered.connect(self.formatSubscript)
+ self.actFormatCommentLines.triggered.connect(self.formatCommentLines)
+ self.actFormatList.triggered.connect(self.formatList)
+ self.actFormatOrderedList.triggered.connect(self.formatOrderedList)
+ self.actFormatBlockquote.triggered.connect(self.formatBlockquote)
+ self.actFormatCommentBlock.triggered.connect(self.formatCommentBlock)
+ self.actFormatClear.triggered.connect(self.formatClear)
+
+ # Main menu:: Organize
self.actMoveUp.triggered.connect(self.documentsMoveUp)
self.actMoveDown.triggered.connect(self.documentsMoveDown)
self.actSplitDialog.triggered.connect(self.documentsSplitDialog)
@@ -225,6 +251,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
We get notified by qApp when focus changes, from old to new widget.
"""
+ # If new is a MDEditView, we keep it in memory
+ if issubclass(type(new), MDEditView):
+ self._lastMDEditView = new
+ else:
+ self._lastMDEditView = None
+
# Determine which view had focus last, to send the keyboard shortcuts
# to the right place
@@ -443,12 +475,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def openIndexes(self, indexes, newTab=True):
self.mainEditor.openIndexes(indexes, newTab=True)
- # Menu Documents #############################################################
+ # Menu #############################################################
- # Functions called by the menu Documents
+ # Functions called by the menus
# self._lastFocus is the last editor that had focus (either treeView or
# mainEditor). So we just pass along the signal.
+ # Edit
+
def documentsCopy(self):
"Copy selected item(s)."
if self._lastFocus: self._lastFocus.copy()
@@ -467,6 +501,38 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def documentsDelete(self):
"Delete selected item(s)."
if self._lastFocus: self._lastFocus.delete()
+
+ # Formats
+ def callLastMDEditView(self, functionName, param=[]):
+ """
+ If last focused widget was MDEditView, call the given function.
+ """
+ if self._lastMDEditView:
+ function = getattr(self._lastMDEditView, functionName)
+ function(*param)
+ def formatSetext1(self): self.callLastMDEditView("titleSetext", [1])
+ def formatSetext2(self): self.callLastMDEditView("titleSetext", [2])
+ def formatAtx1(self): self.callLastMDEditView("titleATX", [1])
+ def formatAtx2(self): self.callLastMDEditView("titleATX", [2])
+ def formatAtx3(self): self.callLastMDEditView("titleATX", [3])
+ def formatAtx4(self): self.callLastMDEditView("titleATX", [4])
+ def formatAtx5(self): self.callLastMDEditView("titleATX", [5])
+ def formatAtx6(self): self.callLastMDEditView("titleATX", [6])
+ def formatBold(self): self.callLastMDEditView("bold")
+ def formatItalic(self): self.callLastMDEditView("italic")
+ def formatStrike(self): self.callLastMDEditView("strike")
+ def formatVerbatim(self): self.callLastMDEditView("verbatim")
+ def formatSuperscript(self): self.callLastMDEditView("superscript")
+ def formatSubscript(self): self.callLastMDEditView("subscript")
+ def formatCommentLines(self): self.callLastMDEditView("commentLine")
+ def formatList(self): self.callLastMDEditView("unorderedList")
+ def formatOrderedList(self): self.callLastMDEditView("orderedList")
+ def formatBlockquote(self): self.callLastMDEditView("blockquote")
+ def formatCommentBlock(self): self.callLastMDEditView("comment")
+ def formatClear(self): self.callLastMDEditView("clearFormat")
+
+ # Organize
+
def documentsMoveUp(self):
"Move up selected item(s)."
if self._lastFocus: self._lastFocus.moveUp()
diff --git a/manuskript/ui/mainWindow.py b/manuskript/ui/mainWindow.py
index 30df4f4..b751490 100644
--- a/manuskript/ui/mainWindow.py
+++ b/manuskript/ui/mainWindow.py
@@ -1262,8 +1262,8 @@ class Ui_MainWindow(object):
self.actFormatClear.setObjectName("actFormatClear")
self.actFormatCommentLines = QtWidgets.QAction(MainWindow)
self.actFormatCommentLines.setObjectName("actFormatCommentLines")
- self.actFormatUnorderedList = QtWidgets.QAction(MainWindow)
- self.actFormatUnorderedList.setObjectName("actFormatUnorderedList")
+ self.actFormatOrderedList = QtWidgets.QAction(MainWindow)
+ self.actFormatOrderedList.setObjectName("actFormatOrderedList")
self.actFormatList = QtWidgets.QAction(MainWindow)
icon = QtGui.QIcon.fromTheme("view-list")
self.actFormatList.setIcon(icon)
@@ -1304,7 +1304,7 @@ class Ui_MainWindow(object):
self.mnuFormat.addAction(self.actFormatCommentLines)
self.mnuFormat.addSeparator()
self.mnuFormat.addAction(self.actFormatList)
- self.mnuFormat.addAction(self.actFormatUnorderedList)
+ self.mnuFormat.addAction(self.actFormatOrderedList)
self.mnuFormat.addAction(self.actFormatBlockquote)
self.mnuFormat.addAction(self.actFormatCommentBlock)
self.mnuFormat.addSeparator()
@@ -1539,8 +1539,8 @@ class Ui_MainWindow(object):
self.actFormatClear.setText(_translate("MainWindow", "Clear &formats"))
self.actFormatClear.setShortcut(_translate("MainWindow", "Ctrl+0"))
self.actFormatCommentLines.setText(_translate("MainWindow", "&Comment line(s)"))
- self.actFormatCommentLines.setShortcut(_translate("MainWindow", "Ctrl+C"))
- self.actFormatUnorderedList.setText(_translate("MainWindow", "&Ordered list"))
+ self.actFormatCommentLines.setShortcut(_translate("MainWindow", "Ctrl+D"))
+ self.actFormatOrderedList.setText(_translate("MainWindow", "&Ordered list"))
self.actFormatList.setText(_translate("MainWindow", "&Unordered list"))
self.actFormatBlockquote.setText(_translate("MainWindow", "B&lockquote"))
diff --git a/manuskript/ui/mainWindow.ui b/manuskript/ui/mainWindow.ui
index 0d13a74..b7bd72d 100644
--- a/manuskript/ui/mainWindow.ui
+++ b/manuskript/ui/mainWindow.ui
@@ -2170,7 +2170,7 @@
-
+
@@ -2802,10 +2802,10 @@
&Comment line(s)
- Ctrl+C
+ Ctrl+D
-
+
&Ordered list
diff --git a/manuskript/ui/views/MDEditView.py b/manuskript/ui/views/MDEditView.py
index 5b020cf..40912e2 100644
--- a/manuskript/ui/views/MDEditView.py
+++ b/manuskript/ui/views/MDEditView.py
@@ -10,6 +10,7 @@ from PyQt5.QtGui import QTextCursor
from manuskript.ui.views.textEditView import textEditView
from manuskript.ui.highlighters import MarkdownHighlighter
from manuskript import settings
+from manuskript.ui.highlighters.markdownEnums import MarkdownState as MS
# from manuskript.ui.editors.textFormat import textFormat
# from manuskript.ui.editors.MDFunctions import MDFormatSelection
@@ -79,23 +80,18 @@ class MDEditView(textEditView):
self.verticalScrollBar().blockSignals(False)
###########################################################################
- # FORMATTING (#FIXME)
+ # FORMATTING
###########################################################################
- def applyFormat(self, _format):
-
- if self._textFormat == "md":
- if _format == "Bold": self.bold()
- elif _format == "Italic": self.italic()
- elif _format == "Code": self.verbatim()
- elif _format == "Clear": self.clearFormat()
-
def bold(self): self.insertFormattingMarkup("**")
def italic(self): self.insertFormattingMarkup("*")
def strike(self): self.insertFormattingMarkup("~~")
def verbatim(self): self.insertFormattingMarkup("`")
def superscript(self): self.insertFormattingMarkup("^")
def subscript(self): self.insertFormattingMarkup("~")
+ def blockquote(self): self.lineFormattingMarkup("> ")
+ def orderedList(self): self.lineFormattingMarkup(" 1. ")
+ def unorderedList(self): self.lineFormattingMarkup(" - ")
def selectWord(self, cursor):
if cursor.selectedText():
@@ -161,6 +157,14 @@ class MDEditView(textEditView):
self.selectBlock(cursor)
cursor.insertText(text2)
+ def lineFormattingMarkup(self, markup):
+ """
+ Adds (or remove if present) `markup` at the begining of block.
+ """
+ cursor = self.textCursor()
+ cursor.movePosition(cursor.StartOfBlock)
+ cursor.insertText(markup)
+
def insertFormattingMarkup(self, markup):
cursor = self.textCursor()
@@ -211,8 +215,7 @@ class MDEditView(textEditView):
("~~(.*?)~~", "\\1", None), # strike
("\^(.*?)\^", "\\1", None), # superscript
("~(.*?)~", "\\1", None), # subscript
- ("", "\\1", re.S), # comments
-
+ ("", "\\1", re.S), # comments
# LINES OR BLOCKS
(r"^#*\s*(.+?)\s*", "\\1", re.M), # ATX