mirror of
https://github.com/kotaindah55/extended-markdown-syntax.git
synced 2026-07-22 12:00:23 +00:00
30 lines
No EOL
1.1 KiB
TypeScript
30 lines
No EOL
1.1 KiB
TypeScript
import { ChangeSet } from "@codemirror/state";
|
|
import { ChangedRange } from "src/types";
|
|
|
|
/**
|
|
* [id] Mengakumulasi seluruh range yang dimuat oleh
|
|
* `ChangeSet` untuk menghasilkan `ChangedRange` bila
|
|
* memang terdapat pengubahan teks. `ChangedRange` dapat
|
|
* difungsikan sebagai offset permulaan parsing,
|
|
* menghindari reparsing seluruh dokumen.
|
|
*/
|
|
export function composeChanges(changes: ChangeSet): ChangedRange | null {
|
|
if (changes.empty) {
|
|
// Bila tidak terdapat pengubahan, hasilkan null
|
|
return null;
|
|
}
|
|
let from: number, initTo: number, changedTo: number;
|
|
changes.iterChangedRanges((fromA, toA, fromB, toB) => {
|
|
// [id] Memilih offset terkecil sebagai offset awal pengubahan
|
|
from = from === undefined ? fromA : Math.min(from, fromA);
|
|
// [id] Memilih offset terbesar sebagai offset akhir pengubahan
|
|
initTo = initTo === undefined ? toA : Math.max(initTo, toA);
|
|
changedTo = changedTo === undefined ? toB : Math.max(changedTo, toB);
|
|
}, false);
|
|
return {
|
|
from: from!,
|
|
initTo: initTo!,
|
|
changedTo: changedTo!,
|
|
length: changedTo! - initTo!
|
|
};
|
|
} |