Exemplo n.º 1
0
 def insertMarkers(self):
     # Copy the text and if it is empty, complain and exit.
     qi = QString(self.insertText.text())
     if qi.isEmpty():
         pqMsgs.warningMsg("No insert text specified")
         return
     # See how many pages are involved: all the ones that aren't marked skip
     n = 0
     for i in range(IMC.pageTable.size()):
         if IMC.pageTable.getAction(i) != IMC.FolioRuleSkip:
             n += 1
     if n == 0:  # page table empty or all rows marked skip
         pqMsgs.warningMsg("No pages to give folios to")
         return
     m = "Insert this string at the top of {0} pages?".format(n)
     b = pqMsgs.okCancelMsg(QString(m), pqMsgs.trunc(qi, 35))
     if b:
         # Convert any '\n' in the text to the QT line delimiter char
         # we do this in the copy so the lineEdit text doesn't change
         qi.replace(QString(u'\\n'), QString(IMC.QtLineDelim))
         # get a cursor on the edit document
         tc = QTextCursor(IMC.editWidget.textCursor())
         tc.beginEditBlock()  # start single undoable operation
         # Working from the end of the document backward, go to the
         # top of each page and insert the string
         for i in reversed(range(IMC.pageTable.size())):
             if IMC.pageTable.getAction(i) != IMC.FolioRuleSkip:
                 # Note the page's start position and set our work cursor to it
                 pos = IMC.pageTable.getCursor(i).position()
                 tc.setPosition(pos)
                 # Make a copy of the insert string replacing %f with this folio
                 f = IMC.pageTable.getDisplay(i)
                 qf = QString(qi)
                 qf.replace(QString(u'%f'), f, Qt.CaseInsensitive)
                 tc.insertText(qf)
                 # The insertion goes in ahead of the saved cursor position so now
                 # it points after the inserted string. Put it back where it was.
                 IMC.pageTable.setPosition(i, pos)
         tc.endEditBlock()  # wrap up the undo op
Exemplo n.º 2
0
 def insertMarkers(self):
     # Copy the text and if it is empty, complain and exit.
     qi = QString(self.insertText.text())
     if qi.isEmpty() :
         pqMsgs.warningMsg("No insert text specified")
         return
     # See how many pages are involved: all the ones that aren't marked skip
     n = 0
     for i in range(IMC.pageTable.size()):
         if IMC.pageTable.getAction(i) != IMC.FolioRuleSkip :
             n += 1
     if n == 0 : # page table empty or all rows marked skip
         pqMsgs.warningMsg("No pages to give folios to")
         return
     m = "Insert this string at the top of {0} pages?".format(n)
     b = pqMsgs.okCancelMsg(QString(m),pqMsgs.trunc(qi,35))
     if b :
         # Convert any '\n' in the text to the QT line delimiter char
         # we do this in the copy so the lineEdit text doesn't change
         qi.replace(QString(u'\\n'),QString(IMC.QtLineDelim))
         # get a cursor on the edit document
         tc = QTextCursor(IMC.editWidget.textCursor())
         tc.beginEditBlock() # start single undoable operation
         # Working from the end of the document backward, go to the
         # top of each page and insert the string
         for i in reversed( range( IMC.pageTable.size() ) ) :
             if IMC.pageTable.getAction(i) != IMC.FolioRuleSkip :
                 # Note the page's start position and set our work cursor to it
                 pos = IMC.pageTable.getCursor(i).position()
                 tc.setPosition(pos)
                 # Make a copy of the insert string replacing %f with this folio
                 f = IMC.pageTable.getDisplay(i)
                 qf = QString(qi)
                 qf.replace(QString(u'%f'),f,Qt.CaseInsensitive)
                 tc.insertText(qf)
                 # The insertion goes in ahead of the saved cursor position so now
                 # it points after the inserted string. Put it back where it was.
                 IMC.pageTable.setPosition(i, pos)
         tc.endEditBlock() # wrap up the undo op
