mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-06-28 03:00:59 +12:00
References as module, cleaner
This commit is contained in:
parent
1e9b239803
commit
6607e1938e
|
@ -6,14 +6,39 @@ from enums import *
|
||||||
from functions import *
|
from functions import *
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# SHORT REFERENCES
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
def infoForRef(ref):
|
|
||||||
match = re.fullmatch("::(\w):(\d+?)::", ref)
|
RegEx = r"::(\w):(\d+?)::"
|
||||||
|
RegExNonCapturing = r"::\w:\d+?::"
|
||||||
|
EmptyRef = "::{}:{}::"
|
||||||
|
PersoLetter = "C"
|
||||||
|
TextLetter = "T"
|
||||||
|
PlotLetter = "P"
|
||||||
|
|
||||||
|
def plotReference(plotID):
|
||||||
|
return EmptyRef.format(PlotLetter, plotID)
|
||||||
|
|
||||||
|
def persoReference(persoID):
|
||||||
|
return EmptyRef.format(PersoLetter, persoID)
|
||||||
|
|
||||||
|
def textReference(outlineID):
|
||||||
|
return EmptyRef.format(TextLetter, outlineID)
|
||||||
|
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# READABLE INFOS
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
def infos(ref):
|
||||||
|
match = re.fullmatch(RegEx, ref)
|
||||||
if match:
|
if match:
|
||||||
_type = match.group(1)
|
_type = match.group(1)
|
||||||
_ref = match.group(2)
|
_ref = match.group(2)
|
||||||
|
|
||||||
if _type == "T":
|
if _type == TextLetter:
|
||||||
m = mainWindow().mdlOutline
|
m = mainWindow().mdlOutline
|
||||||
idx = m.getIndexByID(_ref)
|
idx = m.getIndexByID(_ref)
|
||||||
|
|
||||||
|
@ -35,7 +60,7 @@ def infoForRef(ref):
|
||||||
POV = ""
|
POV = ""
|
||||||
if item.POV():
|
if item.POV():
|
||||||
POV = "<a href='{ref}'>{text}</a>".format(
|
POV = "<a href='{ref}'>{text}</a>".format(
|
||||||
ref="::C:{}::".format(item.POV()),
|
ref=getPersoReference(item.POV()),
|
||||||
text=mainWindow().mdlPersos.getPersoNameByID(item.POV()))
|
text=mainWindow().mdlPersos.getPersoNameByID(item.POV()))
|
||||||
|
|
||||||
status = item.status()
|
status = item.status()
|
||||||
|
@ -54,7 +79,7 @@ def infoForRef(ref):
|
||||||
pathStr = []
|
pathStr = []
|
||||||
for _id, title in path:
|
for _id, title in path:
|
||||||
pathStr.append("<a href='{ref}'>{text}</a>".format(
|
pathStr.append("<a href='{ref}'>{text}</a>".format(
|
||||||
ref="::T:{}::".format(_id),
|
ref=getTextReference(_id),
|
||||||
text=title))
|
text=title))
|
||||||
path = " > ".join(pathStr)
|
path = " > ".join(pathStr)
|
||||||
|
|
||||||
|
@ -99,7 +124,7 @@ def infoForRef(ref):
|
||||||
|
|
||||||
return text
|
return text
|
||||||
|
|
||||||
elif _type == "C":
|
elif _type == PersoLetter:
|
||||||
m = mainWindow().mdlPersos
|
m = mainWindow().mdlPersos
|
||||||
index = m.getIndexFromID(_ref)
|
index = m.getIndexFromID(_ref)
|
||||||
name = m.name(index.row())
|
name = m.name(index.row())
|
||||||
|
@ -144,7 +169,7 @@ def infoForRef(ref):
|
||||||
for t in lst:
|
for t in lst:
|
||||||
idx = oM.getIndexByID(t)
|
idx = oM.getIndexByID(t)
|
||||||
listPOV += "<li><a href='{link}'>{text}</a>".format(
|
listPOV += "<li><a href='{link}'>{text}</a>".format(
|
||||||
link="::T:{}::".format(t),
|
link=getTextReference(t),
|
||||||
text=oM.data(idx, Outline.title.value))
|
text=oM.data(idx, Outline.title.value))
|
||||||
|
|
||||||
# List scences where character is referenced
|
# List scences where character is referenced
|
||||||
|
@ -153,7 +178,7 @@ def infoForRef(ref):
|
||||||
for t in lst:
|
for t in lst:
|
||||||
idx = oM.getIndexByID(t)
|
idx = oM.getIndexByID(t)
|
||||||
listRefs += "<li><a href='{link}'>{text}</a>".format(
|
listRefs += "<li><a href='{link}'>{text}</a>".format(
|
||||||
link="::T:{}::".format(t),
|
link=getTextReference(t),
|
||||||
text=oM.data(idx, Outline.title.value))
|
text=oM.data(idx, Outline.title.value))
|
||||||
|
|
||||||
text = """<h1>{name}</h1>
|
text = """<h1>{name}</h1>
|
||||||
|
@ -181,47 +206,13 @@ def infoForRef(ref):
|
||||||
else:
|
else:
|
||||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||||
|
|
||||||
def refToLink(ref):
|
def tooltip(ref):
|
||||||
match = re.fullmatch("::(\w):(\d+?)::", ref)
|
match = re.fullmatch(RegEx, ref)
|
||||||
if match:
|
|
||||||
_type = match.group(1)
|
|
||||||
_ref = match.group(2)
|
|
||||||
text = ""
|
|
||||||
if _type == "T":
|
|
||||||
m = mainWindow().mdlOutline
|
|
||||||
idx = m.getIndexByID(_ref)
|
|
||||||
if idx.isValid():
|
|
||||||
item = idx.internalPointer()
|
|
||||||
text = item.title()
|
|
||||||
|
|
||||||
elif _type == "C":
|
|
||||||
m = mainWindow().mdlPersos
|
|
||||||
text = m.item(int(_ref), Perso.name.value).text()
|
|
||||||
|
|
||||||
if text:
|
|
||||||
return "<a href='{ref}'>{text}</a>".format(
|
|
||||||
ref=ref,
|
|
||||||
text=text)
|
|
||||||
else:
|
|
||||||
return ref
|
|
||||||
|
|
||||||
def linkifyAllRefs(text):
|
|
||||||
return re.sub(r"::(\w):(\d+?)::", lambda m: refToLink(m.group(0)), text)
|
|
||||||
|
|
||||||
def basicT2TFormat(text):
|
|
||||||
text = re.sub("\*\*(.*?)\*\*", "<b>\\1</b>", text)
|
|
||||||
text = re.sub("//(.*?)//", "<i>\\1</i>", text)
|
|
||||||
text = re.sub("__(.*?)__", "<u>\\1</u>", text)
|
|
||||||
text = text.replace("\n", "<br>")
|
|
||||||
return text
|
|
||||||
|
|
||||||
def tooltipForRef(ref):
|
|
||||||
match = re.fullmatch("::(\w):(\d+?)::", ref)
|
|
||||||
if match:
|
if match:
|
||||||
_type = match.group(1)
|
_type = match.group(1)
|
||||||
_ref = match.group(2)
|
_ref = match.group(2)
|
||||||
|
|
||||||
if _type == "T":
|
if _type == TextLetter:
|
||||||
m = mainWindow().mdlOutline
|
m = mainWindow().mdlOutline
|
||||||
idx = m.getIndexByID(_ref)
|
idx = m.getIndexByID(_ref)
|
||||||
|
|
||||||
|
@ -235,7 +226,7 @@ def tooltipForRef(ref):
|
||||||
|
|
||||||
return tooltip
|
return tooltip
|
||||||
|
|
||||||
elif _type == "C":
|
elif _type == PersoLetter:
|
||||||
m = mainWindow().mdlPersos
|
m = mainWindow().mdlPersos
|
||||||
name = m.item(int(_ref), Perso.name.value).text()
|
name = m.item(int(_ref), Perso.name.value).text()
|
||||||
return qApp.translate("references", "Character: <b>{}</b>").format(name)
|
return qApp.translate("references", "Character: <b>{}</b>").format(name)
|
||||||
|
@ -243,13 +234,52 @@ def tooltipForRef(ref):
|
||||||
else:
|
else:
|
||||||
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
return qApp.translate("references", "Unknown reference: {}.").format(ref)
|
||||||
|
|
||||||
def openReference(ref):
|
|
||||||
match = re.fullmatch("::(\w):(\d+?)::", ref)
|
###############################################################################
|
||||||
|
# FUNCTIONS
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
def refToLink(ref):
|
||||||
|
match = re.fullmatch(RegEx, ref)
|
||||||
|
if match:
|
||||||
|
_type = match.group(1)
|
||||||
|
_ref = match.group(2)
|
||||||
|
text = ""
|
||||||
|
if _type == TextLetter:
|
||||||
|
m = mainWindow().mdlOutline
|
||||||
|
idx = m.getIndexByID(_ref)
|
||||||
|
if idx.isValid():
|
||||||
|
item = idx.internalPointer()
|
||||||
|
text = item.title()
|
||||||
|
|
||||||
|
elif _type == PersoLetter:
|
||||||
|
m = mainWindow().mdlPersos
|
||||||
|
text = m.item(int(_ref), Perso.name.value).text()
|
||||||
|
|
||||||
|
if text:
|
||||||
|
return "<a href='{ref}'>{text}</a>".format(
|
||||||
|
ref=ref,
|
||||||
|
text=text)
|
||||||
|
else:
|
||||||
|
return ref
|
||||||
|
|
||||||
|
def linkifyAllRefs(text):
|
||||||
|
return re.sub(RegEx, lambda m: refToLink(m.group(0)), text)
|
||||||
|
|
||||||
|
def basicT2TFormat(text):
|
||||||
|
text = re.sub("\*\*(.*?)\*\*", "<b>\\1</b>", text)
|
||||||
|
text = re.sub("//(.*?)//", "<i>\\1</i>", text)
|
||||||
|
text = re.sub("__(.*?)__", "<u>\\1</u>", text)
|
||||||
|
text = text.replace("\n", "<br>")
|
||||||
|
return text
|
||||||
|
|
||||||
|
def open(ref):
|
||||||
|
match = re.fullmatch(RegEx, ref)
|
||||||
if match:
|
if match:
|
||||||
_type = match.group(1)
|
_type = match.group(1)
|
||||||
_ref = match.group(2)
|
_ref = match.group(2)
|
||||||
|
|
||||||
if _type == "C":
|
if _type == PersoLetter:
|
||||||
mw = mainWindow()
|
mw = mainWindow()
|
||||||
|
|
||||||
for i in range(mw.mdlPersos.rowCount()):
|
for i in range(mw.mdlPersos.rowCount()):
|
||||||
|
@ -262,7 +292,7 @@ def openReference(ref):
|
||||||
print("Ref not found")
|
print("Ref not found")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
elif _type == "T":
|
elif _type == TextLetter:
|
||||||
|
|
||||||
mw = mainWindow()
|
mw = mainWindow()
|
||||||
index = mw.mdlOutline.getIndexByID(_ref)
|
index = mw.mdlOutline.getIndexByID(_ref)
|
||||||
|
|
|
@ -6,7 +6,7 @@ from enums import *
|
||||||
from models.outlineModel import *
|
from models.outlineModel import *
|
||||||
from ui.cheatSheet_ui import *
|
from ui.cheatSheet_ui import *
|
||||||
from functions import *
|
from functions import *
|
||||||
from models.references import *
|
import models.references as Ref
|
||||||
|
|
||||||
class cheatSheet(QWidget, Ui_cheatSheet):
|
class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
self.listDelegate = listCompleterDelegate(self)
|
self.listDelegate = listCompleterDelegate(self)
|
||||||
self.list.setItemDelegate(self.listDelegate)
|
self.list.setItemDelegate(self.listDelegate)
|
||||||
self.list.itemActivated.connect(self.showInfos)
|
self.list.itemActivated.connect(self.showInfos)
|
||||||
|
self.list.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
self.view.linkActivated.connect(self.openLink)
|
self.view.linkActivated.connect(self.openLink)
|
||||||
self.view.linkHovered.connect(self.linkHovered)
|
self.view.linkHovered.connect(self.linkHovered)
|
||||||
|
|
||||||
|
@ -44,6 +45,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
self.persoModel = mainWindow().mdlPersos
|
self.persoModel = mainWindow().mdlPersos
|
||||||
self.outlineModel.dataChanged.connect(self.populateTimer.start)
|
self.outlineModel.dataChanged.connect(self.populateTimer.start)
|
||||||
self.persoModel.dataChanged.connect(self.populateTimer.start)
|
self.persoModel.dataChanged.connect(self.populateTimer.start)
|
||||||
|
self.populate()
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
if self.persoModel:
|
if self.persoModel:
|
||||||
|
@ -56,7 +58,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(imp)]
|
imp = [self.tr("Minor"), self.tr("Secondary"), self.tr("Main")][int(imp)]
|
||||||
d.append((name, ID, imp))
|
d.append((name, ID, imp))
|
||||||
|
|
||||||
self.data[(self.tr("Characters"), "C")] = d
|
self.data[(self.tr("Characters"), Ref.PersoLetter)] = d
|
||||||
if self.outlineModel:
|
if self.outlineModel:
|
||||||
d = []
|
d = []
|
||||||
|
|
||||||
|
@ -68,7 +70,7 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
r = self.outlineModel.rootItem
|
r = self.outlineModel.rootItem
|
||||||
addChildren(r)
|
addChildren(r)
|
||||||
|
|
||||||
self.data[(self.tr("Texts"), "T")] = d
|
self.data[(self.tr("Texts"), Ref.TextLetter)] = d
|
||||||
|
|
||||||
self.updateListFromData()
|
self.updateListFromData()
|
||||||
|
|
||||||
|
@ -100,14 +102,14 @@ class cheatSheet(QWidget, Ui_cheatSheet):
|
||||||
i = self.list.currentItem()
|
i = self.list.currentItem()
|
||||||
ref = i.data(Qt.UserRole)
|
ref = i.data(Qt.UserRole)
|
||||||
if ref:
|
if ref:
|
||||||
self.view.setText(infoForRef(ref))
|
self.view.setText(Ref.infos(ref))
|
||||||
|
|
||||||
def openLink(self, link):
|
def openLink(self, link):
|
||||||
openReference(link)
|
Ref.open(link)
|
||||||
|
|
||||||
def linkHovered(self, link):
|
def linkHovered(self, link):
|
||||||
if link:
|
if link:
|
||||||
QToolTip.showText(QCursor.pos(), tooltipForRef(link))
|
QToolTip.showText(QCursor.pos(), Ref.tooltip(link))
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
if event.key() in [Qt.Key_Up, Qt.Key_Down]:
|
if event.key() in [Qt.Key_Up, Qt.Key_Down]:
|
||||||
|
|
|
@ -6,6 +6,7 @@ from enums import *
|
||||||
from models.outlineModel import *
|
from models.outlineModel import *
|
||||||
from ui.editors.completer_ui import *
|
from ui.editors.completer_ui import *
|
||||||
from functions import *
|
from functions import *
|
||||||
|
import models.references as Ref
|
||||||
|
|
||||||
class completer(QWidget, Ui_completer):
|
class completer(QWidget, Ui_completer):
|
||||||
|
|
||||||
|
@ -45,7 +46,7 @@ class completer(QWidget, Ui_completer):
|
||||||
self.addCategory(cat[0])
|
self.addCategory(cat[0])
|
||||||
for item in filtered:
|
for item in filtered:
|
||||||
i = QListWidgetItem(item[0])
|
i = QListWidgetItem(item[0])
|
||||||
i.setData(Qt.UserRole, "::{}:{}::".format(cat[1], item[1]))
|
i.setData(Qt.UserRole, Ref.EmptyRef.format(cat[1], item[1]))
|
||||||
i.setData(Qt.UserRole+1, item[2])
|
i.setData(Qt.UserRole+1, item[2])
|
||||||
self.list.addItem(i)
|
self.list.addItem(i)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ from enums import *
|
||||||
from models.outlineModel import *
|
from models.outlineModel import *
|
||||||
from ui.search_ui import *
|
from ui.search_ui import *
|
||||||
from functions import *
|
from functions import *
|
||||||
from models.references import *
|
|
||||||
|
|
||||||
class search(QWidget, Ui_search):
|
class search(QWidget, Ui_search):
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from enums import *
|
||||||
from functions import *
|
from functions import *
|
||||||
from ui.views.textEditView import *
|
from ui.views.textEditView import *
|
||||||
from ui.editors.completer import *
|
from ui.editors.completer import *
|
||||||
from models.references import *
|
import models.references as Ref
|
||||||
import settings
|
import settings
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ class textEditCompleter(textEditView):
|
||||||
cursor.select(QTextCursor.BlockUnderCursor)
|
cursor.select(QTextCursor.BlockUnderCursor)
|
||||||
text = cursor.selectedText()
|
text = cursor.selectedText()
|
||||||
pos -= cursor.selectionStart()
|
pos -= cursor.selectionStart()
|
||||||
match = re.findall(r"::\w:\d+?::", text)
|
match = re.findall(Ref.RegExNonCapturing, text)
|
||||||
for m in match:
|
for m in match:
|
||||||
if text.find(m) <= pos <= text.find(m) + len(m):
|
if text.find(m) <= pos <= text.find(m) + len(m):
|
||||||
return m
|
return m
|
||||||
|
@ -123,7 +123,7 @@ class textEditCompleter(textEditView):
|
||||||
if ref:
|
if ref:
|
||||||
if not qApp.overrideCursor():
|
if not qApp.overrideCursor():
|
||||||
qApp.setOverrideCursor(Qt.PointingHandCursor)
|
qApp.setOverrideCursor(Qt.PointingHandCursor)
|
||||||
QToolTip.showText(self.mapToGlobal(event.pos()), tooltipForRef(ref))
|
QToolTip.showText(self.mapToGlobal(event.pos()), Ref.tooltip(ref))
|
||||||
|
|
||||||
def mouseReleaseEvent(self, event):
|
def mouseReleaseEvent(self, event):
|
||||||
textEditView.mouseReleaseEvent(self, event)
|
textEditView.mouseReleaseEvent(self, event)
|
||||||
|
@ -132,7 +132,7 @@ class textEditCompleter(textEditView):
|
||||||
cursor = self.cursorForPosition(event.pos())
|
cursor = self.cursorForPosition(event.pos())
|
||||||
ref = self.refUnderCursor(cursor)
|
ref = self.refUnderCursor(cursor)
|
||||||
if ref:
|
if ref:
|
||||||
openReference(ref)
|
Ref.open(ref)
|
||||||
qApp.restoreOverrideCursor()
|
qApp.restoreOverrideCursor()
|
||||||
|
|
||||||
def resizeEvent(self, event):
|
def resizeEvent(self, event):
|
||||||
|
@ -143,7 +143,7 @@ class textEditCompleter(textEditView):
|
||||||
cursor = self.textCursor()
|
cursor = self.textCursor()
|
||||||
fm = QFontMetrics(self.font())
|
fm = QFontMetrics(self.font())
|
||||||
refs = []
|
refs = []
|
||||||
for txt in re.finditer(r"::(\w):(\d+?)::", self.toPlainText()):
|
for txt in re.finditer(Ref.RegEx, self.toPlainText()):
|
||||||
cursor.setPosition(txt.start())
|
cursor.setPosition(txt.start())
|
||||||
r = self.cursorRect(cursor)
|
r = self.cursorRect(cursor)
|
||||||
r.setWidth(fm.width(txt.group(0)))
|
r.setWidth(fm.width(txt.group(0)))
|
||||||
|
|
Loading…
Reference in a new issue