Fixed a bug that creates invalid HTML at Export that lets Abiwords parser crash

This commit is contained in:
Peter 'Pita' Martischka 2011-11-04 03:15:26 +01:00
parent 2cc7dcb751
commit 90ba811bb5

View file

@ -119,8 +119,10 @@ function getHTMLFromAtext(pad, atext)
var taker = Changeset.stringIterator(text); var taker = Changeset.stringIterator(text);
var assem = Changeset.stringAssembler(); var assem = Changeset.stringAssembler();
var openTags = [];
function emitOpenTag(i) function emitOpenTag(i)
{ {
openTags.unshift(i);
assem.append('<'); assem.append('<');
assem.append(tags[i]); assem.append(tags[i]);
assem.append('>'); assem.append('>');
@ -128,10 +130,27 @@ function getHTMLFromAtext(pad, atext)
function emitCloseTag(i) function emitCloseTag(i)
{ {
openTags.shift();
assem.append('</'); assem.append('</');
assem.append(tags[i]); assem.append(tags[i]);
assem.append('>'); assem.append('>');
} }
function orderdCloseTags(tags2close)
{
for(var i=0;i<openTags.length;i++)
{
for(var j=0;j<tags2close.length;j++)
{
if(tags2close[j] == openTags[i])
{
emitCloseTag(tags2close[j]);
i--;
break;
}
}
}
}
var urls = _findURLs(text); var urls = _findURLs(text);
@ -204,18 +223,25 @@ function getHTMLFromAtext(pad, atext)
} }
} }
var tags2close = [];
for (var i = propVals.length - 1; i >= 0; i--) for (var i = propVals.length - 1; i >= 0; i--)
{ {
if (propVals[i] === LEAVE) if (propVals[i] === LEAVE)
{ {
emitCloseTag(i); //emitCloseTag(i);
tags2close.push(i);
propVals[i] = false; propVals[i] = false;
} }
else if (propVals[i] === STAY) else if (propVals[i] === STAY)
{ {
emitCloseTag(i); //emitCloseTag(i);
tags2close.push(i);
} }
} }
orderdCloseTags(tags2close);
for (var i = 0; i < propVals.length; i++) for (var i = 0; i < propVals.length; i++)
{ {
if (propVals[i] === ENTER || propVals[i] === STAY) if (propVals[i] === ENTER || propVals[i] === STAY)
@ -235,14 +261,18 @@ function getHTMLFromAtext(pad, atext)
assem.append(_escapeHTML(s)); assem.append(_escapeHTML(s));
} // end iteration over spans in line } // end iteration over spans in line
var tags2close = [];
for (var i = propVals.length - 1; i >= 0; i--) for (var i = propVals.length - 1; i >= 0; i--)
{ {
if (propVals[i]) if (propVals[i])
{ {
emitCloseTag(i); tags2close.push(i);
propVals[i] = false; propVals[i] = false;
} }
} }
orderdCloseTags(tags2close);
} // end processNextChars } // end processNextChars
if (urls) if (urls)
{ {