Apply bidi algorithm to the text in the worker

This commit is contained in:
Julian Viereck 2012-09-14 19:34:54 -07:00
parent 8d6565d1a8
commit bd4434a7ea
2 changed files with 15 additions and 9 deletions

View File

@ -507,7 +507,12 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
getTextContent: function partialEvaluatorGetIRQueue(stream, resources, state) { getTextContent: function partialEvaluatorGetIRQueue(stream, resources, state) {
if (!state) { if (!state) {
state = []; var text = [];
var dirs = [];
state = {
text: text,
dirs: dirs
};
} }
var self = this; var self = this;
@ -585,9 +590,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
if ('Form' !== type.name) if ('Form' !== type.name)
break; break;
// Add some spacing between the text here and the text of the
// xForm.
state = this.getTextContent( state = this.getTextContent(
xobj, xobj,
xobj.dict.get('Resources') || resources, xobj.dict.get('Resources') || resources,
@ -596,7 +598,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
break; break;
} // switch } // switch
if (chunk !== '') { if (chunk !== '') {
state.push(chunk); var bidiText = PDFJS.bidi(chunk, -1);
text.push(bidiText.str);
dirs.push(bidiText.ltr);
chunk = ''; chunk = '';
} }

View File

@ -1930,13 +1930,14 @@ var TextLayerBuilder = function textLayerBuilder(textLayerDiv) {
var textDivs = this.textDivs; var textDivs = this.textDivs;
var textContent = this.textContent; var textContent = this.textContent;
var text = textContent.text;
var dirs = textContent.dirs;
for (var i = 0; i < textContent.length; i++) { for (var i = 0; i < text.length; i++) {
var textDiv = textDivs[i]; var textDiv = textDivs[i];
var bidiText = PDFJS.bidi(textContent[i], -1);
textDiv.textContent = bidiText.str; textDiv.textContent = text[i];
textDiv.dir = bidiText.ltr ? 'ltr' : 'rtl'; textDiv.dir = dirs[i] ? 'ltr' : 'rtl';
} }
this.setupRenderLayoutTimer(); this.setupRenderLayoutTimer();