Exemplo n.º 3
0
 def loadMetadata(self,metaStream):
     sectionRE = QRegExp( u"\{\{(" + '|'.join (
         ['PAGETABLE','CHARCENSUS','WORDCENSUS','BOOKMARKS',
          'NOTES','GOODWORDS','BADWORDS','CURSOR','VERSION',
          'STALECENSUS','NEEDSPELLCHECK','ENCODING', 'DOCHASH', 'MAINDICT'] ) \
                          + u")(.*)\}\}",
         Qt.CaseSensitive)
     metaVersion = 0 # base version
     while not metaStream.atEnd() :
         qline = metaStream.readLine().trimmed()
         if qline.isEmpty() : continue # allow blank lines between sections
         if sectionRE.exactMatch(qline) : # section start
             section = sectionRE.cap(1)
             argument = unicode(sectionRE.cap(2).trimmed())
             endsec = QString(u"{{/" + section + u"}}")
             if section == u"VERSION":
                 if len(argument) != 0 :
                     metaVersion = int(argument)
                 continue # no more data after {{VERSION x }}
             elif section == u"STALECENSUS" :
                 if argument == u"TRUE" :
                     IMC.staleCensus = IMC.staleCensusLoaded
                 continue # no more data after {{STALECENSUS x}}
             elif section == u"NEEDSPELLCHECK" :
                 if argument == u"TRUE" :
                     IMC.needSpellCheck = True
                 continue # no more data after {{NEEDSPELLCHECK x}}
             elif section == u"ENCODING" :
                 IMC.bookSaveEncoding = QString(argument)
                 continue
             elif section == u"MAINDICT" :
                 IMC.bookMainDict = QString(argument)
                 continue
             elif section == u"DOCHASH" :
                 IMC.metaHash = argument
                 continue
             elif section == u"PAGETABLE":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (not qline.isEmpty()):
                     IMC.pageTable.metaStringIn(qline)
                     qline = metaStream.readLine()
                 continue
             elif section == u"CHARCENSUS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (not qline.isEmpty()):
                     # can't just .split the char census, the first
                     # char is the char being counted and it can be a space.
                     str = unicode(qline)
                     parts = str[2:].split(' ')
                     IMC.charCensus.append(QString(str[0]),int(parts[0]),int(parts[1]))
                     qline = metaStream.readLine()
                 continue
             elif section == u"WORDCENSUS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (not qline.isEmpty()):
                     parts = unicode(qline).split(' ')
                     IMC.wordCensus.append(QString(parts[0]),int(parts[1]),int(parts[2]))
                     qline = metaStream.readLine()
                 continue
             elif section == u"BOOKMARKS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (not qline.isEmpty()):
                     parts = unicode(qline).split(' ')
                     tc = QTextCursor(self.document() )
                     tc.setPosition(int(parts[1]))
                     if len(parts) == 3 : # early versions didn't save anchor
                         tc.movePosition(int(parts[2]),QTextCursor.KeepAnchor)
                     self.bookMarkList[int(parts[0])] = tc
                     qline = metaStream.readLine()
                 continue
             elif section == u"NOTES":
                 e = IMC.notesEditor
                 e.setUndoRedoEnabled(False)
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and not metaStream.atEnd():
                     if qline.startsWith(u"\xfffd"): # escaped {{
                         qline.remove(0,1)
                     e.appendPlainText(qline)
                     qline = metaStream.readLine()
                 e.setUndoRedoEnabled(True)
                 continue
             elif section == u"GOODWORDS" :
                 # not going to bother checking for endsec return,
                 # if it isn't that then we will shortly fail anyway
                 w = IMC.goodWordList.load(metaStream,endsec)
                 continue
             elif section == u"BADWORDS" :
                 w = IMC.badWordList.load(metaStream,endsec)
                 continue
             elif section == u"CURSOR" : # restore selection as of save
                 p1p2 = argument.split(' ')
                 tc = QTextCursor(self.document())
                 tc.setPosition(int(p1p2[0]),QTextCursor.MoveAnchor)
                 tc.setPosition(int(p1p2[1]),QTextCursor.KeepAnchor)
                 self.setTextCursor(tc)
             else:
                 # this can't happen; section is text captured by the RE
                 # and we have accounted for all possibilities
                 raise AssertionError, "impossible metadata"
         else: # Non-blank line that doesn't match sectionRE?
             pqMsgs.infoMsg(
                 "Unexpected line in metadata: {0}".format(pqMsgs.trunc(qline,20)),
                     "Metadata may be incomplete, suggest quit")
             break
