def expandFrame(self): """Text is inserted into a frame without regard to frame size. Later we expand the frame to fit the text, carrying text to a new frame if necessary.""" numcarries = 0 self.raiseImages() if self.frame != None: while scribus.textOverflows(self.frame, ) > 0: (x, y) = scribus.getPosition(self.frame) (width, height) = scribus.getSize(self.frame) if y + height < self.pageheight - self.bottommargin: scribus.sizeObject(width, height + 1, self.frame) else: fullpage = (y <= self.topmargin and self.columns == 1) if self.buffer != [] and not self.framelinked and numcarries < 4 and not fullpage: numcarries = numcarries + 1 scribus.deselectAll() scribus.deleteText(self.frame) for (content, style) in self.contents: self.styleText(content, style, self.frame) newcontents = self.buffer[:] self.newFrame(columns=self.columns) for (content, style) in newcontents: self.styleText(content, style, self.frame) self.buffer = newcontents[:] else: lastframe = self.frame self.newFrame(columns=self.columns) scribus.linkTextFrames(lastframe, self.frame) self.framelinked = True self.raiseImages()
def expandFrame(self): """Text is inserted into a frame without regard to frame size. Later we expand the frame to fit the text, carrying text to a new frame if necessary.""" numcarries = 0 self.raiseImages() if self.frame != None: while scribus.textOverflows(self.frame,) > 0: (x,y) = scribus.getPosition(self.frame) (width,height) = scribus.getSize(self.frame) if y + height < self.pageheight - self.bottommargin: scribus.sizeObject(width, height + 1, self.frame) else: fullpage = (y <= self.topmargin and self.columns == 1) if self.buffer != [] and not self.framelinked and numcarries < 4 and not fullpage: numcarries = numcarries + 1 scribus.deselectAll() scribus.deleteText(self.frame) for (content,style) in self.contents: self.styleText(content,style,self.frame) newcontents = self.buffer[:] self.newFrame(columns=self.columns) for (content,style) in newcontents: self.styleText(content,style,self.frame) self.buffer = newcontents[:] else: lastframe = self.frame self.newFrame(columns=self.columns) scribus.linkTextFrames(lastframe,self.frame) self.framelinked = True self.raiseImages()
def __init__(self): if not scribus.haveDoc(): scribus.messageBox('Scribus - Script Error', "No document open", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(1) if scribus.selectionCount() == 0: scribus.messageBox('Scribus - Script Error', "There is no object selected.\nPlease select a text frame and try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) if scribus.selectionCount() > 1: scribus.messageBox('Scribus - Script Error', "You have more than one object selected.\nPlease select one text frame and try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) self.textbox = scribus.getSelectedObject() ftype = scribus.getObjectType(self.textbox) if ftype != "TextFrame": scribus.messageBox('Scribus - Script Error', "This is not a textframe. Try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) scribus.deleteText(self.textbox) self.insertPos = 0 self.lastPStyle = "" self.insertText('Radtouren\n', 'Radtouren_titel')
def evalTemplate(self): pos2 = 0 while True: textlen = scribus.getTextLength(self.textbox) if textlen == 0: return scribus.selectText(0, textlen, self.textbox) alltext = scribus.getAllText(self.textbox) # logger.debug("alltext: %s %s", type(alltext), alltext) pos1 = alltext.find("/template", pos2) logger.debug("pos /template=%d", pos1) if pos1 < 0: return pos2 = alltext.find("/endtemplate", pos1) if pos2 < 0: raise Exception("kein /endtemplate nach /template") pos2 += 12 # len("/endtemplate") lines = alltext[pos1:pos2].split('\r') logger.debug("lines:%s %s", type(lines), str(lines)) line0 = lines[0] lineN = lines[-1] # logger.debug("lineN: %s %s", type(lineN), lineN) if lineN != "/endtemplate": raise ValueError( "Die letzte Zeile des templates darf nur /endtemplate enthalten" ) words = line0.split() typ = words[1] if typ != "/tour" and typ != "/termin" and typ != "/toc": raise ValueError( "Zweites Wort nach /template muß /tour, /termin oder /toc sein" ) typ = typ[1:] if typ == "toc": continue sel = words[2] if not sel.startswith("/selektion="): raise ValueError( "Drittes Wort nach /template muß mit /selektion= beginnen") sel = sel[11:].lower() sels = self.tourselections if typ == "tour" else self.terminselections if not sel in sels: raise ValueError("Selektion " + sel + " nicht in " + typ + "selektion") sel = sels[sel] events = self.touren if typ == "tour" else self.termine self.insertPos = pos1 runs = self.makeRuns(pos1, pos2) logger.debug("runs:%s", str(runs)) # can now remove template scribus.selectText(pos1, pos2 - pos1, self.textbox) scribus.deleteText(self.textbox) pos2 = pos1 self.insertPos = pos1 self.evalEvents(sel, events, runs)
def fill_text_placeholders(frame, fields, row): for field in fields: # TODO: currently, if the fields is not found it's left as is, with no warning if field['key'] in row: scribus.insertText(row[field['key']], field['start'] + 1, frame) # delete "key}" scribus.selectText(field['start'] + len(row[field['key']]) + 1, field['end'] - field['start'], frame) scribus.deleteText(frame) # delete "{" scribus.selectText(field['start'], 1, frame) scribus.deleteText(frame)
def evalTocEvents(self, runs, firstPageNr): toc = [] pagenum = scribus.pageCount() foundEvents = 0 for page in range(1, pagenum + 1): scribus.gotoPage(page) self.pageNr = firstPageNr + page - 1 pageitems = scribus.getPageItems() for item in pageitems: if item[1] != 4: continue tbox = item[0] tlen = scribus.getTextLength(tbox) logger.debug("tbox %s length %d", tbox, tlen) if tlen == 0: continue scribus.selectText(0, tlen, tbox) allText = scribus.getText( tbox) # getAllText returns text of complete link chain! z = 0 while True: x = allText.find("_evtid_:", z) if x < 0: break y = allText.find(STX, x) evtId = allText[x + 8:y] z = allText.find(ETX, y) titel = allText[y + 1:z] logger.debug("eventid %s, titel %s on page %d", evtId, titel, self.pageNr) event = self.gui.eventServer.getEventById(evtId, titel) toc.append((self.pageNr, event)) foundEvents += 1 logger.debug("sorting") toc.sort(key=lambda t: t[1].getDatumRaw()) # sortieren nach Datum for (pageNr, event) in toc: self.eventMsg = event.getTitel() + " vom " + event.getDatum()[0] logger.debug("event %s on page %d", self.eventMsg, self.pageNr) self.pageNr = pageNr for run in runs: self.run = run self.evalRun(event) self.insertText("\n", self.run) self.pageNr = None if foundEvents == 0: print("Noch keine Events gefunden") else: # remove template pos1, pos2, tbox = self.toBeDelPosToc scribus.selectText(pos1, pos2 - pos1, tbox) scribus.deleteText(tbox) scribus.redrawAll()
def replaceText(text, code): if text is None or text is u'': logger.warn(".. empty content for elem [%s]", code) text = ' ' l = scribus.getTextLength(code) scribus.selectText(0, l - 1, code) scribus.deleteText(code) scribus.insertText(text, 0, code) l = scribus.getTextLength(code) scribus.selectText(l - 1, 1, code) scribus.deleteText(code)
def change_text(text, item): l = scribus.getTextLength(item) scribus.selectText(0, l, item) fs = scribus.getFontSize(item) f = scribus.getFont(item) scribus.insertText(text, 0, item) l2 = scribus.getTextLength(item) scribus.selectText(0, l2, item) scribus.setFontSize(fs, item) scribus.setFont(f, item) scribus.selectText(l2-l, l, item) scribus.deleteText(item) scribus.deselectAll()
def rmEventIdMarkers(self): pagenum = scribus.pageCount() for page in range(1, pagenum + 1): scribus.gotoPage(page) pageitems = scribus.getPageItems() for item in pageitems: if item[1] != 4: continue tbox = item[0] # frameLinks nonempty only if starten called from same gui if self.frameLinks.get( tbox ) is not None: # i.e. if tbox is not the root of a link chain continue # TODO find out if tbox is a linked frame tlen = scribus.getTextLength(tbox) if tlen == 0: continue scribus.selectText(0, tlen, tbox) allText = scribus.getAllText( tbox) # getAllText returns text of complete link chain! z = 0 xl = [] while True: x = allText.find("_evtid_:", z) if x < 0: break y = allText.find(STX, x) evtId = allText[x + 8:y] z = allText.find(ETX, y) titel = allText[y + 1:z] xl.append((x, z + 1 - x)) for (x, l) in reversed(xl): # the reversed is important! scribus.selectText(x, l, tbox) scribus.deleteText(tbox) scribus.redrawAll()
item = scribus.getSelectedObject() if (scribus.getObjectType(item) != 'TextFrame'): scribus.messageBox('Usage Error', 'You need to select a text frame') sys.exit(2) print(scribus.getTextLength(item)) if scribus.getTextLength(item) > 0: scribus.messageBox('Usage Error', 'The text frame should be empty') sys.exit(2) answer = scribus.valueDialog('Numbered lines', 'Start number, step', '1,1') start, step = answer.split(',') start = int(start) step = int(step) i = start print(scribus.textOverflows(item)) while scribus.textOverflows(item) == 0: if i == start or i % step == 0: scribus.insertText(str(i) + "\n", -1, item) else: scribus.insertText("\n", -1, item) i += 1 length = scribus.getTextLength(item) while scribus.textOverflows(item) != 0: scribus.selectText(length - 2, 1, item) scribus.deleteText(item) length -= 1
scribus.redrawAll() print item scribus.deselectAll() scribus.selectObject(item) n = scribus.getTextLength() print n for i in range(n): scribus.selectText(i, 1) original = scribus.getText() if original not in charsIgnore and len(original) > 0: shuffled = chars.pop(0) if original.isupper(): shuffled = shuffled.upper() scribus.insertText(shuffled, i) scribus.selectText(i + 1, 1) scribus.deleteText() for item in imageFrame: print item scribus.messagebarText("Processing image frame " + item) scribus.redrawAll() imageFile = scribus.getImageFile(item) fileName, fileExtension = os.path.splitext(imageFile) imageFileBlurred = fileName + "_blurred" + fileExtension # TODO: instead of using image magick we should expos scribus' own blur to the scripter if distutils.spawn.find_executable("convert") != "": command = "identify " + imageFile result = os.popen(command).read() if result != "": size = max( result.split(" ")[2].split("x")) # extract max(width, height)
scribus.redrawAll() print item scribus.deselectAll() scribus.selectObject(item) n = scribus.getTextLength() print n for i in range(n) : scribus.selectText(i, 1) original = scribus.getText() if original not in charsIgnore and len(original) > 0: shuffled = chars.pop(0) if original.isupper() : shuffled = shuffled.upper() scribus.insertText(shuffled, i) scribus.selectText(i + 1, 1) scribus.deleteText() for item in imageFrame : print item scribus.messagebarText("Processing image frame "+item) scribus.redrawAll() imageFile = scribus.getImageFile(item) fileName, fileExtension = os.path.splitext(imageFile) imageFileBlurred = fileName+"_blurred"+fileExtension # TODO: instead of using image magick we should expos scribus' own blur to the scripter if distutils.spawn.find_executable("convert") != "" : command = "identify "+imageFile result = os.popen(command).read(); if result != "" : size = max(result.split(" ")[2].split("x")) # extract max(width, height) command = "convert "+imageFile+" -blur 0x"+str(int(size)/50)+" "+imageFileBlurred
def importSocietes(filename, fileCat, iPro): arrLines=[]#liste de lignes du fichier csv, chaque ligne est une liste de champs mapCol={}#table de correspondance entre les champs à importer et les numéros de colonne du fichier csv mapCat={}#table de correspondance entre numéro de catégorie et nom de catégorie nbCat=readSocietes(filename, fileCat, mapCat, arrLines, mapCol) (nbChg, nbPro)=(0,0) numPro=1 while scribus.getTextLength("txtPros%d" % numPro)>0 and numPro<=NB_TXT: numPro+=1 if iPro==1 and scribus.objectExists("txtBureauxChange"): scribus.deleteText("txtBureauxChange") scribus.progressTotal(len(arrLines)) strPro="txtPros%d"%numPro scribus.statusMessage("Remplissage du cadre de texte %s..."%strPro) bFirstPro=True strCat="#" for record in arrLines:#Pour chaque pro # log("nbPro=%d\n"%nbPro) if strCat != record[mapCol["cat"]]:#nouvelle categorie strCat=record[mapCol["cat"]] bNewCat=True else: bNewCat=False nbPro+=1 if nbPro<iPro:#déjà importé à l'exécution précédente continue try: scribus.progressSet(nbPro) if record[mapCol["chg"]]=="True" and scribus.objectExists("txtBureauxChange"): try: nbCarBureau=scribus.getTextLength("txtBureauxChange") appendText(u"● "+toUnicode(record[mapCol["nom"]])+"\n","styleChangeTitre","txtBureauxChange") appendText(toUnicode(record[mapCol["adr"]].replace("\\n"," - "))+"\n","styleChangeAdresse","txtBureauxChange") appendText(record[mapCol["post"]]+" "+toUnicode(record[mapCol["ville"]].upper()+"\n"),"styleChangeAdresse","txtBureauxChange") nbChg+=1 except Exception as ex: scribus.messageBox( "Erreur","Une erreur est survenue sur ce bureau de change: \n%s\n\n%s" %(record, str(ex))) sys.exit() else : nbCarBureau=0 nbCar=scribus.getTextLength(strPro) if bNewCat or bFirstPro: if bFirstPro and not bNewCat: appendText(toUnicode(strCat+" (suite)")+"\n","styleProCatSuite",strPro) else: appendText(toUnicode(strCat)+"\n","styleProCat",strPro) bFirstPro=False appendText(u"● "+toUnicode(record[mapCol["nom"]])+"\n","styleProTitre",strPro) if record[mapCol["chg"]]=="True" : appendText(u"\n","styleProBureau",strPro) #icone du bureau de change en police FontAwesome appendText(processDesc(toUnicode(record[mapCol["desc"]]))+"\n","styleProDesc",strPro) if bLivret: strAdr=toUnicode(record[mapCol["adr"]].replace("\\n"," - "))+" - " + toUnicode(record[mapCol["post"]])+" " strAdr+=processDesc(toUnicode(record[mapCol["ville"]].upper())) if record[mapCol["tel"]].strip(): strAdr+=" ("+toUnicode(record[mapCol["tel"]].strip().replace(" ","\xC2\xA0"))+")\n" #numéro de téléphone insécable else: strAdr+="\n" appendText(strAdr, "styleProAdresse", strPro) else: appendText(toUnicode(record[mapCol["adr"]].replace("\\n"," - "))+"\n","styleProAdresse",strPro) appendText(toUnicode(record[mapCol["post"]])+" "+processDesc(toUnicode(record[mapCol["ville"]]).upper())+"\n","styleProAdresse",strPro) if record[mapCol["tel"]].strip(): appendText(processTelephone(record[mapCol["tel"]])+"\n","styleProAdresse",strPro) if scribus.textOverflows(strPro, nolinks=1): #effacement du paragraphe de pro tronqué et du bureau de change en double scribus.selectText(nbCar, scribus.getTextLength(strPro)-nbCar, strPro) scribus.deleteText(strPro) if nbCarBureau: scribus.selectText(nbCarBureau, scribus.getTextLength("txtBureauxChange")-nbCarBureau, "txtBureauxChange") scribus.deleteText("txtBureauxChange") #log("Cadre rempli : le cadre de texte %s est plein à la ligne %d\n" % (strPro, nbPro)) break except Exception as exc: scribus.messageBox( "Erreur","Une erreur est survenue sur ce professionnel: \n%s\n\n%s" %(record, str(exc))) sys.exit() return (nbChg, nbPro, nbCat)
lattextcolor = scribus.getTextColor(lattextstring) lattextshade = scribus.getTextShade(lattextstring) for row in data: #if i > 0 : #sys.exit(1) #scribus.messageBox("csv2table", row) roseid = row[0] rosenameger = row[1] rosenamelat = row[2] #scribus.messageBox("csv2table", roseid+' '+rosenameger+' ('+rosenamelat+')') #Insert the Right Text into the Right Position #Write ID into ID Field scribus.deleteText(idtextstring) scribus.setText(roseid, idtextstring) scribus.setFont(idfont, idtextstring) scribus.setFontSize(idfonSize, idtextstring) scribus.setTextColor(idtextcolor, idtextstring) scribus.setTextShade(idtextshade, idtextstring) #Write German Name into german Name Field scribus.deleteText(gertextstring) scribus.setText(rosenameger, gertextstring) scribus.setFont(gerfont, gertextstring) scribus.setFontSize(gerfonSize, gertextstring) scribus.setTextColor(gertextcolor, gertextstring) scribus.setTextShade(gertextshade, gertextstring) #Write Latin Name into Latin Name field
x = getX(scribus.currentPage()) headerText = scribus.createText(x, 80, 750, 30) headerUnderline = scribus.createLine(x, 110, 160, 110) bodyText = scribus.createText(x, 120, 750, 1030) scribus.setColumns(4, bodyText) scribus.setColumnGap(10, bodyText) if scribus.getObjectType(bodyText) == "TextFrame": fileName = scribus.fileDialog("Open odt file", 'ODT files (*.odt)') text = removeEmptyStrings(parse(fileName)) header = detag(header(text)) body = body(text) scribus.deleteText(bodyText) scribus.insertText(lines(detag(body))[0], -1, bodyText) scribus.setStyle("first_paragraph", bodyText) for p in lines(detag(body))[1:]: scribus.insertText("\n" + p, -1, bodyText) scribus.setStyle("eot", bodyText) for tag in extractModifiers(body): scribus.selectText(tag['start'], tag['length'], bodyText) if tag['tag'] == "bold": scribus.setFont("Mysl Bold Cyrillic", bodyText) elif tag['tag'] == "italic": scribus.setFont("Mysl Italic Cyrillic", bodyText) else: scribus.setFont("Mysl BoldItalic Cyrillic", bodyText)
scribus.messageBox('Scribus - Usage Error', "This is not a textframe. Try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) sys.exit(2) contents = scribus.getTextLength(textbox) while c <= (contents -1): if ((c + 1) > contents - 1): nextchar = ' ' else: scribus.selectText(c+1, 1, textbox) nextchar = scribus.getText(textbox) scribus.selectText(c, 1, textbox) char = scribus.getText(textbox) if (len(char) != 1): c += 1 continue if ((ord(char) == 34) and (c == 0)): scribus.deleteText(textbox) scribus.insertText(lead_double, c, textbox) elif (ord(char) == 34): if ((prevchar == '.') or (prevchar == ',') or (prevchar == '?') or (prevchar == '!')): scribus.deleteText(textbox) scribus.insertText(follow_double, c, textbox) elif ((ord(prevchar) == 39) and ((nextchar != ' ') and (nextchar != ',') and (nextchar != '.'))): scribus.deleteText(textbox) scribus.insertText(lead_double, c, textbox) elif ((nextchar == '.') or (nextchar == ',')): scribus.deleteText(textbox) scribus.insertText(follow_double, c, textbox) elif ((prevchar == ' ') or ((nextchar != ' ') and (ord(nextchar) != 39))): scribus.deleteText(textbox) scribus.insertText(lead_double, c, textbox)
contents = scribus.getTextLength(textbox) while 1: if ((c == contents) or (c > contents)): break if ((c + 1) > contents - 1): nextchar = ' ' else: scribus.selectText(c + 1, 1, textbox) nextchar = scribus.getText(textbox) scribus.selectText(c, 1, textbox) char = scribus.getText(textbox) if (len(char) != 1): c += 1 continue alpha = random.randint(1, 26) letter = chr(alpha + 96) LETTER = chr(alpha + 64) if ((ord(char) > 96) and (ord(char) < 123)): scribus.deleteText(textbox) scribus.insertText(letter, c, textbox) if ((ord(char) > 64) and (ord(char) < 91)): scribus.deleteText(textbox) scribus.insertText(LETTER, c, textbox) c += 1 contents = scribus.getTextLength(textbox) scribus.setRedraw(1) scribus.docChanged(1) scribus.messageBox("Finished", "That should do it!", icon=0, button1=1)
def handleEnd(self): self.linkType = self.gui.getLinkType() self.gliederung = self.gui.getGliederung() self.includeSub = self.gui.getIncludeSub() self.start = self.gui.getStart() self.end = self.gui.getEnd() pos1, pos2, tbox = self.toBeDelPosParam scribus.selectText(pos1, pos2 - pos1, tbox) scribus.deleteText(tbox) pagenum = scribus.pageCount() for page in range(1, pagenum + 1): scribus.gotoPage(page) pageitems = scribus.getPageItems() for item in pageitems: if item[1] != 4: continue self.textbox = item[0] self.evalTemplate() # hyphenate does not work # pagenum = scribus.pageCount() # for page in range(1, pagenum + 1): # scribus.gotoPage(page) # pageitems = scribus.getPageItems() # for item in pageitems: # if item[1] != 4: # continue # self.textbox = item[0] # b = scribus.hyphenateText(self.textbox) # seems to have no effect! pagenum = scribus.pageCount() for page in range(1, pagenum + 1): scribus.gotoPage(page) pageitems = scribus.getPageItems() for item in pageitems: if item[1] != 4: continue tbox = item[0] tbox2 = tbox while scribus.textOverflows(tbox2): tbox2 = self.createNewPage(tbox2) self.frameLinks[ tbox2] = tbox # frame tbox2 has tbox as root scribus.redrawAll() ausgabedatei = self.ausgabedatei if ausgabedatei is None or ausgabedatei == "": ausgabedatei = "ADFC_" + self.gliederung + ( "_I_" if self.includeSub else "_" ) + self.start + "-" + self.end + "_" + self.linkType[0] + ".sla" try: scribus.saveDocAs(ausgabedatei) except Exception as e: print("Ausgabedatei", ausgabedatei, "konnte nicht geschrieben werden") raise e finally: self.touren = [] self.termine = [] # self.gui.destroy() # self.gui.quit() self.gui.disableStart()