layout
function layoutLevel(level,time) {
if(level==currentLevel) {
if (bgType == 3) {
bgBox.stopTime = Browser.getTime();
}
return;
}
currentLevel = level;
var nodes = getNodesForLevel(level);
var block = new MFNode();
var nesting = 0;
var i = 0;
var j = 0;
var n = 0;
var x = 0.0;
var y = -1.0; // need proper initialize !
var first = 0;
for(i=0;i<nodes.length;i++) {
if(nodes[i].elementType == 'NESTING' ) {
nesting = nesting + nodes[i].nesting;
if(first==n) {
x = nesting;
}
} else if(nodes[i].linebreak) {
if(first!=n && block[first].justify[0]!='BEGIN') {
var delta = width - x;
if(block[first].justify[0]=='MIDDLE') {
delta = delta / 2;
}
if(delta > 0) {
for(j=first;j<n;j++) {
if (!block[j].absolute) {
block[j].position[0] += delta;
}
}
}
}
//x = 0;
x = nesting;
y = y - nodes[i].height;
first = n;
} else {
if(x > width) {
x = 0;
y = y - block[n-1].height;
first = n;
}
//}
if (!nodes[i].absolute) {
nodes[i].position[0] = x;
nodes[i].position[1] = y;
}
block[n] = nodes[i];
n = n + 1;
if(block[n-1].elementType == 'TEXTELEMENT') {
if((x + block[n-1].width) > width) {
block[n-1] = copyTextElement(block[n-1]);
}
while((x + block[n-1].width) > width) {
var tail = splitLine(block[n-1],width-x);
x = x + block[n-1].width;
if(first!=n && block[first].justify[0]!='BEGIN') {
var delta = width - x;
if(block[first].justify[0]=='MIDDLE') {
delta = delta / 2;
}
if(delta > 0) {
for(j=first;j<n;j++) {
block[j].position[0] += delta;
}
}
}
//x = 0;
x = nesting;
y = y - tail.height;
tail.position[0] = x;
tail.position[1] = y;
block[n] = tail;
first = n;
n = n + 1;
}
}
x = x + block[n-1].width;
}
} //?
if(first!=n && block[first].justify[0]!='BEGIN') {
var delta = width - x;
if(block[first].justify[0]=='MIDDLE') {
delta = delta / 2;
}
if(delta > 0) {
for(j=first;j<n;j++) {
block[j].position[0] += delta;
}
}
}
groupNode.children = block;
}
function getNodesForLevel(level) {
var block = new MFNode();
var i = 0;
var n = 0;
for(i=0;i= level) ) {
if(elements[i].elementType == 'BLOCKELEMENT' ) {
elements[i].showLevel = level;
block[n] = elements[i];
} else {
block[n] = elements[i];
}
n = n + 1;
}
}
return block;
}