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