mirror of
https://github.com/thesephist/monocle.git
synced 2021-07-26 21:13:15 +03:00
perf(ui): Optimizations in regular expressions to highlight search matches
This commit is contained in:
@@ -18,12 +18,13 @@ escapeHTML := s => (
|
||||
EscapeContainer.innerHTML
|
||||
)
|
||||
|
||||
escapeRegExp := s => (
|
||||
re := jsnew(RegExp, [str('[-\/\\^$*+?.()|[\]{}]'), str('g')])
|
||||
bind(s, 'replace')(re, '\\$&')
|
||||
)
|
||||
EscapeRE := jsnew(RegExp, [str('[-\/\\^$*+?.()|[\]{}]'), str('g')])
|
||||
escapeRegExp := s => bind(str(s), 'replace')(EscapeRE, '\\$&')
|
||||
|
||||
` TODO: explain why this is needed `
|
||||
` Ink standard library's std.slice is O(n), which is normally fine because our
|
||||
constant multiplier is pretty small. But when we're doing it for lots of long
|
||||
strings as is the case here, we want to get down to native implementations in
|
||||
the underlying JavaScript engine. `
|
||||
fastSlice := (s, start, end) => bind(str(s), 'substring')(start, end)
|
||||
|
||||
clippedResultsCount := () => (
|
||||
|
||||
@@ -560,7 +560,8 @@ Newline = char(10);
|
||||
querySelector = bind(document, __Ink_String(`querySelector`));
|
||||
EscapeContainer = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`));
|
||||
escapeHTML = s => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(EscapeContainer); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(textContent, s) : (__ink_assgn_trgt.textContent) = s; return __ink_assgn_trgt})(); return (() => {let __ink_acc_trgt = __as_ink_string(EscapeContainer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHTML] || null : (__ink_acc_trgt.innerHTML !== undefined ? __ink_acc_trgt.innerHTML : null)})() })();
|
||||
escapeRegExp = s => (() => { let re; re = jsnew(RegExp, [str(__Ink_String(`[-/\\^$*+?.()|[]{}]`)), str(__Ink_String(`g`))]); return bind(s, __Ink_String(`replace`))(re, __Ink_String(`\\$&`)) })();
|
||||
EscapeRE = jsnew(RegExp, [str(__Ink_String(`[-/\\^$*+?.()|[]{}]`)), str(__Ink_String(`g`))]);
|
||||
escapeRegExp = s => bind(str(s), __Ink_String(`replace`))(EscapeRE, __Ink_String(`\\$&`));
|
||||
fastSlice = (s, start, end) => bind(str(s), __Ink_String(`substring`))(start, end);
|
||||
clippedResultsCount = () => (() => { let ResultHeight; ResultHeight = 32; return floor(((() => { return ((() => {let __ink_acc_trgt = __as_ink_string(window); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHeight] || null : (__ink_acc_trgt.innerHeight !== undefined ? __ink_acc_trgt.innerHeight : null)})() - 96) })() / ResultHeight)) })();
|
||||
zeroFillTo3Digits = s => __ink_match(len(s), [[() => (0), () => (__Ink_String(`000`))], [() => (1), () => (__as_ink_string(__Ink_String(`00`) + s))], [() => (2), () => (__as_ink_string(__Ink_String(`0`) + s))], [() => (__Ink_Empty), () => (s)]]);
|
||||
|
||||
@@ -12,7 +12,8 @@ Newline = char(10);
|
||||
querySelector = bind(document, __Ink_String(`querySelector`));
|
||||
EscapeContainer = bind(document, __Ink_String(`createElement`))(__Ink_String(`div`));
|
||||
escapeHTML = s => (() => { (() => {let __ink_assgn_trgt = __as_ink_string(EscapeContainer); __is_ink_string(__ink_assgn_trgt) ? __ink_assgn_trgt.assign(textContent, s) : (__ink_assgn_trgt.textContent) = s; return __ink_assgn_trgt})(); return (() => {let __ink_acc_trgt = __as_ink_string(EscapeContainer); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHTML] || null : (__ink_acc_trgt.innerHTML !== undefined ? __ink_acc_trgt.innerHTML : null)})() })();
|
||||
escapeRegExp = s => (() => { let re; re = jsnew(RegExp, [str(__Ink_String(`[-/\\^$*+?.()|[]{}]`)), str(__Ink_String(`g`))]); return bind(s, __Ink_String(`replace`))(re, __Ink_String(`\\$&`)) })();
|
||||
EscapeRE = jsnew(RegExp, [str(__Ink_String(`[-/\\^$*+?.()|[]{}]`)), str(__Ink_String(`g`))]);
|
||||
escapeRegExp = s => bind(str(s), __Ink_String(`replace`))(EscapeRE, __Ink_String(`\\$&`));
|
||||
fastSlice = (s, start, end) => bind(str(s), __Ink_String(`substring`))(start, end);
|
||||
clippedResultsCount = () => (() => { let ResultHeight; ResultHeight = 32; return floor(((() => { return ((() => {let __ink_acc_trgt = __as_ink_string(window); return __is_ink_string(__ink_acc_trgt) ? __ink_acc_trgt.valueOf()[innerHeight] || null : (__ink_acc_trgt.innerHeight !== undefined ? __ink_acc_trgt.innerHeight : null)})() - 96) })() / ResultHeight)) })();
|
||||
zeroFillTo3Digits = s => __ink_match(len(s), [[() => (0), () => (__Ink_String(`000`))], [() => (1), () => (__as_ink_string(__Ink_String(`00`) + s))], [() => (2), () => (__as_ink_string(__Ink_String(`0`) + s))], [() => (__Ink_Empty), () => (s)]]);
|
||||
|
||||
Reference in New Issue
Block a user