39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
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○◯々-〇〻ぁ-ゖゝ-ゞァ-ヺー0-9A-Zヲ-ン\p{Radical}\p{Unified_Ideograph}]+/gimu
|
||
const cleaned = line.replace(isNotJapaneseRegex, '')
|
||
|
||
return Array.from(cleaned).length;
|
||
}
|
||
|
||
export function getCharCount(pages: Page[], currentPage?: number) {
|
||
let charCount = 0;
|
||
let lineCount = 0;
|
||
|
||
if (pages && pages.length > 0) {
|
||
const max = currentPage || pages.length
|
||
|
||
for (let i = 0; i < max; i++) {
|
||
const blocks = pages[i].blocks;
|
||
|
||
blocks.forEach((block) => {
|
||
lineCount += block.lines.length;
|
||
block.lines.forEach((line) => {
|
||
charCount += countChars(line);
|
||
});
|
||
});
|
||
}
|
||
}
|
||
|
||
return { charCount, lineCount };
|
||
} |