Advertisement
KoctrX

Untitled

Nov 26th, 2020
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. combineParagraphs(lines) {
  2.             const scatter = this.scatter;
  3.             return lines.reduce((paragraphsObj, line, index, arr) => {
  4.                 if (index > 0) {
  5.                     const before = arr[index - 1];
  6.                     const after = (arr.length - 1 != index) ? arr[index + 1] : { spaceAfter: 0, lineSpace: 0 };
  7.  
  8.                     const A = before.spaceAfter;
  9.                     const B = line.spaceAfter;
  10.                     const C = after.spaceAfter;
  11.  
  12.                     const AR = before.lineSpace;
  13.                     const BR = line.lineSpace;
  14.                     const CR = after.lineSpace;
  15.  
  16.                     const form = (a, b, s) => {
  17.                         return this.util.scatterDiff(a, b, s || scatter);
  18.                     }
  19.  
  20.                     let f1 = form(B, C) && !form(A, B);
  21.                     let f2 = !form(AR, A) && !form(A, B);
  22.                     let f3 = form(A, B) && form(B, C);
  23.  
  24.                     let f4 = form(A, B);
  25.  
  26.                     const rangeSizeBefore = this.util.likely(before.chars, 'fontSize', { isCeil: true });
  27.                     const rangeSizeCurrent = this.util.likely(line.chars, 'fontSize', { isCeil: true });
  28.  
  29.                     const rangeFontFamilyBef = before.chars[0].font; //this.util.likely(before.chars, 'font');
  30.                     const rangeFontFamilyCur = this.util.likely(line.chars, 'font');
  31.  
  32.                     const isHave = rangeFontFamilyBef && rangeFontFamilyCur && rangeSizeBefore && rangeSizeCurrent;
  33.  
  34.                     const textConfirmed = isHave && rangeFontFamilyBef == rangeFontFamilyCur && rangeSizeBefore == rangeSizeCurrent;
  35.                     const myE = !form(A, AR) && (textConfirmed && !form(BR, CR) && paragraphsObj.arr[paragraphsObj.arr.length - 1].length == 1);
  36.  
  37.                     const ff = (form(A, B) && form(B, C)) || (form(A, B) && paragraphsObj.arr[paragraphsObj.arr.length - 1].length == 1);
  38.                     const beforeLeft = this.util.likely(before.chars, 'blockLeft', { isCeil: true });
  39.                     const currentLeft = this.util.likely(line.chars, 'blockLeft', { isCeil: true });
  40.  
  41.                     // 1. https://i.imgur.com/2vU48bY.png
  42.                     // 2. https://i.imgur.com/c8Ga50m.png
  43.                     const byBlockLeft = line.chars[0].blockLeft > Math.max(...before.chars.map(char => char.charLeft))
  44.                         || before.chars[0].charLeft > Math.max(...line.chars.map(char => char.charLeft));
  45.  
  46.                     if (this.util.likely(before.chars, 'color') != this.util.likely(line.chars, 'color') || byBlockLeft) {
  47.                         paragraphsObj.compare = false;
  48.                     }
  49.  
  50.                     // const currFontDiff = rangeFontFamilyBef == rangeFontFamilyCur;
  51.                     // if(!currFontDiff) {
  52.                     //  paragraphsObj.compare = false;
  53.                     // }
  54.  
  55.                     if ((ff || myE) && A < (this.util.likely(line.chars, 'fontSize', { isCeil: true }) * 1.5) && this.util.likely(line.chars, 'color') == this.util.likely(before.chars, 'color') && !byBlockLeft /* && currFontDiff */) {
  56.                         if (!form(before.chars[0].blockLeft, line.chars[0].blockLeft, 1) && paragraphsObj.arr[paragraphsObj.arr.length - 1].length > 1) {
  57.                             paragraphsObj.compare = false;
  58.                             paragraphsObj.arr.push([line]);
  59.                         } else {
  60.                             paragraphsObj.arr[paragraphsObj.arr.length - 1].push(line);
  61.  
  62.                             if (ff && !myE) {
  63.                                 paragraphsObj.compare = true;
  64.                             }
  65.                         }
  66.                     } else {
  67.                         if (paragraphsObj.compare) {
  68.                             paragraphsObj.arr[paragraphsObj.arr.length - 1].push(line);
  69.                             paragraphsObj.compare = form(AR, BR) && form(CR, BR);
  70.                         } else {
  71.                             paragraphsObj.arr.push([line]);
  72.                         }
  73.                     }
  74.                 } else {
  75.                     paragraphsObj.arr.push([line]);
  76.                 }
  77.  
  78.                 return paragraphsObj;
  79.             }, { arr: [] }).arr;
  80.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement