mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-22 05:42:25 +12:00
Exporter can now.. export. Yay!
This commit is contained in:
parent
ac0667c870
commit
9c2c15e352
|
@ -20,8 +20,9 @@ Be sure to have all **dependencies** installed !
|
|||
## Dependencies
|
||||
- Python 3
|
||||
- PyQt5
|
||||
- libqt5svg5
|
||||
- lxml
|
||||
- Qt SVG (`libqt5svg5` on Ubuntu)
|
||||
- Qt Webkit (`python3-pyqt5.qtwebkit` on Ubuntu)
|
||||
- lxml (`python3-lxml` on Ubuntu)
|
||||
|
||||
Optional:
|
||||
- pyenchant
|
||||
|
|
|
@ -84,6 +84,10 @@ class basicFormat:
|
|||
def preview(cls, settingsWidget, previewWidget):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def export(cls, settingsWidget):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def shortcodes(cls):
|
||||
return [
|
||||
|
|
|
@ -17,6 +17,9 @@ class HTML(markdown):
|
|||
description = qApp.translate("Export", "Basic HTML output using python module 'markdown'.")
|
||||
InvalidBecause = qApp.translate("Export", "python module 'markdown'.")
|
||||
|
||||
exportVarName = "lastManuskriptHTML"
|
||||
exportFilter = "HTML files (*.html);; Any files (*)"
|
||||
|
||||
@classmethod
|
||||
def isValid(cls):
|
||||
return MD is not None
|
||||
|
@ -34,23 +37,33 @@ class HTML(markdown):
|
|||
t.setStyleSheet("""
|
||||
QTabBar::tab{
|
||||
background-color: #BBB;
|
||||
padding: 2px;
|
||||
padding: 3px 25px;
|
||||
border: none;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
QTabBar::tab:selected, QToolBox::tab:hover{
|
||||
QTabBar::tab:selected, QTabBar::tab:hover{
|
||||
background-color:skyblue;
|
||||
}
|
||||
""")
|
||||
w0 = QPlainTextEdit()
|
||||
w0.setFrameShape(QFrame.NoFrame)
|
||||
w0.setReadOnly(True)
|
||||
w1 = QPlainTextEdit()
|
||||
w1.setFrameShape(QFrame.NoFrame)
|
||||
w1.setReadOnly(True)
|
||||
w2 = QWebView()
|
||||
t.addTab(w2, qApp.translate("Export", "HTML"))
|
||||
t.addTab(w1, qApp.translate("Export", "Source"))
|
||||
t.addTab(w0, qApp.translate("Export", "Markdown source"))
|
||||
t.addTab(w1, qApp.translate("Export", "HTML Source"))
|
||||
t.addTab(w2, qApp.translate("Export", "HTML Output"))
|
||||
|
||||
t.setCurrentIndex(2)
|
||||
return t
|
||||
|
||||
@classmethod
|
||||
def output(cls, settings):
|
||||
html = MD.markdown(markdown.output(settings))
|
||||
return html
|
||||
|
||||
@classmethod
|
||||
def preview(cls, settingsWidget, previewWidget):
|
||||
settings = settingsWidget.getSettings()
|
||||
|
@ -58,12 +71,14 @@ class HTML(markdown):
|
|||
# Save settings
|
||||
settingsWidget.writeSettings()
|
||||
|
||||
src = markdown.output(settings)
|
||||
html = MD.markdown(src)
|
||||
md = markdown.output(settings)
|
||||
html = MD.markdown(md)
|
||||
|
||||
cls.preparesTextEditView(previewWidget.widget(0), settings["Preview"]["PreviewFont"])
|
||||
previewWidget.widget(0).setPlainText(md)
|
||||
cls.preparesTextEditView(previewWidget.widget(1), settings["Preview"]["PreviewFont"])
|
||||
previewWidget.widget(1).setPlainText(html)
|
||||
previewWidget.widget(0).setHtml(html)
|
||||
previewWidget.widget(2).setHtml(html)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -14,6 +14,9 @@ class markdown(plainText):
|
|||
description = qApp.translate("Export", """Just like plain text, excepts adds markdown titles.
|
||||
Presupposes that texts are formatted in markdown.""")
|
||||
|
||||
exportVarName = "lastManuskriptMarkdown"
|
||||
exportFilter = "Markdown files (*.md);; Any files (*)"
|
||||
|
||||
@classmethod
|
||||
def settingsWidget(cls):
|
||||
w = markdownSettings(cls)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# --!-- coding: utf8 --!--
|
||||
import re
|
||||
from PyQt5.QtGui import QFont, QTextCharFormat
|
||||
from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame
|
||||
from PyQt5.QtWidgets import QPlainTextEdit, qApp, QFrame, QFileDialog
|
||||
|
||||
from manuskript.exporter.basic import basicFormat
|
||||
from manuskript.functions import mainWindow
|
||||
|
@ -20,6 +20,11 @@ class plainText(basicFormat):
|
|||
"Preview": True,
|
||||
}
|
||||
|
||||
# Default settings used in cls.getExportFilename. For easy subclassing when exporting plaintext.
|
||||
exportVarName = "lastPlainText"
|
||||
exportFilter = "Text files (*.txt);; Any files (*)"
|
||||
|
||||
|
||||
@classmethod
|
||||
def settingsWidget(cls):
|
||||
w = exporterSettings(cls)
|
||||
|
@ -37,6 +42,61 @@ class plainText(basicFormat):
|
|||
def output(cls, settings):
|
||||
return cls.concatenate(mainWindow().mdlOutline.rootItem, settings)
|
||||
|
||||
@classmethod
|
||||
def getExportFilename(cls, settingsWidget, varName=None, filter=None):
|
||||
|
||||
if varName is None:
|
||||
varName = cls.exportVarName
|
||||
|
||||
if filter is None:
|
||||
filter = cls.exportFilter
|
||||
|
||||
settings = settingsWidget.getSettings()
|
||||
|
||||
s = settings.get("Output", {})
|
||||
if varName in s:
|
||||
filename = s[varName]
|
||||
else:
|
||||
filename = ""
|
||||
|
||||
filename, filter = QFileDialog.getSaveFileName(settingsWidget.parent(),
|
||||
caption=qApp.translate("Export", "Chose output file..."),
|
||||
filter=filter,
|
||||
directory=filename)
|
||||
|
||||
if filename:
|
||||
s[varName] = filename
|
||||
settingsWidget.settings["Output"] = s
|
||||
|
||||
# Auto adds extension if necessary
|
||||
try:
|
||||
# Extract the extension from "Some name (*.ext)"
|
||||
ext = filter.split("(")[1].split(")")[0]
|
||||
ext = ext.split(".")[1]
|
||||
if " " in ext: # In case there are multiple extensions: "Images (*.png *.jpg)"
|
||||
ext = ext.split(" ")[0]
|
||||
except:
|
||||
ext = ""
|
||||
|
||||
if ext and filename[-len(ext)-1:] != ".{}".format(ext):
|
||||
filename += "." + ext
|
||||
|
||||
# Save settings
|
||||
settingsWidget.writeSettings()
|
||||
|
||||
return filename
|
||||
|
||||
@classmethod
|
||||
def export(cls, settingsWidget):
|
||||
settings = settingsWidget.getSettings()
|
||||
settingsWidget.writeSettings()
|
||||
|
||||
filename = cls.getExportFilename(settingsWidget)
|
||||
|
||||
if filename:
|
||||
with open(filename, "w") as f:
|
||||
f.write(cls.output(settingsWidget.settings))
|
||||
|
||||
@classmethod
|
||||
def preview(cls, settingsWidget, previewWidget):
|
||||
settings = settingsWidget.getSettings()
|
||||
|
|
|
@ -21,6 +21,8 @@ class exporterDialog(QWidget, Ui_exporter):
|
|||
# Var
|
||||
self.mw = mw
|
||||
self.currentExporter = None
|
||||
self.settingsWidget = None
|
||||
self.previewWidget = None
|
||||
|
||||
# Populates lite
|
||||
self.cmbExporters.clear()
|
||||
|
@ -49,6 +51,7 @@ class exporterDialog(QWidget, Ui_exporter):
|
|||
self.cmbExporters.setCurrentIndex(1)
|
||||
|
||||
self.btnPreview.clicked.connect(self.preview)
|
||||
self.btnExport.clicked.connect(self.export)
|
||||
|
||||
def updateUi(self, index):
|
||||
E, F = self.getSelectedExporter()
|
||||
|
@ -71,12 +74,21 @@ class exporterDialog(QWidget, Ui_exporter):
|
|||
self.previewWidget = F.previewWidget()
|
||||
self.setGroupWidget(self.grpPreview, self.previewWidget)
|
||||
|
||||
self.splitter.setStretchFactor(0, 3)
|
||||
self.splitter.setStretchFactor(1, 6)
|
||||
|
||||
def preview(self):
|
||||
E, F = self.getSelectedExporter()
|
||||
if not E or not F or not F.implemented:
|
||||
return
|
||||
F.preview(self.settingsWidget, self.previewWidget)
|
||||
|
||||
def export(self):
|
||||
E, F = self.getSelectedExporter()
|
||||
if not E or not F or not F.implemented:
|
||||
return
|
||||
F.export(self.settingsWidget)
|
||||
|
||||
###################################################################################################################
|
||||
# UI
|
||||
###################################################################################################################
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
# Form implementation generated from reading ui file 'manuskript/ui/exporters/exporter_ui.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.4.2
|
||||
# Created: Thu Apr 7 16:37:00 2016
|
||||
# by: PyQt5 UI code generator 5.2.1
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
|
@ -23,6 +24,7 @@ class Ui_exporter(object):
|
|||
self.cmbExporters.setObjectName("cmbExporters")
|
||||
self.horizontalLayout.addWidget(self.cmbExporters)
|
||||
self.btnManageExporters = QtWidgets.QPushButton(exporter)
|
||||
self.btnManageExporters.setFlat(True)
|
||||
self.btnManageExporters.setObjectName("btnManageExporters")
|
||||
self.horizontalLayout.addWidget(self.btnManageExporters)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
|
@ -30,9 +32,9 @@ class Ui_exporter(object):
|
|||
self.btnPreview = QtWidgets.QPushButton(exporter)
|
||||
self.btnPreview.setObjectName("btnPreview")
|
||||
self.horizontalLayout.addWidget(self.btnPreview)
|
||||
self.pushButton_2 = QtWidgets.QPushButton(exporter)
|
||||
self.pushButton_2.setObjectName("pushButton_2")
|
||||
self.horizontalLayout.addWidget(self.pushButton_2)
|
||||
self.btnExport = QtWidgets.QPushButton(exporter)
|
||||
self.btnExport.setObjectName("btnExport")
|
||||
self.horizontalLayout.addWidget(self.btnExport)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
self.splitter = QtWidgets.QSplitter(exporter)
|
||||
self.splitter.setOrientation(QtCore.Qt.Horizontal)
|
||||
|
@ -40,14 +42,14 @@ class Ui_exporter(object):
|
|||
self.grpSettings = QtWidgets.QGroupBox(self.splitter)
|
||||
self.grpSettings.setObjectName("grpSettings")
|
||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.grpSettings)
|
||||
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_3.setSpacing(0)
|
||||
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||
self.grpPreview = QtWidgets.QGroupBox(self.splitter)
|
||||
self.grpPreview.setObjectName("grpPreview")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.grpPreview)
|
||||
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_2.setSpacing(0)
|
||||
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.verticalLayout.addWidget(self.splitter)
|
||||
|
||||
|
@ -60,7 +62,7 @@ class Ui_exporter(object):
|
|||
self.label.setText(_translate("exporter", "Export to:"))
|
||||
self.btnManageExporters.setText(_translate("exporter", "Manage exporters"))
|
||||
self.btnPreview.setText(_translate("exporter", "Preview"))
|
||||
self.pushButton_2.setText(_translate("exporter", "Export"))
|
||||
self.btnExport.setText(_translate("exporter", "Export"))
|
||||
self.grpSettings.setTitle(_translate("exporter", "Settings"))
|
||||
self.grpPreview.setTitle(_translate("exporter", "Preview"))
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<widget class="QPushButton" name="btnExport">
|
||||
<property name="text">
|
||||
<string>Export</string>
|
||||
</property>
|
||||
|
|
Loading…
Reference in a new issue