ignore zero-width non-joiner

fixes #179
This commit is contained in:
siikamiika 2019-08-14 22:54:42 +03:00
parent e23d4b9a82
commit 658e5ddff1
4 changed files with 31 additions and 6 deletions

View File

@ -116,7 +116,7 @@ function docSentenceExtract(source, extent) {
const sourceLocal = source.clone();
const position = sourceLocal.setStartOffset(extent);
sourceLocal.setEndOffset(position + extent);
const content = sourceLocal.text();
const {text: content} = sourceLocal.text();
let quoteStack = [];

View File

@ -311,10 +311,18 @@ class Frontend {
async searchTerms(textSource) {
textSource.setEndOffset(this.options.scanning.length);
const {definitions, length} = await apiTermsFind(textSource.text());
const {text, strippedIndices} = textSource.text();
let {definitions, length} = await apiTermsFind(text);
if (definitions.length === 0) {
return false;
}
for (let index of strippedIndices) {
if (index < length) {
length++;
} else {
break;
}
}
textSource.setEndOffset(length);
@ -338,7 +346,8 @@ class Frontend {
async searchKanji(textSource) {
textSource.setEndOffset(1);
const definitions = await apiKanjiFind(textSource.text());
const {text} = textSource.text();
const definitions = await apiKanjiFind(text);
if (definitions.length === 0) {
return false;
}

View File

@ -16,6 +16,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// \u200c (Zero-width non-joiner) appears on Google Docs from Chrome 76 onwards
const IGNORE_TEXT_PATTERN = /\u200c/g;
/*
* TextSourceRange
@ -32,7 +35,13 @@ class TextSourceRange {
}
text() {
return this.content;
let strippedIndices = [];
const text = this.content.replace(IGNORE_TEXT_PATTERN, (match, offset) => {
strippedIndices.push(offset);
return '';
});
return {text, strippedIndices};
}
setEndOffset(length) {
@ -195,7 +204,13 @@ class TextSourceElement {
}
text() {
return this.content;
let strippedIndices = [];
const text = this.content.replace(IGNORE_TEXT_PATTERN, (match, offset) => {
strippedIndices.push(offset);
return '';
});
return {text, strippedIndices};
}
setEndOffset(length) {

View File

@ -83,7 +83,8 @@ class Display {
const textSource = docRangeFromPoint({x: e.clientX, y: e.clientY});
textSource.setEndOffset(this.options.scanning.length);
const {definitions, length} = await apiTermsFind(textSource.text());
const {text} = textSource.text();
const {definitions, length} = await apiTermsFind(text);
if (definitions.length === 0) {
return false;
}