[scribus] while loop in python script crashes scribus

Patrick Wallace mental at mentalware.com
Sat Jan 31 00:25:52 CET 2009


I don't have time to actually test this in Scribus itself, but here's a 
cleaned up version which (should) fix things.
In case the crash is coming from non-unicode text being input, I added a 
correction to avoid that. I've also cleaned up the while loop a bit to 
make it more readable and run faster. Also, we are advised to always 
tell Scribus that our code is utf-8 so that starts the script.

I added a file open check so the script quits when the input text file 
cannot be found and some other little cleanup stuff. Also made the 
horizontal position of the text box into a variable rather than hard-coded.

See if this works any better. <g>

Pat

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# ---------------------------------------------------#
# script to import text file into scribus
#----------------------------------------------------#

import sys
try:
    import scribus

except ImportError:
    print "This script only works from within Scribus"
    sys.exit(1)

#----------------------------------------------------#
# declareer variabelen                               #
#----------------------------------------------------#

VerticalPosition = 100         # y of (x,y) position for text box
HorizontalPosition = 60        # x of (x,y) position for text box
Width = 325.99                 # text box width
Height = 50                    # initial text box height
VerticalMarge = 10             #afstand tussen de tekstboxen
TextFile=''                    # tekst file dat geimporteerd moet worden

Page = 0                     # bladzijde, we beginnen bij 0
Add = ''
OverflowChar = 0             #overflowing characters, we will adjust textbox height until this is 0

#----------------------------------------------------#
# actie                                              #
#----------------------------------------------------#

if scribus.newDoc(scribus.PAPER_A5, (51.02,42.52,42.52,53.86), scribus.PORTRAIT, 1, scribus.UNIT_POINTS, scribus.FACINGPAGES, scribus.FIRSTPAGERIGHT):
    # laad stylen
    try:
        TextFile = open('/home/pat/workspace/scribusTut/test.txt', 'r')
    except:
        print "Cannot open text file\n"
        sys.exit(1)

    # determine how big a text box can be allowed to grow maxBoxHeight)
    pageWidth, pageHeight = scribus.getPageSize()
    topMargin, leftMargin, rightMargin, bottomMargin = scribus.getPageMargins()
    maxBoxHeight = pageHeight - topMargin  - bottomMargin
    
    for line in TextFile:
        
#[c] The following commented out code could be used if text files cannot be trusted to not contain
#[c] trailing white space or if users might break lines arbitrarily, adding paragraph breaks we don't want.
#[c]        
#[c]        line = line.rstrip()                # strip trailing white space plus \n (also \r, I suppose)
#[c]        if len(line) > 0:
#[c]            Add = Add + line + ' '    # add one trailing space so continued lines won't run together
#[c]        else:
#[c]            Add = Add.rstrip()+'\n'    # take away final trailing space & add \n to end this paragraph

        if len(line) > 1:
            Add = Add + unicode(line,'iso-8859-2')    # make sure text is unicode for Scribus
        else:
            #make textbox
            TextBox = scribus.createText(HorizontalPosition, VerticalPosition, Width, Height)
            VerticalPosition=VerticalPosition+VerticalMarge+Height
            
            #vul de textbox
            scribus.setText(Add, TextBox)
            
            #check if alles well
            OverflowChar = scribus.textOverflows(TextBox)
            while OverflowChar > 0:
                Height=Height+100
                if Height > maxBoxHeight:
                    scribus.sizeObject(Width,maxBoxHeight,TextBox)
                    break    # ugly, but we have to stop somehow
                else:
                    scribus.sizeObject(Width,Height,TextBox)
                OverflowChar = scribus.textOverflows(TextBox)
            Add = ''        # reset in case this gets put into a multi-file while loop later on
    TextFile.close()    # clean up after ourselves








More information about the scribus mailing list