Implement text normalization for page content and queries

This commit is contained in:
Tim van der Meij 2014-06-20 21:49:16 +02:00
parent ec1b58a30a
commit fbfb9458d6

View File

@ -43,6 +43,19 @@ var PDFFindController = {
findTimeout: null,
pdfPageSource: null,
integratedFind: false,
charactersToNormalize: {
'\u2018': '\'', // Left single quotation mark
'\u2019': '\'', // Right single quotation mark
'\u201A': '\'', // Single low-9 quotation mark
'\u201B': '\'', // Single high-reversed-9 quotation mark
'\u201C': '"', // Left double quotation mark
'\u201D': '"', // Right double quotation mark
'\u201E': '"', // Double low-9 quotation mark
'\u201F': '"', // Double high-reversed-9 quotation mark
'\u00BC': '1/4', // Vulgar fraction one quarter
'\u00BD': '1/2', // Vulgar fraction one half
'\u00BE': '3/4' // Vulgar fraction three quarters
},
initialize: function(options) {
if (typeof PDFFindBar === 'undefined' || PDFFindBar === null) {
@ -53,6 +66,10 @@ var PDFFindController = {
this.pdfPageSource = options.pdfPageSource;
this.integratedFind = options.integratedFind;
// Compile the regular expression for text normalization once
var replace = Object.keys(this.charactersToNormalize).join('');
this.normalizationRegex = new RegExp('[' + replace + ']', 'g');
var events = [
'find',
'findagain',
@ -76,9 +93,15 @@ var PDFFindController = {
this.active = false;
},
normalize: function pdfFindControllerNormalize(text) {
return text.replace(this.normalizationRegex, function (ch) {
return PDFFindController.charactersToNormalize[ch];
});
},
calcFindMatch: function(pageIndex) {
var pageContent = this.pageContents[pageIndex];
var query = this.state.query;
var pageContent = this.normalize(this.pageContents[pageIndex]);
var query = this.normalize(this.state.query);
var caseSensitive = this.state.caseSensitive;
var queryLen = query.length;