107 lines
3.6 KiB
HTML
107 lines
3.6 KiB
HTML
<html>
|
|
<head>
|
|
<title>Line breaks after span inlines - Latin1</title>
|
|
</head>
|
|
<body>
|
|
<meta charset=utf-8>
|
|
<div>
|
|
<p>With span inline on first word, Latin1 in second position of second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px"><span>xx</span> xéx</p>
|
|
<p>With span inline on first word, Latin1 in first position of second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px"><span>xx</span> éxx</p>
|
|
<p>With span inline on first word, no Latin1 in second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px"><span>xx</span> xxx</p>
|
|
<p>Without span, Latin1 in second position of second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px">xx xéx</p>
|
|
<p>Without span, Latin1 in first position of second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px">xx éxx</p>
|
|
<p>Without span, no Latin1 in second word.</p>
|
|
<p style="font-family:courier; font-size:15px; width: 25px">xx xxx</p>
|
|
</div>
|
|
<div><pre id=results></pre></div>
|
|
<script>
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
function mergeRect(rects, rect) {
|
|
var newRects = [];
|
|
if (!rects.length)
|
|
newRects.push(rect);
|
|
else {
|
|
for (var i = 0; i < rects.length; ++i) {
|
|
var r = rects[i];
|
|
if (!rect)
|
|
newRects.push(r);
|
|
else if (rect.top < r.top) {
|
|
newRects.push(rect);
|
|
newRects.push(r);
|
|
rect = null;
|
|
} else if (rect.top == r.top) {
|
|
if (rect.left + rect.width > r.left + r.width)
|
|
r.width = rect.left + rect.width - r.left;
|
|
newRects.push(r);
|
|
rect = null;
|
|
} else
|
|
newRects.push(r);
|
|
}
|
|
if (rect)
|
|
newRects.push(rect);
|
|
}
|
|
return newRects;
|
|
}
|
|
|
|
function mergeRects(rects, newRects) {
|
|
for (var i = 0; i < newRects.length; ++i)
|
|
rects = mergeRect(rects, newRects[i]);
|
|
return rects;
|
|
}
|
|
|
|
function getLineRects(paragraphNumber) {
|
|
var range = document.createRange();
|
|
var paragraphs = document.getElementsByTagName("p");
|
|
var p = paragraphs[paragraphNumber];
|
|
var rects = [];
|
|
for (var i = 0; i < p.childNodes.length; ++i) {
|
|
range.setStart(p, i);
|
|
range.setEnd(p, i + 1);
|
|
rects = mergeRects(rects, range.getClientRects());
|
|
}
|
|
return rects;
|
|
}
|
|
|
|
function appendResults(results, newResults) {
|
|
if (newResults.length) {
|
|
if (results.length)
|
|
results += '\n'
|
|
results += newResults;
|
|
}
|
|
return results;
|
|
}
|
|
|
|
function compareParagraphLineRects(paragraphNumber1, paragraphNumber2, results) {
|
|
var rects1 = getLineRects(paragraphNumber1);
|
|
var rects2 = getLineRects(paragraphNumber2);
|
|
if (rects1.length != rects2.length)
|
|
results = appendResults(results, 'FAIL: different number of lines, got ' + rects1.length + ', expected ' + rects2.length);
|
|
else {
|
|
for (var i = 0; i < rects1.length; ++i) {
|
|
if (rects2[i].width != rects1[i].width) {
|
|
results = appendResults(results,
|
|
'FAIL: para[' + paragraphNumber1 + '] line[' + i + '] width differs from para[' + paragraphNumber2 + '] line[' + i + ']' +
|
|
', got ' + rects1[i].width + ', expected ' + rects2[i].width);
|
|
}
|
|
}
|
|
}
|
|
return results;
|
|
}
|
|
|
|
var results = '';
|
|
for (var i = 0; i < 3; i++ )
|
|
results = compareParagraphLineRects(i*2 + 1, i*2 + 1 + 6, results);
|
|
if (!results.length)
|
|
results = 'PASS';
|
|
document.getElementById("results").innerText = results;
|
|
</script>
|
|
</body>
|
|
</html>
|