Proper char count implementation

This commit is contained in:
ZXY101
2023-10-03 11:43:23 +02:00
parent 50ea6c49f5
commit aff1566e28
2 changed files with 38 additions and 42 deletions

View File

@@ -21,6 +21,7 @@
import Cropper from './Cropper.svelte'; import Cropper from './Cropper.svelte';
import { page as pageStore } from '$app/stores'; import { page as pageStore } from '$app/stores';
import SettingsButton from './SettingsButton.svelte'; import SettingsButton from './SettingsButton.svelte';
import { getCharCount } from '$lib/util/count-chars';
// TODO: Refactor this whole mess // TODO: Refactor this whole mess
@@ -63,7 +64,6 @@
} }
updateProgress(volume.mokuroData.volume_uuid, clamp(newPage, 1, pages?.length)); updateProgress(volume.mokuroData.volume_uuid, clamp(newPage, 1, pages?.length));
zoomDefault(); zoomDefault();
updateCharacterCount(clamp(newPage, 1, pages?.length));
} }
} }
@@ -111,11 +111,6 @@
afterUpdate(() => { afterUpdate(() => {
zoomDefault(); zoomDefault();
updateCharacterCount(page);
});
onMount(() => {
updateCharacterCount(page);
}); });
function handleShortcuts(event: KeyboardEvent & { currentTarget: EventTarget & Window }) { function handleShortcuts(event: KeyboardEvent & { currentTarget: EventTarget & Window }) {
@@ -151,42 +146,8 @@
} }
} }
let charCount = 0; $: charCount = $settings.charCount ? getCharCount(pages, page) : 0;
$: maxCharCount = getCharCount(pages);
function updateCharacterCount(currentPage: number) {
charCount = 0;
if (pages && pages.length > 0 && $settings.charCount) {
for (let i = 0; i < currentPage; i++) {
const blocks = pages[i].blocks;
blocks.forEach((block) => {
block.lines.forEach((line) => {
charCount += line.length;
});
});
}
}
}
let maxCharCount = 0;
$: pages?.length, getMaxCharCount();
function getMaxCharCount() {
maxCharCount = 0;
if (pages && pages.length > 0) {
for (let i = 0; i < pages.length; i++) {
const blocks = pages[i].blocks;
blocks.forEach((block) => {
block.lines.forEach((line) => {
maxCharCount += line.length;
});
});
}
}
return maxCharCount;
}
let startX = 0; let startX = 0;
let startY = 0; let startY = 0;

View File

@@ -0,0 +1,35 @@
import type { Page } from "$lib/types";
/**
* @license BSD-3-Clause
* Copyright (c) 2023, ッツ Reader Authors
* All rights reserved.
*/
// isNotJapaneseRegex aquired from ttsu reader
// https://github.com/ttu-ttu/ebook-reader/blob/main/apps/web/src/lib/functions/get-character-count.ts
export function countChars(line: string) {
const isNotJapaneseRegex = /[^0-9A-Z-------\p{Radical}\p{Unified_Ideograph}]+/gimu
const cleaned = line.replace(isNotJapaneseRegex, '')
return cleaned.length;
}
export function getCharCount(pages: Page[], currentPage?: number) {
if (pages && pages.length > 0) {
const max = currentPage || pages.length
let charCount = 0;
for (let i = 0; i < max; i++) {
const blocks = pages[i].blocks;
blocks.forEach((block) => {
block.lines.forEach((line) => {
charCount += countChars(line);
});
});
}
return charCount;
}
}