Home / Class/ LevenshteinStringMatcher Class — astro Architecture

LevenshteinStringMatcher Class — astro Architecture

Architecture documentation for the LevenshteinStringMatcher class in levenshtein-string-matcher.ts from the astro codebase.

Entity Profile

Dependency Diagram

graph TD
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506["LevenshteinStringMatcher"]
  280a8d04_e5cc_5816_33cf_7329d7941cdd["levenshtein-string-matcher.ts"]
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|defined in| 280a8d04_e5cc_5816_33cf_7329d7941cdd
  224bb548_9626_6969_98c6_3748a47281dd["a()"]
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| 224bb548_9626_6969_98c6_3748a47281dd
  baf7d8ae_50a7_3b8f_6732_c04b03c46b3f["b()"]
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| baf7d8ae_50a7_3b8f_6732_c04b03c46b3f
  88dd0cf6_678c_56c2_5000_92d6f397ead0["str()"]
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| 88dd0cf6_678c_56c2_5000_92d6f397ead0
  f9b53f04_a92f_c859_70b7_e60149d4ee33["getClosestMatch()"]
  d6c0cbba_560c_49e8_9eb1_ca2ef141e506 -->|method| f9b53f04_a92f_c859_70b7_e60149d4ee33

Relationship Graph

Source Code

packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts lines 5–151

export class LevenshteinStringMatcher implements StringMatcher {
	readonly #peq = new Uint32Array(0x10000);

	#myers_32(a: string, b: string): number {
		const n = a.length;
		const m = b.length;
		const lst = 1 << (n - 1);
		let pv = -1;
		let mv = 0;
		let sc = n;
		let i = n;
		while (i--) {
			this.#peq[a.charCodeAt(i)] |= 1 << i;
		}
		for (i = 0; i < m; i++) {
			let eq = this.#peq[b.charCodeAt(i)];
			const xv = eq | mv;
			eq |= ((eq & pv) + pv) ^ pv;
			mv |= ~(eq | pv);
			pv &= eq;
			if (mv & lst) {
				sc++;
			}
			if (pv & lst) {
				sc--;
			}
			mv = (mv << 1) | 1;
			pv = (pv << 1) | ~(xv | mv);
			mv &= xv;
		}
		i = n;
		while (i--) {
			this.#peq[a.charCodeAt(i)] = 0;
		}
		return sc;
	}

	#myers_x(b: string, a: string): number {
		const n = a.length;
		const m = b.length;
		const mhc = [];
		const phc = [];
		const hsize = Math.ceil(n / 32);
		const vsize = Math.ceil(m / 32);
		for (let i = 0; i < hsize; i++) {
			phc[i] = -1;
			mhc[i] = 0;
		}
		let j = 0;
		for (; j < vsize - 1; j++) {
			let mv = 0;
			let pv = -1;
			const start = j * 32;
			const vlen = Math.min(32, m) + start;
			for (let k = start; k < vlen; k++) {
				this.#peq[b.charCodeAt(k)] |= 1 << k;
			}
			for (let i = 0; i < n; i++) {
				const eq = this.#peq[a.charCodeAt(i)];
				const pb = (phc[(i / 32) | 0] >>> i) & 1;
				const mb = (mhc[(i / 32) | 0] >>> i) & 1;
				const xv = eq | mv;
				const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
				let ph = mv | ~(xh | pv);
				let mh = pv & xh;
				if ((ph >>> 31) ^ pb) {
					phc[(i / 32) | 0] ^= 1 << i;
				}
				if ((mh >>> 31) ^ mb) {
					mhc[(i / 32) | 0] ^= 1 << i;
				}
				ph = (ph << 1) | pb;
				mh = (mh << 1) | mb;
				pv = mh | ~(xv | ph);
				mv = ph & xv;
			}
			for (let k = start; k < vlen; k++) {
				this.#peq[b.charCodeAt(k)] = 0;
			}
		}
		let mv = 0;

Domain

Frequently Asked Questions

What is the LevenshteinStringMatcher class?
LevenshteinStringMatcher is a class in the astro codebase, defined in packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts.
Where is LevenshteinStringMatcher defined?
LevenshteinStringMatcher is defined in packages/astro/src/assets/fonts/infra/levenshtein-string-matcher.ts at line 5.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free