From aad74cf6826b3586287db654af225049bc296c86 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 24 Dec 2020 18:32:57 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=83=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F,=20=D0=BE=D0=BF=D1=82?= =?UTF-8?q?=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/share/BookParser.js | 79 +++++++++++--------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/client/components/Reader/share/BookParser.js b/client/components/Reader/share/BookParser.js index b2fffcaf..a18e4507 100644 --- a/client/components/Reader/share/BookParser.js +++ b/client/components/Reader/share/BookParser.js @@ -30,6 +30,15 @@ const defaultSettings = { }, }; +//for splitToSlogi() +const glas = new Set(['а', 'А', 'о', 'О', 'и', 'И', 'е', 'Е', 'ё', 'Ё', 'э', 'Э', 'ы', 'Ы', 'у', 'У', 'ю', 'Ю', 'я', 'Я']); +const soglas = new Set([ + 'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', + 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ч', 'Ц', 'Ш', 'Щ' +]); +const znak = new Set(['ь', 'Ь', 'ъ', 'Ъ', 'й', 'Й']); +const alpha = new Set([...glas, ...soglas, ...znak]); + export default class BookParser { constructor(settings = {}) { this.sets = {}; @@ -704,48 +713,44 @@ export default class BookParser { splitToSlogi(word) { let result = []; - const glas = new Set(['а', 'А', 'о', 'О', 'и', 'И', 'е', 'Е', 'ё', 'Ё', 'э', 'Э', 'ы', 'Ы', 'у', 'У', 'ю', 'Ю', 'я', 'Я']); - const soglas = new Set([ - 'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', - 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ч', 'Ц', 'Ш', 'Щ' - ]); - const znak = new Set(['ь', 'Ь', 'ъ', 'Ъ', 'й', 'Й']); - const alpha = new Set([...glas, ...soglas, ...znak]); - - let slog = ''; - let slogLen = 0; const len = word.length; - word += ' '; - for (let i = 0; i < len; i++) { - slog += word[i]; - if (alpha.has(word[i])) - slogLen++; + if (len > 3) { + let slog = ''; + let slogLen = 0; + word += ' '; + for (let i = 0; i < len; i++) { + slog += word[i]; + if (alpha.has(word[i])) + slogLen++; - if (slogLen > 1 && i < len - 2 && ( - //гласная, а следом не 2 согласные буквы - (glas.has(word[i]) && !( soglas.has(word[i + 1]) && soglas.has(word[i + 2]) ) && - alpha.has(word[i + 1]) && alpha.has(word[i + 2]) - ) || - //предыдущая не согласная буква, текущая согласная, а следом согласная и согласная|гласная буквы - (alpha.has(word[i - 1]) && !soglas.has(word[i - 1]) && soglas.has(word[i]) && soglas.has(word[i + 1]) && - ( glas.has(word[i + 2]) || soglas.has(word[i + 2]) ) && - alpha.has(word[i + 1]) && alpha.has(word[i + 2]) - ) || - //мягкий или твердый знак или Й - (znak.has(word[i]) && alpha.has(word[i + 1]) && alpha.has(word[i + 2])) || - (word[i] == '-') - ) && - //нельзя оставлять окончания на ь, ъ, й - !(znak.has(word[i + 2]) && !alpha.has(word[i + 3])) + if (slogLen > 1 && i < len - 2 && ( + //гласная, а следом не 2 согласные буквы + (glas.has(word[i]) && !( soglas.has(word[i + 1]) && soglas.has(word[i + 2]) ) && + alpha.has(word[i + 1]) && alpha.has(word[i + 2]) + ) || + //предыдущая не согласная буква, текущая согласная, а следом согласная и согласная|гласная буквы + (alpha.has(word[i - 1]) && !soglas.has(word[i - 1]) && soglas.has(word[i]) && soglas.has(word[i + 1]) && + ( glas.has(word[i + 2]) || soglas.has(word[i + 2]) ) && + alpha.has(word[i + 1]) && alpha.has(word[i + 2]) + ) || + //мягкий или твердый знак или Й + (znak.has(word[i]) && alpha.has(word[i + 1]) && alpha.has(word[i + 2])) || + (word[i] == '-') + ) && + //нельзя оставлять окончания на ь, ъ, й + !(znak.has(word[i + 2]) && !alpha.has(word[i + 3])) - ) { - result.push(slog); - slog = ''; - slogLen = 0; + ) { + result.push(slog); + slog = ''; + slogLen = 0; + } } + if (slog) + result.push(slog); + } else { + result.push(word); } - if (slog) - result.push(slog); return result; }