www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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)))]))