Compare commits

...

2 commits

Author SHA1 Message Date
Artemis Everfree
23650067ef precompile regexp patterns 2023-03-22 22:42:50 -07:00
Artemis Everfree
2694eb7245 use faster string split 2023-03-22 22:42:44 -07:00
2 changed files with 19 additions and 7 deletions

View file

@ -100,19 +100,29 @@
(define (cardimage-class-updater c)
(string-append c " bw-updated-cardtable-cardimage"))
; precompute wikiurl regex for efficency
(define wikiurl-regex (pregexp (format "^https://(~a)\\.fandom\\.com(/wiki/.*)$" px-wikiname)))
(define attributes-updater
(compose1
; uncollapsing
#;(curry attribute-maybe-update 'class
(λ (class) (string-join (classlist-updater (string-split class " ")) " ")))
(curry attribute-maybe-update 'class class-updater)
; change links to stay on the same wiki
(curry attribute-maybe-update 'href
(λ (href)
((compose1
(λ (href) (regexp-replace #rx"^(/wiki/.*)" href (format "/~a\\1" wikiname)))
(λ (href) (regexp-replace (pregexp (format "^https://(~a)\\.fandom\\.com(/wiki/.*)" px-wikiname)) href "/\\1\\2")))
href)))
(let
; precompute wikiname replacement pattern
([wiki-substitution (format "/~a\\1" wikiname)])
(curry attribute-maybe-update 'href
(λ (href)
((compose1
; ok so these don't actually depend on each other.
; one will match or the other
; also we don't really need regex here.
(λ (href) (regexp-replace #rx"^(/wiki/.*)$" href wiki-substitution))
(λ (href) (regexp-replace wikiurl-regex href "/\\1\\2")))
href))))
; add noreferrer to a.image
(curry u
(λ (v) (and #;(eq? element-type 'a)

View file

@ -190,7 +190,9 @@
'(body "Hey" (& nbsp) (a (@ (href "/"))))))
(define (has-class? name attributes)
(and (member name (string-split (or (get-attribute 'class attributes) "") " ")) #t))
; splitting without specifying separator or splitting on #px"\\s+" makes
; string-split use a faster whitespace-specialized implementation.
(and (member name (string-split (or (get-attribute 'class attributes) "") #px"\\s+")) #t))
(module+ test
(check-true (has-class? "red" '((class "yellow red blue"))))
(check-false (has-class? "red" '((class "yellow blue"))))