Exemplo n.º 4
0
 def loadMetadata(self, metaStream):
     sectionRE = QRegExp( u"\{\{(" + '|'.join (
         ['PAGETABLE','CHARCENSUS','WORDCENSUS','BOOKMARKS',
          'NOTES','GOODWORDS','BADWORDS','CURSOR','VERSION',
          'STALECENSUS','NEEDSPELLCHECK','ENCODING', 'DOCHASH', 'MAINDICT'] ) \
                          + u")(.*)\}\}",
         Qt.CaseSensitive)
     metaVersion = 0  # base version
     while not metaStream.atEnd():
         qline = metaStream.readLine().trimmed()
         if qline.isEmpty(): continue  # allow blank lines between sections
         if sectionRE.exactMatch(qline):  # section start
             section = sectionRE.cap(1)
             argument = unicode(sectionRE.cap(2).trimmed())
             endsec = QString(u"{{/" + section + u"}}")
             if section == u"VERSION":
                 if len(argument) != 0:
                     metaVersion = int(argument)
                 continue  # no more data after {{VERSION x }}
             elif section == u"STALECENSUS":
                 if argument == u"TRUE":
                     IMC.staleCensus = IMC.staleCensusLoaded
                 continue  # no more data after {{STALECENSUS x}}
             elif section == u"NEEDSPELLCHECK":
                 if argument == u"TRUE":
                     IMC.needSpellCheck = True
                 continue  # no more data after {{NEEDSPELLCHECK x}}
             elif section == u"ENCODING":
                 IMC.bookSaveEncoding = QString(argument)
                 continue
             elif section == u"MAINDICT":
                 IMC.bookMainDict = QString(argument)
                 continue
             elif section == u"DOCHASH":
                 IMC.metaHash = argument
                 continue
             elif section == u"PAGETABLE":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (
                         not qline.isEmpty()):
                     IMC.pageTable.metaStringIn(qline)
                     qline = metaStream.readLine()
                 continue
             elif section == u"CHARCENSUS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (
                         not qline.isEmpty()):
                     # can't just .split the char census, the first
                     # char is the char being counted and it can be a space.
                     str = unicode(qline)
                     parts = str[2:].split(' ')
                     IMC.charCensus.append(QString(str[0]), int(parts[0]),
                                           int(parts[1]))
                     qline = metaStream.readLine()
                 continue
             elif section == u"WORDCENSUS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (
                         not qline.isEmpty()):
                     parts = unicode(qline).split(' ')
                     IMC.wordCensus.append(QString(parts[0]), int(parts[1]),
                                           int(parts[2]))
                     qline = metaStream.readLine()
                 continue
             elif section == u"BOOKMARKS":
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)) and (
                         not qline.isEmpty()):
                     parts = unicode(qline).split(' ')
                     tc = QTextCursor(self.document())
                     tc.setPosition(int(parts[1]))
                     if len(parts
                            ) == 3:  # early versions didn't save anchor
                         tc.movePosition(int(parts[2]),
                                         QTextCursor.KeepAnchor)
                     self.bookMarkList[int(parts[0])] = tc
                     qline = metaStream.readLine()
                 continue
             elif section == u"NOTES":
                 e = IMC.notesEditor
                 e.setUndoRedoEnabled(False)
                 qline = metaStream.readLine()
                 while (not qline.startsWith(endsec)
                        ) and not metaStream.atEnd():
                     if qline.startsWith(u"\xfffd"):  # escaped {{
                         qline.remove(0, 1)
                     e.appendPlainText(qline)
                     qline = metaStream.readLine()
                 e.setUndoRedoEnabled(True)
                 continue
             elif section == u"GOODWORDS":
                 # not going to bother checking for endsec return,
                 # if it isn't that then we will shortly fail anyway
                 w = IMC.goodWordList.load(metaStream, endsec)
                 continue
             elif section == u"BADWORDS":
                 w = IMC.badWordList.load(metaStream, endsec)
                 continue
             elif section == u"CURSOR":  # restore selection as of save
                 p1p2 = argument.split(' ')
                 tc = QTextCursor(self.document())
                 tc.setPosition(int(p1p2[0]), QTextCursor.MoveAnchor)
                 tc.setPosition(int(p1p2[1]), QTextCursor.KeepAnchor)
                 self.setTextCursor(tc)
             else:
                 # this can't happen; section is text captured by the RE
                 # and we have accounted for all possibilities
                 raise AssertionError, "impossible metadata"
         else:  # Non-blank line that doesn't match sectionRE?
             pqMsgs.infoMsg(
                 "Unexpected line in metadata: {0}".format(
                     pqMsgs.trunc(qline, 20)),
                 "Metadata may be incomplete, suggest quit")
             break