scribble-enhanced.rkt (1330B)
1 #lang racket 2 3 (require (for-syntax mutable-match-lambda 4 racket/string 5 racket/match 6 racket/function 7 racket/syntax) 8 scribble-enhanced/with-manual) 9 10 ;; Correctly display xyz⃰, xyzⁿ, xyz⁰, xyz¹, … xyz⁹ 11 (begin-for-syntax 12 (mutable-match-lambda-add-overriding-clause! 13 mutable-match-element-id-transformer 14 #:match-lambda 15 [(? identifier? 16 whole-id 17 (app (compose symbol->string syntax-e) 18 (pregexp 19 #px"^(.*?)(⃰|⁺|[⁰¹²³⁴⁵⁶⁷⁸⁹]+⁺?|[⁰¹²³⁴⁵⁶⁷⁸⁹]*⁻[⁰¹²³⁴⁵⁶⁷⁸⁹]*)$" 20 (list whole base power)))) 21 (define/with-syntax base-id (format-id whole-id "~a" base)) 22 (define/with-syntax power-characters 23 (string-join 24 (map (match-lambda ["⃰" "*"] 25 ["⁺" "+"] 26 ["⁻" "-"] 27 ;["ⁿ" "n"] 28 ["⁰" "0"] ["¹" "1"] ["²" "2"] ["³" "3"] ["⁴" "4"] 29 ["⁵" "5"] ["⁶" "6"] ["⁷" "7"] ["⁸" "8"] ["⁹" "9"]) 30 (map string (string->list power))))) 31 #`(elem (list #,@(if (> (string-length base) 0) #'((racket base-id)) #'()) 32 (superscript power-characters)))]))