From a27e5db6f51989bbd16029fcdd59bce44296052b Mon Sep 17 00:00:00 2001 From: Olivier Keshavjee Date: Fri, 11 Mar 2016 15:45:51 +0100 Subject: [PATCH] Needs to do the Markdown syntax highlighter now... --- manuskript/loadSave.py | 4 ++++ manuskript/load_save/version_1.py | 2 +- manuskript/mainWindow.py | 8 ++++---- manuskript/models/outlineModel.py | 14 ++++++++++---- manuskript/settings.py | 2 +- manuskript/settingsWindow.py | 7 ++----- manuskript/ui/editors/MMDHighlighter.py | 16 ++++++++++++++++ manuskript/ui/editors/textFormat.py | 3 ++- manuskript/ui/views/cmbOutlineTypeChoser.py | 12 +++++------- manuskript/ui/views/textEditView.py | 11 ++++++++++- manuskript/ui/welcome.py | 13 ++++++++----- 11 files changed, 63 insertions(+), 29 deletions(-) create mode 100644 manuskript/ui/editors/MMDHighlighter.py diff --git a/manuskript/loadSave.py b/manuskript/loadSave.py index 69f2b22..a7b336b 100644 --- a/manuskript/loadSave.py +++ b/manuskript/loadSave.py @@ -23,6 +23,10 @@ def saveProject(version=None): # FIXME: add settings to chose between saving as zip or not. +def clearSaveCache(): + v1.cache = {} + + def loadProject(project): # Detect version diff --git a/manuskript/load_save/version_1.py b/manuskript/load_save/version_1.py index 09473c7..b1281c7 100644 --- a/manuskript/load_save/version_1.py +++ b/manuskript/load_save/version_1.py @@ -530,7 +530,7 @@ def exportOutlineItem(root): content = outlineToMMD(child) files.append((fpath, content)) - elif child.type() in ["txt", "t2t"]: + elif child.type() in ["txt", "t2t", "md"]: content = outlineToMMD(child) files.append((spath, content)) diff --git a/manuskript/mainWindow.py b/manuskript/mainWindow.py index a60f561..ef81721 100644 --- a/manuskript/mainWindow.py +++ b/manuskript/mainWindow.py @@ -11,7 +11,7 @@ from PyQt5.QtWidgets import QMainWindow, QHeaderView, qApp, QMenu, QActionGroup, from manuskript import settings from manuskript.enums import Character, PlotStep, Plot, World from manuskript.functions import AUC, wordCount, appPath -from manuskript.loadSave import saveProject, loadProject +from manuskript import loadSave from manuskript.models.characterModel import characterModel from manuskript.models.outlineModel import outlineModel from manuskript.models.plotModel import plotModel @@ -375,8 +375,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): # Clear datas self.loadEmptyDatas() - self.saveTimer.stop() + loadSave.clearSaveCache() # UI for i in [self.actSave, self.actSaveAs, self.actCloseProject, @@ -460,7 +460,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.currentProject = projectName QSettings().setValue("lastProject", projectName) - saveProject() # version=0 + loadSave.saveProject() # version=0 self.saveTimerNoChanges.stop() # Giving some feedback @@ -481,7 +481,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): def loadDatas(self, project): - errors = loadProject(project) + errors = loadSave.loadProject(project) # Giving some feedback if not errors: diff --git a/manuskript/models/outlineModel.py b/manuskript/models/outlineModel.py index 564c818..b71c72f 100644 --- a/manuskript/models/outlineModel.py +++ b/manuskript/models/outlineModel.py @@ -481,9 +481,9 @@ class outlineItem(): elif role == Qt.DecorationRole and column == Outline.title.value: if self.isFolder(): return QIcon.fromTheme("folder") - elif self.isText(): + elif self.isText: return QIcon.fromTheme("text-x-generic") - elif self.isT2T(): + elif self.isT2T() or self.isMD(): return QIcon.fromTheme("text-x-script") elif self.isHTML(): return QIcon.fromTheme("text-html") @@ -529,12 +529,12 @@ class outlineItem(): # Stuff to do before if column == Outline.type.value: oldType = self._data[Outline.type] - if oldType == "html" and data in ["txt", "t2t"]: + if oldType == "html" and data in ["txt", "t2t", "md"]: # Resource inneficient way to convert HTML to plain text e = QTextEdit() e.setHtml(self._data[Outline.text]) self._data[Outline.text] = e.toPlainText() - elif oldType in ["txt", "t2t"] and data == "html" and Outline.text in self._data: + elif oldType in ["txt", "t2t", "md"] and data == "html" and Outline.text in self._data: self._data[Outline.text] = self._data[Outline.text].replace("\n", "
") elif column == Outline.text.value: @@ -663,6 +663,12 @@ class outlineItem(): def isT2T(self): return self._data[Outline.type] == "t2t" + def isMD(self): + return self._data[Outline.type] == "md" + + def isMMD(self): + return self._data[Outline.type] == "md" + def isHTML(self): return self._data[Outline.type] == "html" diff --git a/manuskript/settings.py b/manuskript/settings.py index cffff20..8086eae 100644 --- a/manuskript/settings.py +++ b/manuskript/settings.py @@ -52,7 +52,7 @@ corkBackground = { "color": "#926239", "image": "" } -defaultTextType = "t2t" +defaultTextType = "md" fullScreenTheme = "spacedreams" textEditor = { diff --git a/manuskript/settingsWindow.py b/manuskript/settingsWindow.py index 2b7a58a..1a745a2 100644 --- a/manuskript/settingsWindow.py +++ b/manuskript/settingsWindow.py @@ -18,6 +18,7 @@ from manuskript.ui.editors.themes import getThemeName from manuskript.ui.editors.themes import loadThemeDatas from manuskript.ui.settings_ui import Ui_Settings from manuskript.ui.views.textEditView import textEditView +from manuskript.ui.welcome import welcome try: import enchant @@ -59,11 +60,7 @@ class settingsWindow(QWidget, Ui_Settings): self.chkAutoLoad.setChecked(autoLoad) self.chkAutoLoad.stateChanged.connect(self.saveSettingsChanged) - dtt = [ - ("t2t", self.tr("Txt2Tags"), "text-x-script"), - ("html", self.tr("Rich Text (html)"), "text-html"), - ("txt", self.tr("Plain Text"), "text-x-generic"), - ] + dtt = welcome.defaultTextType() self.cmbDefaultTextType.clear() for t in dtt: self.cmbDefaultTextType.addItem(QIcon.fromTheme(t[2]), t[1], t[0]) diff --git a/manuskript/ui/editors/MMDHighlighter.py b/manuskript/ui/editors/MMDHighlighter.py new file mode 100644 index 0000000..023028d --- /dev/null +++ b/manuskript/ui/editors/MMDHighlighter.py @@ -0,0 +1,16 @@ +#!/usr/bin/python +# -*- coding: utf8 -*- +from manuskript.ui.editors.basicHighlighter import basicHighlighter + + +class MMDHighlighter(basicHighlighter): + + def __init__(self, editor, style="Default"): + basicHighlighter.__init__(self, editor) + + def highlightBlock(self, text): + basicHighlighter.highlightBlockBefore(self, text) + + # FIXME + + basicHighlighter.highlightBlockAfter(self, text) diff --git a/manuskript/ui/editors/textFormat.py b/manuskript/ui/editors/textFormat.py index a2eb0e4..e09f680 100644 --- a/manuskript/ui/editors/textFormat.py +++ b/manuskript/ui/editors/textFormat.py @@ -62,7 +62,8 @@ class textFormat(QWidget, Ui_textFormat): elif item.isText(): self.align.setVisible(False) self.format.setVisible(False) - elif item.isT2T(): + + elif item.isT2T() or item.isMD(): self.align.setVisible(False) def setFormat(self): diff --git a/manuskript/ui/views/cmbOutlineTypeChoser.py b/manuskript/ui/views/cmbOutlineTypeChoser.py index 829cf7e..41842f1 100644 --- a/manuskript/ui/views/cmbOutlineTypeChoser.py +++ b/manuskript/ui/views/cmbOutlineTypeChoser.py @@ -5,6 +5,7 @@ from PyQt5.QtGui import QIcon, QBrush from PyQt5.QtWidgets import QComboBox from manuskript.enums import Outline +from manuskript.ui.welcome import welcome class cmbOutlineTypeChoser(QComboBox): @@ -24,11 +25,8 @@ class cmbOutlineTypeChoser(QComboBox): def updateItems(self): self.clear() - types = [ - ("t2t", self.tr("Txt2Tags"), "text-x-generic"), - ("html", self.tr("Rich Text (html)"), "text-html"), - ("txt", self.tr("Plain Text"), "text-x-generic"), - ] + types = welcome.defaultTextType() + for t in types: self.addItem(QIcon.fromTheme(t[2]), t[1], t[0]) @@ -43,7 +41,7 @@ class cmbOutlineTypeChoser(QComboBox): index = index.sibling(index.row(), self._column) self._index = index # Disabled if item type is not text - self.setEnabled(index.internalPointer().type() in ["t2t", "html", "txt"]) + self.setEnabled(index.internalPointer().type() in ["t2t", "html", "txt", "md"]) self.updateItems() self.updateSelectedItem() @@ -57,7 +55,7 @@ class cmbOutlineTypeChoser(QComboBox): if i.column() != self._column: i = i.sibling(i.row(), self._column) self._indexes.append(i) - if i.internalPointer().type() in ["t2t", "html", "txt"]: + if i.internalPointer().type() in ["t2t", "html", "txt", "md"]: hasText = True self.setEnabled(hasText) diff --git a/manuskript/ui/views/textEditView.py b/manuskript/ui/views/textEditView.py index 498bcf6..f853fca 100644 --- a/manuskript/ui/views/textEditView.py +++ b/manuskript/ui/views/textEditView.py @@ -11,6 +11,7 @@ from manuskript.enums import Outline from manuskript.functions import AUC from manuskript.functions import toString from manuskript.models.outlineModel import outlineModel +from manuskript.ui.editors.MMDHighlighter import MMDHighlighter from manuskript.ui.editors.basicHighlighter import basicHighlighter from manuskript.ui.editors.t2tFunctions import t2tClearFormat from manuskript.ui.editors.t2tFunctions import t2tFormatSelection @@ -160,6 +161,8 @@ class textEditView(QTextEdit): self._textFormat = "html" elif item.isT2T(): self._textFormat = "t2t" + elif item.isMD(): + self._textFormat = "md" else: self._textFormat = "text" @@ -174,8 +177,10 @@ class textEditView(QTextEdit): item = index.internalPointer() if self._column == Outline.text.value and not item.isT2T(): self.highlighter = basicHighlighter(self) - else: + elif item.isT2T(): self.highlighter = t2tHighlighter(self) + elif item.isMD(): + self.highlighter = MMDHighlighter(self) self.highlighter.setDefaultBlockFormat(self._defaultBlockFormat) @@ -551,3 +556,7 @@ class textEditView(QTextEdit): t2tFormatSelection(self, 2) elif _format == "Clear": t2tClearFormat(self) + + elif self._textFormat == "md": + # FIXME + print("Not implemented yet.") diff --git a/manuskript/ui/welcome.py b/manuskript/ui/welcome.py index ebc50a5..3331438 100644 --- a/manuskript/ui/welcome.py +++ b/manuskript/ui/welcome.py @@ -7,7 +7,8 @@ import os from PyQt5.QtCore import QSettings, QRegExp, Qt, QDir from PyQt5.QtGui import QIcon, QBrush, QColor, QStandardItemModel, QStandardItem -from PyQt5.QtWidgets import QWidget, QAction, QFileDialog, QSpinBox, QLineEdit, QLabel, QPushButton, QTreeWidgetItem +from PyQt5.QtWidgets import QWidget, QAction, QFileDialog, QSpinBox, QLineEdit, QLabel, QPushButton, QTreeWidgetItem, \ + qApp from manuskript import settings from manuskript.enums import Outline @@ -191,11 +192,13 @@ class welcome(QWidget, Ui_welcome): ]) ] - def defaultTextType(self): + @classmethod + def defaultTextType(cls): return [ - ("t2t", self.tr("Txt2Tags"), "text-x-generic"), - ("html", self.tr("Rich Text (html)"), "text-html"), - ("txt", self.tr("Plain Text"), "text-x-generic"), + ("t2t", qApp.translate("Welcome", "Txt2Tags"), "text-x-generic"), + ("html", qApp.translate("Welcome", "Rich Text (html)"), "text-html"), + ("txt", qApp.translate("Welcome", "Plain Text"), "text-x-generic"), + ("md", qApp.translate("Welcome", "Multi-Markdown"), "text-x-generic"), ] def changeTemplate(self, item, column):