◊(Local Yarn Code "Hex Artifact Content")

Artifact ca2f5449b7ba89b46ba0b92374ddbad336fe86e8a96707452e998fbaf4810968:


0000: 23 6c 61 6e 67 20 73 63 72 69 62 62 6c 65 2f 6d  #lang scribble/m
0010: 61 6e 75 61 6c 0a 0a 40 3b 20 53 50 44 58 2d 4c  anual..@; SPDX-L
0020: 69 63 65 6e 73 65 2d 49 64 65 6e 74 69 66 69 65  icense-Identifie
0030: 72 3a 20 42 6c 75 65 4f 61 6b 2d 31 2e 30 2e 30  r: BlueOak-1.0.0
0040: 0a 40 3b 20 54 68 69 73 20 66 69 6c 65 20 69 73  .@; This file is
0050: 20 6c 69 63 65 6e 73 65 64 20 75 6e 64 65 72 20   licensed under 
0060: 74 68 65 20 42 6c 75 65 20 4f 61 6b 20 4d 6f 64  the Blue Oak Mod
0070: 65 6c 20 4c 69 63 65 6e 73 65 20 31 2e 30 2e 30  el License 1.0.0
0080: 2e 0a 0a 40 28 72 65 71 75 69 72 65 20 22 73 63  ...@(require "sc
0090: 72 69 62 62 6c 65 2d 68 65 6c 70 65 72 73 2e 72  ribble-helpers.r
00a0: 6b 74 22 29 0a 0a 40 28 72 65 71 75 69 72 65 20  kt")..@(require 
00b0: 28 66 6f 72 2d 6c 61 62 65 6c 20 22 2e 2e 2f 70  (for-label "../p
00c0: 6f 6c 6c 65 6e 2e 72 6b 74 22 0a 20 20 20 20 20  ollen.rkt".     
00d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00e0: 22 2e 2e 2f 64 75 73 74 2e 72 6b 74 22 0a 20 20  "../dust.rkt".  
00f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0100: 20 20 20 22 2e 2e 2f 73 6e 69 70 70 65 74 73 2d     "../snippets-
0110: 68 74 6d 6c 2e 72 6b 74 22 0a 20 20 20 20 20 20  html.rkt".      
0120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
0130: 61 63 6b 65 74 2f 62 61 73 65 0a 20 20 20 20 20  acket/base.     
0140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0150: 72 61 63 6b 65 74 2f 63 6f 6e 74 72 61 63 74 0a  racket/contract.
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 72 61 63 6b 65 74 2f 73 74 72 69       racket/stri
0180: 6e 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ng.             
0190: 20 20 20 20 20 20 20 20 70 6f 6c 6c 65 6e 2f 74          pollen/t
01a0: 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 20 20 20  emplate.        
01b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 6c               pol
01c0: 6c 65 6e 2f 70 61 67 65 74 72 65 65 0a 20 20 20  len/pagetree.   
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
01e0: 20 20 74 78 65 78 70 72 0a 20 20 20 20 20 20 20    txexpr.       
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
0200: 67 61 72 2f 63 6f 65 72 63 65 29 29 0a 0a 40 74  gar/coerce))..@t
0210: 69 74 6c 65 7b 40 66 69 6c 65 70 61 74 68 7b 73  itle{@filepath{s
0220: 6e 69 70 70 65 74 73 2d 68 74 6d 6c 2e 72 6b 74  nippets-html.rkt
0230: 7d 7d 0a 0a 40 64 65 66 6d 6f 64 75 6c 65 5b 22  }}..@defmodule["
0240: 73 6e 69 70 70 65 74 73 2d 68 74 6d 6c 2e 72 6b  snippets-html.rk
0250: 74 22 20 23 3a 70 61 63 6b 61 67 65 73 20 28 29  t" #:packages ()
0260: 5d 0a 0a 45 61 63 68 20 e2 80 9c 73 6e 69 70 70  ]..Each ...snipp
0270: 65 74 e2 80 9d 20 6d 6f 64 75 6c 65 20 70 72 6f  et... module pro
0280: 76 69 64 65 73 20 61 6c 6c 20 74 68 65 20 64 6f  vides all the do
0290: 63 75 6d 65 6e 74 2d 20 61 6e 64 20 61 72 74 69  cument- and arti
02a0: 63 6c 65 2d 6c 65 76 65 6c 20 62 6c 6f 63 6b 73  cle-level blocks
02b0: 20 6f 66 20 73 74 72 75 63 74 75 72 61 6c 20 6d   of structural m
02c0: 61 72 6b 75 70 0a 6e 65 63 65 73 73 61 72 79 20  arkup.necessary 
02d0: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
02e0: 20 74 61 72 67 65 74 20 6f 75 74 70 75 74 20 66   target output f
02f0: 6f 72 6d 61 74 3b 20 74 68 69 73 20 6f 6e 65 20  ormat; this one 
0300: 69 73 20 66 6f 72 20 48 54 4d 4c 2e 20 54 68 65  is for HTML. The
0310: 20 69 64 65 61 20 69 73 20 74 68 61 74 20 61 6e   idea is that an
0320: 79 20 62 6c 6f 63 6b 20 6f 66 0a 6d 61 72 6b 75  y block of.marku
0330: 70 20 74 68 61 74 20 6d 69 67 68 74 20 62 65 20  p that might be 
0340: 72 65 75 73 65 64 20 61 63 72 6f 73 73 20 6d 6f  reused across mo
0350: 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 65 6d 70  re than one temp
0360: 6c 61 74 65 20 73 68 6f 75 6c 64 20 62 65 20 61  late should be a
0370: 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 54 68 65 20   function...The 
0380: 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 74 68 65  functions in the
0390: 20 73 6e 69 70 70 65 74 73 20 6d 6f 64 75 6c 65   snippets module
03a0: 73 20 66 6f 6c 6c 6f 77 20 74 77 6f 20 63 6f 6e  s follow two con
03b0: 76 65 6e 74 69 6f 6e 73 20 69 6e 20 74 68 69 73  ventions in this
03c0: 20 70 72 6f 6a 65 63 74 3a 0a 0a 40 69 74 65 6d   project:..@item
03d0: 6c 69 73 74 5b 0a 20 20 40 69 74 65 6d 7b 46 75  list[.  @item{Fu
03e0: 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 72 65 74  nctions that ret
03f0: 75 72 6e 20 73 74 72 69 6e 67 73 20 6f 66 20 48  urn strings of H
0400: 54 4d 4c 20 68 61 76 65 20 74 68 65 20 70 72 65  TML have the pre
0410: 66 69 78 20 40 74 74 7b 68 74 6d 6c 24 2d 7d 2e  fix @tt{html$-}.
0420: 7d 0a 20 20 40 69 74 65 6d 7b 53 75 63 68 20 66  }.  @item{Such f
0430: 75 6e 63 74 69 6f 6e 73 20 64 6f 20 6e 6f 74 20  unctions do not 
0440: 64 6f 20 61 6e 79 20 70 61 72 73 69 6e 67 20 6f  do any parsing o
0450: 72 20 64 65 73 74 72 75 63 74 75 72 69 6e 67 20  r destructuring 
0460: 6f 66 20 63 6f 6d 70 6c 65 78 20 6f 62 6a 65 63  of complex objec
0470: 74 73 3b 20 65 76 65 72 79 20 73 65 70 61 72 61  ts; every separa
0480: 74 65 0a 20 20 70 69 65 63 65 20 74 68 61 74 20  te.  piece that 
0490: 77 69 6c 6c 20 62 65 20 69 6e 73 65 72 74 65 64  will be inserted
04a0: 20 69 6e 74 6f 20 74 68 65 20 74 65 6d 70 6c 61   into the templa
04b0: 74 65 20 69 73 20 70 61 73 73 65 64 20 69 6e 20  te is passed in 
04c0: 61 73 20 61 20 73 65 70 61 72 61 74 65 20 61 72  as a separate ar
04d0: 67 75 6d 65 6e 74 2e 20 54 68 69 73 20 6d 61 6b  gument. This mak
04e0: 65 73 20 69 74 0a 20 20 68 61 72 64 65 72 20 74  es it.  harder t
04f0: 6f 20 63 68 61 6e 67 65 20 74 68 65 20 73 63 6f  o change the sco
0500: 70 65 20 6f 66 20 77 68 61 74 20 61 20 73 6e 69  pe of what a sni
0510: 70 70 65 74 20 64 6f 65 73 2c 20 62 75 74 20 6d  ppet does, but m
0520: 61 6b 65 73 20 74 68 69 6e 67 73 20 66 61 73 74  akes things fast
0530: 65 72 20 73 69 6e 63 65 20 61 6c 6c 20 74 68 65  er since all the
0540: 20 70 61 72 73 69 6e 67 0a 20 20 63 61 6e 20 68   parsing.  can h
0550: 61 70 70 65 6e 20 69 6e 20 6f 6e 65 20 70 6c 61  appen in one pla
0560: 63 65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 73  ce, before the s
0570: 6e 69 70 70 65 74 20 66 75 6e 63 74 69 6f 6e 73  nippet functions
0580: 20 61 72 65 20 63 61 6c 6c 65 64 2e 7d 20 5d 0a   are called.} ].
0590: 0a 40 73 65 63 74 69 6f 6e 7b 55 73 69 6e 67 20  .@section{Using 
05a0: 40 74 74 7b 70 6f 6c 6c 65 6e 2f 6d 6f 64 65 7d  @tt{pollen/mode}
05b0: 7d 0a 0a 49 74 e2 80 99 73 20 77 6f 72 74 68 20  }..It...s worth 
05c0: 6c 6f 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 73  looking at the s
05d0: 6f 75 72 63 65 20 66 6f 72 20 74 68 69 73 20 66  ource for this f
05e0: 69 6c 65 20 74 6f 20 73 65 65 20 68 6f 77 20 40  ile to see how @
05f0: 72 61 63 6b 65 74 6d 6f 64 6e 61 6d 65 5b 70 6f  racketmodname[po
0600: 6c 6c 65 6e 2f 6d 6f 64 65 5d 20 63 61 6e 20 62  llen/mode] can b
0610: 65 20 75 73 65 64 20 74 6f 0a 6d 61 6b 65 20 69  e used to.make i
0620: 74 20 65 61 73 79 20 74 6f 20 77 72 69 74 65 20  t easy to write 
0630: e2 80 9c 6d 69 6e 69 2d 74 65 6d 70 6c 61 74 65  ...mini-template
0640: e2 80 9d 20 66 75 6e 63 74 69 6f 6e 73 3a 0a 0a  ... functions:..
0650: 40 63 6f 64 65 62 6c 6f 63 6b 7b 0a 23 6c 61 6e  @codeblock{.#lan
0660: 67 20 70 6f 6c 6c 65 6e 2f 6d 6f 64 65 20 72 61  g pollen/mode ra
0670: 63 6b 65 74 2f 62 61 73 65 0a 0a 28 64 65 66 69  cket/base..(defi
0680: 6e 65 20 28 68 74 6d 6c 24 2d 6d 79 2d 61 72 74  ne (html$-my-art
0690: 69 63 6c 65 20 74 69 74 6c 65 20 62 6f 64 79 2d  icle title body-
06a0: 74 78 29 0a 20 20 e2 97 8a 73 74 72 69 6e 67 2d  tx).  ...string-
06b0: 61 70 70 65 6e 64 7b 0a 20 20 20 20 3c 70 3e 3c  append{.    <p><
06c0: 62 3e e2 97 8a 7c 74 69 74 6c 65 7c 3c 2f 62 3e  b>...|title|</b>
06d0: 3c 70 3e 0a 20 20 20 20 e2 97 8a 28 2d 3e 68 74  <p>.    ...(->ht
06e0: 6d 6c 20 62 6f 64 79 2d 74 78 29 0a 20 20 7d 29  ml body-tx).  })
06f0: 0a 7d 0a 0a 40 73 65 63 74 69 6f 6e 7b 48 54 4d  .}..@section{HTM
0700: 4c 20 53 6e 69 70 70 65 74 20 66 75 6e 63 74 69  L Snippet functi
0710: 6f 6e 73 7d 0a 0a 40 64 65 66 70 72 6f 63 5b 28  ons}..@defproc[(
0720: 68 74 6d 6c 24 2d 70 61 67 65 2d 68 65 61 64 20  html$-page-head 
0730: 5b 74 69 74 6c 65 20 28 6f 72 2f 63 20 73 74 72  [title (or/c str
0740: 69 6e 67 3f 20 23 66 29 20 23 66 5d 20 5b 63 6c  ing? #f) #f] [cl
0750: 6f 73 65 2d 68 65 61 64 3f 20 62 6f 6f 6c 65 61  ose-head? boolea
0760: 6e 3f 20 23 74 5d 29 20 6e 6f 6e 2d 65 6d 70 74  n? #t]) non-empt
0770: 79 2d 73 74 72 69 6e 67 3f 5d 0a 0a 52 65 74 75  y-string?]..Retu
0780: 72 6e 73 20 74 68 65 20 40 74 74 7b 3c 68 65 61  rns the @tt{<hea
0790: 64 3e 7d 20 73 65 63 74 69 6f 6e 20 6f 66 20 61  d>} section of a
07a0: 6e 20 48 54 4d 4c 20 64 6f 63 75 6d 65 6e 74 2e  n HTML document.
07b0: 20 0a 0a 49 66 20 40 72 61 63 6b 65 74 5b 5f 74   ..If @racket[_t
07c0: 69 74 6c 65 5d 20 69 73 20 61 20 73 74 72 69 6e  itle] is a strin
07d0: 67 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65  g it will be use
07e0: 64 20 69 6e 73 69 64 65 20 74 68 65 20 40 74 74  d inside the @tt
07f0: 7b 3c 74 69 74 6c 65 3e 7d 20 74 61 67 2e 0a 0a  {<title>} tag...
0800: 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 69  If you want to i
0810: 6e 63 6c 75 64 65 20 61 64 64 69 74 69 6f 6e 61  nclude additiona
0820: 6c 20 73 74 75 66 66 20 69 6e 73 69 64 65 20 74  l stuff inside t
0830: 68 65 20 40 74 74 7b 3c 68 65 61 64 3e 7d 2c 20  he @tt{<head>}, 
0840: 79 6f 75 20 63 61 6e 20 73 65 74 20 40 72 61 63  you can set @rac
0850: 6b 65 74 5b 5f 63 6c 6f 73 65 2d 68 65 61 64 3f  ket[_close-head?
0860: 5d 20 74 6f 0a 40 72 61 63 6b 65 74 5b 23 66 5d  ] to.@racket[#f]
0870: 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 20 66   to prevent it f
0880: 72 6f 6d 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  rom including th
0890: 65 20 63 6c 6f 73 69 6e 67 20 40 74 74 7b 3c 2f  e closing @tt{</
08a0: 68 65 61 64 3e 7d 20 74 61 67 20 28 79 6f 75 e2  head>} tag (you.
08b0: 80 99 6c 6c 20 68 61 76 65 20 74 6f 20 61 64 64  ..ll have to add
08c0: 20 69 74 0a 79 6f 75 72 73 65 6c 66 29 2e 0a 0a   it.yourself)...
08d0: 40 64 65 66 70 72 6f 63 5b 28 68 74 6d 6c 24 2d  @defproc[(html$-
08e0: 70 61 67 65 2d 62 6f 64 79 2d 6f 70 65 6e 20 5b  page-body-open [
08f0: 62 6f 64 79 2d 63 6c 61 73 73 20 73 74 72 69 6e  body-class strin
0900: 67 3f 20 22 22 5d 29 20 6e 6f 6e 2d 65 6d 70 74  g? ""]) non-empt
0910: 79 2d 73 74 72 69 6e 67 3f 5d 0a 0a 52 65 74 75  y-string?]..Retu
0920: 72 6e 73 20 74 68 65 20 6f 70 65 6e 69 6e 67 20  rns the opening 
0930: 40 74 74 7b 3c 62 6f 64 79 3e 7d 20 61 6e 64 20  @tt{<body>} and 
0940: 40 74 74 7b 3c 6d 61 69 6e 3e 7d 20 74 61 67 73  @tt{<main>} tags
0950: 20 61 6e 64 20 65 6c 65 6d 65 6e 74 73 20 74 68   and elements th
0960: 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  at immediately f
0970: 6f 6c 6c 6f 77 2c 20 73 75 63 68 20 61 73 0a 73  ollow, such as.s
0980: 69 74 65 20 68 65 61 64 65 72 2c 20 6c 6f 67 6f  ite header, logo
0990: 20 61 6e 64 20 6e 61 76 69 67 61 74 69 6f 6e 2e   and navigation.
09a0: 0a 0a 49 66 20 40 72 61 63 6b 65 74 5b 5f 62 6f  ..If @racket[_bo
09b0: 64 79 2d 63 6c 61 73 73 5d 20 69 73 20 61 20 6e  dy-class] is a n
09c0: 6f 6e 2d 65 6d 70 74 79 20 73 74 72 69 6e 67 2c  on-empty string,
09d0: 20 69 74 73 20 63 6f 6e 74 65 6e 74 73 20 77 69   its contents wi
09e0: 6c 6c 20 62 65 20 69 6e 63 6c 75 64 65 64 20 69  ll be included i
09f0: 6e 20 74 68 65 20 40 74 74 7b 63 6c 61 73 73 7d  n the @tt{class}
0a00: 0a 61 74 74 72 69 62 75 74 65 20 6f 66 20 74 68  .attribute of th
0a10: 65 20 40 74 74 7b 3c 62 6f 64 79 3e 7d 20 74 61  e @tt{<body>} ta
0a20: 67 2e 0a 0a 40 64 65 66 70 72 6f 63 5b 28 68 74  g...@defproc[(ht
0a30: 6d 6c 24 2d 61 72 74 69 63 6c 65 2d 6f 70 65 6e  ml$-article-open
0a40: 20 5b 70 61 67 65 6e 6f 64 65 20 70 61 67 65 6e   [pagenode pagen
0a50: 6f 64 65 3f 5d 20 0a 20 20 20 20 20 20 20 20 20  ode?] .         
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 20 20 20 20 5b 74 69 74 6c 65 2d 73 70 65 63 69      [title-speci
0a80: 66 69 65 64 2d 69 6e 2d 64 6f 63 3f 20 62 6f 6f  fied-in-doc? boo
0a90: 6c 65 61 6e 3f 5d 20 0a 20 20 20 20 20 20 20 20  lean?] .        
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 5b 74 69 74 6c 65 20 74 78 65 78       [title txex
0ac0: 70 72 3f 5d 20 0a 20 20 20 20 20 20 20 20 20 20  pr?] .          
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 5b 70 75 62 64 61 74 65 20 73 74 72 69     [pubdate stri
0af0: 6e 67 3f 5d 29 0a 20 20 20 20 20 20 20 20 20 20  ng?]).          
0b00: 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72 69 6e 67  non-empty-string
0b10: 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 74 68 65 20  ?]..Returns the 
0b20: 6f 70 65 6e 69 6e 67 20 40 74 74 7b 3c 61 72 74  opening @tt{<art
0b30: 69 63 6c 65 3e 7d 20 74 61 67 20 61 6e 64 20 65  icle>} tag and e
0b40: 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 69 6d 6d  lements that imm
0b50: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 3a  ediately follow:
0b60: 20 70 65 72 6d 6c 69 6e 6b 2c 20 70 75 62 6c 69   permlink, publi
0b70: 73 68 20 64 61 74 65 2c 0a 61 6e 64 20 6f 70 65  sh date,.and ope
0b80: 6e 69 6e 67 20 40 74 74 7b 3c 73 65 63 74 69 6f  ning @tt{<sectio
0b90: 6e 3e 7d 20 74 61 67 2e 0a 0a 54 68 65 20 40 72  n>} tag...The @r
0ba0: 61 63 6b 65 74 5b 5f 74 69 74 6c 65 2d 73 70 65  acket[_title-spe
0bb0: 63 69 66 69 65 64 2d 69 6e 2d 64 6f 63 3f 5d 20  cified-in-doc?] 
0bc0: 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65  form changes the
0bd0: 20 48 54 4d 4c 20 6d 61 72 6b 75 70 20 73 74 72   HTML markup str
0be0: 75 63 74 75 72 65 20 75 73 65 64 2e 0a 0a 40 64  ucture used...@d
0bf0: 65 66 70 72 6f 63 5b 28 68 74 6d 6c 24 2d 61 72  efproc[(html$-ar
0c00: 74 69 63 6c 65 2d 63 6c 6f 73 65 20 5b 66 6f 6f  ticle-close [foo
0c10: 74 65 72 74 65 78 74 20 73 74 72 69 6e 67 3f 5d  tertext string?]
0c20: 29 20 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72 69  ) non-empty-stri
0c30: 6e 67 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 61 20  ng?]..Returns a 
0c40: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
0c50: 67 20 61 20 63 6c 6f 73 69 6e 67 20 40 74 74 7b  g a closing @tt{
0c60: 3c 73 65 63 74 69 6f 6e 3e 7d 20 74 61 67 2c 20  <section>} tag, 
0c70: 61 20 40 74 74 7b 3c 66 6f 6f 74 65 72 3e 7d 20  a @tt{<footer>} 
0c80: 65 6c 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e 69  element containi
0c90: 6e 67 0a 40 72 61 63 6b 65 74 5b 5f 66 6f 6f 74  ng.@racket[_foot
0ca0: 65 72 74 65 78 74 5d 2c 20 61 6e 64 20 61 20 63  ertext], and a c
0cb0: 6c 6f 73 69 6e 67 20 40 74 74 7b 3c 61 72 74 69  losing @tt{<arti
0cc0: 63 6c 65 3e 7d 20 74 61 67 2e 20 49 66 20 40 72  cle>} tag. If @r
0cd0: 61 63 6b 65 74 5b 5f 66 6f 6f 74 65 72 74 65 78  acket[_footertex
0ce0: 74 5d 20 69 73 20 65 6d 70 74 79 2c 20 74 68 65  t] is empty, the
0cf0: 0a 40 74 74 7b 3c 66 6f 6f 74 65 72 3e 7d 20 65  .@tt{<footer>} e
0d00: 6c 65 6d 65 6e 74 20 77 69 6c 6c 20 62 65 20 6f  lement will be o
0d10: 6d 69 74 74 65 64 2e 0a 0a 40 64 65 66 70 72 6f  mitted...@defpro
0d20: 63 5b 28 68 74 6d 6c 24 2d 61 72 74 69 63 6c 65  c[(html$-article
0d30: 2d 6c 69 73 74 69 6e 67 2d 73 68 6f 72 74 20 5b  -listing-short [
0d40: 70 61 67 65 6e 6f 64 65 20 70 61 67 65 6e 6f 64  pagenode pagenod
0d50: 65 3f 5d 20 5b 70 75 62 64 61 74 65 20 73 74 72  e?] [pubdate str
0d60: 69 6e 67 3f 5d 20 5b 74 69 74 6c 65 20 73 74 72  ing?] [title str
0d70: 69 6e 67 3f 5d 29 0a 6e 6f 6e 2d 65 6d 70 74 79  ing?]).non-empty
0d80: 2d 73 74 72 69 6e 67 3f 5d 0a 0a 52 65 74 75 72  -string?]..Retur
0d90: 6e 73 20 61 20 73 74 72 69 6e 67 20 6f 66 20 48  ns a string of H
0da0: 54 4d 4c 20 66 6f 72 20 61 6e 20 61 72 74 69 63  TML for an artic
0db0: 6c 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 61  le as it would a
0dc0: 70 70 65 61 72 20 69 6e 20 61 20 6c 69 73 74 69  ppear in a listi
0dd0: 6e 67 20 63 6f 6e 74 65 78 74 20 69 6e 20 e2 80  ng context in ..
0de0: 9c 73 68 6f 72 74 e2 80 9d 20 66 6f 72 6d 0a 28  .short... form.(
0df0: 64 61 74 65 20 61 6e 64 20 74 69 74 6c 65 20 6f  date and title o
0e00: 6e 6c 79 2c 20 77 69 74 68 20 6c 69 6e 6b 29 2e  nly, with link).
0e10: 0a 0a 40 64 65 66 70 72 6f 63 5b 28 68 74 6d 6c  ..@defproc[(html
0e20: 24 2d 70 61 67 65 2d 62 6f 64 79 2d 63 6c 6f 73  $-page-body-clos
0e30: 65 29 20 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72  e) non-empty-str
0e40: 69 6e 67 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 61  ing?]..Returns a
0e50: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
0e60: 6e 67 20 74 68 65 20 70 61 67 65 e2 80 99 73 20  ng the page...s 
0e70: 40 74 74 7b 3c 66 6f 6f 74 65 72 3e 7d 20 61 6e  @tt{<footer>} an
0e80: 64 20 63 6c 6f 73 69 6e 67 20 74 61 67 73 2e 0a  d closing tags..
0e90: 0a 40 64 65 66 70 72 6f 63 5b 28 68 74 6d 6c 24  .@defproc[(html$
0ea0: 2d 6e 6f 74 65 2d 63 6f 6e 74 65 6e 74 73 20 5b  -note-contents [
0eb0: 64 69 73 70 6f 73 69 74 69 6f 6e 2d 6d 61 72 6b  disposition-mark
0ec0: 20 73 74 72 69 6e 67 3f 5d 20 5b 65 6c 65 6d 73   string?] [elems
0ed0: 20 28 6c 69 73 74 6f 66 20 78 65 78 70 72 3f 29   (listof xexpr?)
0ee0: 5d 29 20 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72  ]) non-empty-str
0ef0: 69 6e 67 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 61  ing?]..Returns a
0f00: 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
0f10: 6e 67 20 74 68 65 20 62 6f 64 79 2d 65 6c 65 6d  ng the body-elem
0f20: 65 6e 74 73 20 6f 66 20 61 20 6e 6f 74 65 20 63  ents of a note c
0f30: 6f 6e 76 65 72 74 65 64 20 74 6f 20 48 54 4d 4c  onverted to HTML
0f40: 2e 20 49 66 0a 40 72 61 63 6b 65 74 5b 5f 64 69  . If.@racket[_di
0f50: 73 70 6f 73 69 74 69 6f 6e 2d 6d 61 72 6b 5d 20  sposition-mark] 
0f60: 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 61 20  is not empty, a 
0f70: 40 74 74 7b 3c 73 70 61 6e 3e 7d 20 63 6f 6e 74  @tt{<span>} cont
0f80: 61 69 6e 69 6e 67 20 69 74 20 77 69 6c 6c 20 62  aining it will b
0f90: 65 20 69 6e 73 65 72 74 65 64 20 61 73 20 74 68  e inserted as th
0fa0: 65 20 66 69 72 73 74 0a 65 6c 65 6d 65 6e 74 20  e first.element 
0fb0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 62 6c 6f  of the first blo
0fc0: 63 6b 2d 6c 65 76 65 6c 20 65 6c 65 6d 65 6e 74  ck-level element
0fd0: 2e 0a 0a 40 64 65 66 70 72 6f 63 5b 28 68 74 6d  ...@defproc[(htm
0fe0: 6c 24 2d 6e 6f 74 65 2d 6c 69 73 74 69 6e 67 2d  l$-note-listing-
0ff0: 66 75 6c 6c 20 5b 70 61 67 65 6e 6f 64 65 20 70  full [pagenode p
1000: 61 67 65 6e 6f 64 65 3f 5d 0a 20 20 20 20 20 20  agenode?].      
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6e 6f 74              [not
1030: 65 2d 69 64 20 73 74 72 69 6e 67 3f 5d 20 0a 20  e-id string?] . 
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1060: 20 5b 74 69 74 6c 65 2d 68 74 6d 6c 2d 66 6c 6f   [title-html-flo
1070: 77 20 73 74 72 69 6e 67 3f 5d 0a 20 20 20 20 20  w string?].     
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 64 61               [da
10a0: 74 65 20 73 74 72 69 6e 67 3f 5d 0a 20 20 20 20  te string?].    
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63                [c
10d0: 6f 6e 74 65 6e 74 73 20 73 74 72 69 6e 67 3f 5d  ontents string?]
10e0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
10f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1100: 20 20 20 20 5b 61 75 74 68 6f 72 20 73 74 72 69      [author stri
1110: 6e 67 3f 20 28 64 65 66 61 75 6c 74 2d 61 75 74  ng? (default-aut
1120: 68 6f 72 6e 61 6d 65 29 5d 20 0a 20 20 20 20 20  horname)] .     
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 75               [au
1150: 74 68 6f 72 2d 75 72 6c 20 73 74 72 69 6e 67 3f  thor-url string?
1160: 20 22 22 5d 29 0a 20 20 20 20 20 20 20 20 20 20   ""]).          
1170: 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72 69 6e 67  non-empty-string
1180: 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 61 20 73 74  ?]..Returns a st
1190: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
11a0: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 48 54 4d  the complete HTM
11b0: 4c 20 6d 61 72 6b 75 70 20 66 6f 72 20 61 20 40  L markup for a @
11c0: 72 61 63 6b 65 74 5b 6e 6f 74 65 5d 2c 20 69 6e  racket[note], in
11d0: 63 6c 75 64 69 6e 67 20 74 69 74 6c 65 2c 20 70  cluding title, p
11e0: 65 72 6d 6c 69 6e 6b 2c 0a 64 61 74 65 2c 20 63  ermlink,.date, c
11f0: 6f 6e 74 65 6e 74 73 20 61 6e 64 20 61 75 74 68  ontents and auth
1200: 6f 72 2c 20 73 75 69 74 61 62 6c 65 20 66 6f 72  or, suitable for
1210: 20 64 69 73 70 6c 61 79 20 6f 75 74 73 69 64 65   display outside
1220: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of 
1230: 69 74 73 20 70 61 72 65 6e 74 20 61 72 74 69 63  its parent artic
1240: 6c 65 2e 0a 0a 40 64 65 66 70 72 6f 63 5b 28 68  le...@defproc[(h
1250: 74 6d 6c 24 2d 6e 6f 74 65 2d 69 6e 2d 61 72 74  tml$-note-in-art
1260: 69 63 6c 65 20 5b 69 64 20 73 74 72 69 6e 67 3f  icle [id string?
1270: 5d 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ] .             
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1290: 20 20 20 5b 64 61 74 65 20 73 74 72 69 6e 67 3f     [date string?
12a0: 5d 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ] .             
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 5b 63 6f 6e 74 65 6e 74 73 20 73 74 72     [contents str
12d0: 69 6e 67 3f 5d 20 0a 20 20 20 20 20 20 20 20 20  ing?] .         
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f0: 20 20 20 20 20 20 20 5b 61 75 74 68 6f 72 20 73         [author s
1300: 74 72 69 6e 67 3f 5d 0a 20 20 20 20 20 20 20 20  tring?].        
1310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1320: 20 20 20 20 20 20 20 20 5b 61 75 74 68 6f 72 2d          [author-
1330: 75 72 6c 20 73 74 72 69 6e 67 3f 5d 29 20 6e 6f  url string?]) no
1340: 6e 2d 65 6d 70 74 79 2d 73 74 72 69 6e 67 3f 5d  n-empty-string?]
1350: 0a 0a 4c 69 6b 65 20 40 72 61 63 6b 65 74 5b 68  ..Like @racket[h
1360: 74 6d 6c 24 2d 6e 6f 74 65 2d 6c 69 73 74 69 6e  tml$-note-listin
1370: 67 2d 66 75 6c 6c 5d 2c 20 62 75 74 20 72 65 74  g-full], but ret
1380: 75 72 6e 73 20 48 54 4d 4c 20 66 6f 72 20 61 20  urns HTML for a 
1390: 40 72 61 63 6b 65 74 5b 6e 6f 74 65 5d 20 73 75  @racket[note] su
13a0: 69 74 61 62 6c 65 20 66 6f 72 20 64 69 73 70 6c  itable for displ
13b0: 61 79 0a 69 6e 73 69 64 65 20 69 74 73 20 70 61  ay.inside its pa
13c0: 72 65 6e 74 20 61 72 74 69 63 6c 65 2e 0a 0a 40  rent article...@
13d0: 64 65 66 70 72 6f 63 5b 28 68 74 6d 6c 24 2d 6e  defproc[(html$-n
13e0: 6f 74 65 73 2d 73 65 63 74 69 6f 6e 20 5b 6e 6f  otes-section [no
13f0: 74 65 2d 68 74 6d 6c 73 20 73 74 72 69 6e 67 3f  te-htmls string?
1400: 5d 29 20 6e 6f 6e 2d 65 6d 70 74 79 2d 73 74 72  ]) non-empty-str
1410: 69 6e 67 3f 5d 0a 0a 52 65 74 75 72 6e 73 20 74  ing?]..Returns t
1420: 68 65 20 63 6f 6d 70 6c 65 74 65 20 48 54 4d 4c  he complete HTML
1430: 20 66 6f 72 20 74 68 65 20 40 69 74 61 6c 69 63   for the @italic
1440: 7b 46 75 72 74 68 65 72 20 4e 6f 74 65 73 7d 20  {Further Notes} 
1450: 73 65 63 74 69 6f 6e 20 6f 66 20 61 6e 20 61 72  section of an ar
1460: 74 69 63 6c 65 2e 0a 0a 40 64 65 66 70 72 6f 63  ticle...@defproc
1470: 5b 28 68 74 6d 6c 24 2d 70 61 67 69 6e 61 74 65  [(html$-paginate
1480: 2d 6e 61 76 6c 69 6e 6b 73 20 5b 63 75 72 72 65  -navlinks [curre
1490: 6e 74 2d 70 61 67 65 20 65 78 61 63 74 2d 70 6f  nt-page exact-po
14a0: 73 69 74 69 76 65 2d 69 6e 74 65 67 65 72 3f 5d  sitive-integer?]
14b0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d0: 20 20 20 20 5b 70 61 67 65 63 6f 75 6e 74 20 65      [pagecount e
14e0: 78 61 63 74 2d 70 6f 73 69 74 69 76 65 2d 69 6e  xact-positive-in
14f0: 74 65 67 65 72 3f 5d 0a 20 20 20 20 20 20 20 20  teger?].        
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1510: 20 20 20 20 20 20 20 20 20 20 5b 62 61 73 65 6e            [basen
1520: 61 6d 65 20 73 74 72 69 6e 67 3f 5d 29 20 73 74  ame string?]) st
1530: 72 69 6e 67 3f 5d 0a 0a 4f 6e 20 74 68 65 20 e2  ring?]..On the .
1540: 80 9c 62 6c 6f 67 e2 80 9d 2c 20 74 68 65 20 61  ..blog..., the a
1550: 72 74 69 63 6c 65 73 20 61 72 65 20 73 70 6c 69  rticles are spli
1560: 74 20 61 63 72 6f 73 73 20 6d 75 6c 74 69 70 6c  t across multipl
1570: 65 20 66 69 6c 65 73 3a 20 40 66 69 6c 65 70 61  e files: @filepa
1580: 74 68 7b 62 6c 6f 67 2d 70 67 31 2e 68 74 6d 6c  th{blog-pg1.html
1590: 7d 2c 0a 40 66 69 6c 65 70 61 74 68 7b 62 6c 6f  },.@filepath{blo
15a0: 67 2d 70 67 32 2e 68 74 6d 6c 7d 2c 20 65 74 63  g-pg2.html}, etc
15b0: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
15c0: 70 72 6f 76 69 64 65 73 20 61 20 73 74 72 69 6e  provides a strin
15d0: 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 48 54 4d  g containing HTM
15e0: 4c 20 66 6f 72 20 61 20 67 72 6f 75 70 20 6f 66  L for a group of
15f0: 20 6c 69 6e 6b 73 0a 74 68 61 74 20 63 61 6e 20   links.that can 
1600: 62 65 20 67 69 76 65 6e 20 77 69 74 68 69 6e 20  be given within 
1610: 65 61 63 68 20 66 69 6c 65 2c 20 74 6f 20 6c 69  each file, to li
1620: 6e 6b 20 74 6f 20 74 68 65 20 70 61 67 65 73 20  nk to the pages 
1630: 74 68 61 74 20 63 6f 6d 65 20 62 65 66 6f 72 65  that come before
1640: 2f 61 66 74 65 72 20 69 74 2e 20 0a 0a 54 68 65  /after it. ..The
1650: 20 6c 69 6e 6b 73 20 61 72 65 20 65 6e 63 6c 6f   links are enclo
1660: 73 65 64 20 77 69 74 68 69 6e 20 40 74 74 7b 3c  sed within @tt{<
1670: 6c 69 3e 7d 20 74 61 67 73 2e 20 49 74 e2 80 99  li>} tags. It...
1680: 73 20 75 70 20 74 6f 20 74 68 65 20 63 61 6c 6c  s up to the call
1690: 69 6e 67 20 73 69 74 65 20 74 6f 20 70 72 6f 76  ing site to prov
16a0: 69 64 65 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e  ide the enclosin
16b0: 67 0a 40 74 74 7b 3c 75 6c 3e 7d 20 74 61 67 20  g.@tt{<ul>} tag 
16c0: 28 69 6e 20 63 61 73 65 20 61 6e 79 20 63 75 73  (in case any cus
16d0: 74 6f 6d 20 73 74 79 6c 69 6e 67 20 6f 72 20 49  tom styling or I
16e0: 44 73 20 6e 65 65 64 20 74 6f 20 62 65 20 61 70  Ds need to be ap
16f0: 70 6c 69 65 64 29 2e 0a                          plied)..