References as module, cleaner

This commit is contained in:
Olivier Keshavjee 2015-07-02 17:33:05 +02:00
parent 1e9b239803
commit 6607e1938e
5 changed files with 95 additions and 63 deletions

View file

@ -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)

View file

@ -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]:

View file

@ -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)

View file

@ -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):

View file

@ -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)))