Hi list,<br><br>I am trying to build an automated layout engine to be used in newspaper design. This is actually a school project for me, but thinking of the repetitive and low-intellectual processes in the laying out of newspapers, I thought of sharing such a script could be useful for a lot of people. <br>

Note that the images and titles are excluded here, only the body text with subtitles is counted for focusing on the issue at hand : ) <br>Below is a simplified version of my script, the problem emerges in the 
Estimator class where i try to set the size value of each NewsElement 
instance. The dictionary called &quot;switch&quot; is distinguishing text items and image url&#39;s with a convention i used in the sourceText.<span style="font-family: courier new,monospace;"></span> <br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">class Estimator:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    def __init__(self):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        names = []</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        for n in newsList:</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">            names.append(scribus.createText(doc.pageMargins[0]+doc.colWidth*len(names),doc.pageMargins[2],doc.colWidth,doc.pageSize[1]*doc.defCols))</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">            this = names[-1]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">            scribus.insertText(n.body.data,-1,this)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">            scribus.hyphenateText(this)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">            for s in n.body.styleIndex:</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">                print s[0],s[1],s[2],this</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">                scribus.selectText(s[0],s[1],this)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">                scribus.setStyle(s[2], this)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">            l = scribus.getTextLines(this)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">
            print &#39;lineCount:&#39;, l</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">            n.</span><font style="font-family: courier new,monospace;" face="courier new,monospace">size = l</font><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">class NewsElement:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    def __init__(self):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        self.body = BodyElement(&quot;&quot;)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        self.size = 0</span><br>

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    def appendToBody(self,body,style):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        self.body.append(body,style)</span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">class BodyElement:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    def __init__(self,data):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        self.data = data</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        self.styleIndex = []</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    def append(self,data,style):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        l = len(self.data)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        self.data += data</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        s = [l,len(data),style]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        self.styleIndex.append(s)</span><br style="font-family: courier new,monospace;">

<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def news(data):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    n = NewsElement()</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    newsList.append(n)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">def header(data):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n&#39;+data,&#39;ps_header&#39;)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def first(data):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(data,&#39;ps_first&#39;)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">def para(data):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n&#39;+data,&#39;ps_body&#39;)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def slant(data):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n&#39;+data,&#39;ps_slanted&#39;)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">def question(data):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n+ &#39;+data,&#39;ps_body&#39;)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def answer(data):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n- &#39;+data,&#39;ps_body&#39;)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">def bullet(data):</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    newsList[-1].appendToBody(&#39;\n* &#39;+data,&#39;ps_body&#39;)</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def pas(data):</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    pass</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;"><br>class docBasics:</span><br style="font-family: courier new,monospace;">


<span style="font-family: courier new,monospace;">    def __init__(self):</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.unit = scribus.UNIT_PICAS</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.pageSize = (1080,1584)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.pageMargins = (36,36,60,48)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        
self.contentSize = 
(self.pageSize[0]-self.pageMargins[0]-self.pageMargins[1], 
self.pageSize[1]-self.pageMargins[2]-self.pageMargins[3])</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.columnGap = 12</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.baseLine = 15</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.numPages = 20</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.defCols = 5</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.colWidth = float(self.contentSize[0]-self.columnGap*(self.defCols-1))/self.defCols;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">        self.basePath = &quot;/home/yakup/scribus/AGOS/&quot;</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">switch = {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&quot;?&quot; : news,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&quot;*&quot; : subtitle,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&quot;^&quot; : first,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&quot;&amp;&quot; : para,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&quot;/&quot; : slant,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&quot;+&quot; : question,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&quot;-&quot; : answer,</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">&quot;!&quot; : bullet,</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&quot;&quot; : pas</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">}</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">newsList = []</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">doc = docBasics()<br>
  </span><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">def getTextFromSource():</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">    source = sourceText.splitlines(1)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    for line in source:</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">        switch[line[0]](line[1:-1])</span><br><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">getTextFromSource()</span><br style="font-family: courier new,monospace;">

<span style="font-family: courier new,monospace;">est = Estimator()</span><br><br>With the outcome, the most evident problem is that the setStyle() command in the Estimator class only seems to be working for the first and the last paragraphs, even though the start and count indexes and style names are printed correctly for each item. <br>

The second issue is the getTextLines() method is returning 0, no matter if I put it before or after the styling loop or the hyphenate() command. So I fail to get any estimations for my NewsElements to start the pagination process. <br>

I am using Scribus v1.3.8 on Ubuntu 10.10.<br><br clear="all">Any help is appreciated.<br><br>-- <br>yakup<br>