bkyk8rc3zvpnsf5inmcqq4n3k98cv6hj-my-site-hyper-literate-git.test.suzanne.soy-0.0.1

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

html.rkt (3102B)


      1 #lang racket/base
      2 
      3 ;; Check that the HTML tags provided by scribble/html/html
      4 ;;  and scribble/html/extra
      5 ;;  match a master list of HTML tags (defined in this file)
      6 ;; Also check that `scribble/html/html` is disjoint from `racket/base`
      7 
      8 (require rackunit racket/set)
      9 
     10 (define (phase0-provides m) ; Symbol -> [Setof Symbol]
     11   (parameterize ([current-namespace (make-base-namespace)])
     12     (dynamic-require m #f)
     13     (let-values ([(e1* e2*) (module->exports m)])
     14       (for*/seteq ([export* (in-list (list e1* e2*))]
     15                    [tag+exp (in-list export*)]
     16                    #:when (or (not (car tag+exp)) (zero? (car tag+exp)))
     17                    [exp (in-list (cdr tag+exp))])
     18         (car exp)))))
     19 
     20 (define (expected-disjoint m1 m2)
     21   (format "'~a' and '~a' should provide disjoint sets of identifiers" m1 m2))
     22 
     23 (define (expected-overlap m1 m2)
     24   (format "expected '~a' and '~a' to provide overlapping sets of identifiers" m1 m2))
     25 
     26 (define html-provides (phase0-provides 'scribble/html/html))
     27 (define extra-provides (phase0-provides 'scribble/html/extra))
     28 (define base-provides (phase0-provides 'racket/base))
     29 
     30 (check-pred set-empty?
     31             (set-intersect html-provides extra-provides)
     32             (expected-disjoint 'scribble/html/html 'scribble/html/extra))
     33 
     34 ;; note: 'racket' and 'scribble/html/html' both provide "link"
     35 (check-pred set-empty?
     36             (set-intersect html-provides base-provides)
     37             (expected-disjoint 'scribble/html/html 'racket/base))
     38 
     39 (check-pred positive?
     40             (set-count (set-intersect extra-provides base-provides))
     41             (expected-overlap 'scribble/html/extra 'racket/base))
     42 
     43 ;; From: https://html.spec.whatwg.org/multipage/#toc-semantics
     44 (define whatwg-master (list->seteq '(
     45   html
     46   head
     47   title
     48   base
     49   link
     50   meta
     51   style
     52   body
     53   article
     54   section
     55   nav
     56   aside
     57   h1 h2 h3 h4 h5 h6
     58   hgroup
     59   header
     60   footer
     61   address
     62   p
     63   hr
     64   pre
     65   blockquote
     66   ol
     67   ul
     68   li
     69   dl
     70   dt
     71   dd
     72   figure
     73   figcaption
     74   main
     75   div
     76   a
     77   em
     78   strong
     79   small
     80   s
     81   cite
     82   q
     83   dfn
     84   abbr
     85   ruby
     86   rt
     87   rp
     88   data
     89   time
     90   code
     91   var
     92   samp
     93   kbd
     94   sub sup
     95   i
     96   b
     97   u
     98   mark
     99   bdi
    100   bdo
    101   span
    102   br
    103   wbr
    104   ins
    105   del
    106   picture
    107   source
    108   img
    109   iframe
    110   embed
    111   object
    112   param
    113   video
    114   audio
    115   track
    116   map
    117   area
    118   table
    119   caption
    120   colgroup
    121   col
    122   tbody
    123   thead
    124   tfoot
    125   tr
    126   td
    127   th
    128   form
    129   label
    130   input
    131   button
    132   select
    133   datalist
    134   optgroup
    135   option
    136   textarea
    137   keygen
    138   output
    139   progress
    140   meter
    141   fieldset
    142   legend
    143   details
    144   summary
    145   menu
    146   menuitem
    147   dialog
    148   script
    149   noscript
    150   template
    151   slot
    152   canvas)))
    153 
    154 (let ([scribble-master (set-union html-provides extra-provides)])
    155   (check-true (subset? whatwg-master scribble-master))
    156   ;; Uncomment to debug scribble provides vs. whatwg master
    157   #;(void
    158     (displayln "checking MASTER vs SCRIBBLE")
    159     (for ([m (in-set whatwg-master)]
    160           #:when (not (set-member? scribble-master m)))
    161       (displayln m))
    162     (newline)
    163     (displayln "checking SCRIBBLE vs MASTER")
    164     (for ([s (in-set scribble-master)]
    165           #:when (not (set-member? whatwg-master s)))
    166       (displayln s))))