/racket-5-0-2-bin-i386-osx-mac-dmg/collects/scribble/private/manual-style.rkt

http://github.com/smorin/f4f.arc · Racket · 233 lines · 214 code · 19 blank · 0 comment · 12 complexity · f36415f6ccc50e76fb55e41a864f5636 MD5 · raw file

  1. #lang racket/base
  2. (require "../decode.ss"
  3. "../struct.ss"
  4. "../base.ss"
  5. (only-in "../basic.ss" aux-elem itemize)
  6. "../scheme.ss"
  7. (only-in "../core.ss" make-style plain
  8. make-nested-flow
  9. [element? core:element?])
  10. "manual-utils.ss"
  11. "on-demand.ss"
  12. "manual-sprop.rkt"
  13. racket/list
  14. racket/contract
  15. racket/string)
  16. (provide (rename-out [hyperlink link])
  17. (rename-out [other-doc other-manual])
  18. (rename-out [centered centerline])
  19. image
  20. (rename-out [image image/plain])
  21. itemize
  22. aux-elem)
  23. (provide/contract [filebox ((or/c core:element? string?) pre-flow? . -> . block?)])
  24. (define styling-f/c
  25. (() () #:rest (listof pre-content?) . ->* . element?))
  26. (define-syntax-rule (provide-styling id ...)
  27. (provide/contract [id styling-f/c] ...))
  28. (provide-styling racketmodfont racketoutput
  29. racketerror racketfont racketvalfont racketresultfont racketidfont racketvarfont
  30. racketparenfont racketkeywordfont racketmetafont
  31. onscreen defterm filepath exec envvar Flag DFlag PFlag DPFlag math
  32. procedure
  33. indexed-file indexed-envvar idefterm pidefterm)
  34. (define-syntax-rule (provide-scheme-styling [rid sid] ...)
  35. (provide/contract [rename rid sid styling-f/c] ...))
  36. (provide-scheme-styling [racketmodfont schememodfont]
  37. [racketoutput schemeoutput]
  38. [racketerror schemeerror]
  39. [racketfont schemefont]
  40. [racketvalfont schemevalfont]
  41. [racketresultfont schemeresultfont]
  42. [racketidfont schemeidfont]
  43. [racketvarfont schemevarfont]
  44. [racketparenfont schemeparenfont]
  45. [racketkeywordfont schemekeywordfont]
  46. [racketmetafont schememetafont])
  47. (provide void-const
  48. undefined-const)
  49. (provide/contract
  50. [PLaneT element?]
  51. [hash-lang (-> element?)]
  52. [etc string?]
  53. [inset-flow (() () #:rest (listof pre-content?) . ->* . any/c)] ; XXX no docs and bad return contract
  54. [litchar (() () #:rest (listof string?) . ->* . element?)]
  55. [t (() () #:rest (listof pre-content?) . ->* . paragraph?)]
  56. [commandline (() () #:rest (listof pre-content?) . ->* . paragraph?)]
  57. [menuitem (string? string? . -> . element?)])
  58. (define PLaneT (make-element "planetName" '("PLaneT")))
  59. (define etc "etc.") ; so we can fix the latex space, one day
  60. (define (litchar . strs)
  61. (let ([s (string-append* (map (lambda (s) (regexp-replace* "\n" s " "))
  62. strs))])
  63. (if (regexp-match? #rx"^ *$" s)
  64. (make-element input-background-color (list (hspace (string-length s))))
  65. (let ([^spaces (car (regexp-match-positions #rx"^ *" s))]
  66. [$spaces (car (regexp-match-positions #rx" *$" s))])
  67. (make-element
  68. input-background-color
  69. (list (hspace (cdr ^spaces))
  70. (make-element input-color
  71. (list (substring s (cdr ^spaces) (car $spaces))))
  72. (hspace (- (cdr $spaces) (car $spaces)))))))))
  73. (define (onscreen . str)
  74. (make-element 'sf (decode-content str)))
  75. (define (menuitem menu item)
  76. (make-element 'sf (list menu "|" item)))
  77. (define (defterm . str)
  78. (make-element 'italic (decode-content str)))
  79. (define (idefterm . str)
  80. (let ([c (decode-content str)])
  81. (make-element 'italic c)))
  82. (define (racketfont . str)
  83. (apply tt str))
  84. (define (racketvalfont . str)
  85. (make-element value-color (decode-content str)))
  86. (define (racketresultfont . str)
  87. (make-element result-color (decode-content str)))
  88. (define (racketidfont . str)
  89. (make-element symbol-color (decode-content str)))
  90. (define (racketvarfont . str)
  91. (make-element variable-color (decode-content str)))
  92. (define (racketparenfont . str)
  93. (make-element paren-color (decode-content str)))
  94. (define (racketmetafont . str)
  95. (make-element meta-color (decode-content str)))
  96. (define (racketmodfont . str)
  97. (make-element module-color (decode-content str)))
  98. (define (racketkeywordfont . str)
  99. (make-element keyword-color (decode-content str)))
  100. (define (filepath . str)
  101. (make-element 'tt (append (list "\"") (decode-content str) (list "\""))))
  102. (define (indexed-file . str)
  103. (let* ([f (apply filepath str)]
  104. [s (element->string f)])
  105. (index* (list (clean-up-index-string
  106. (substring s 1 (sub1 (string-length s)))))
  107. (list f)
  108. f)))
  109. (define (exec . str)
  110. (if (andmap string? str)
  111. (make-element 'tt str)
  112. (make-element #f (map (lambda (s)
  113. (if (string? s)
  114. (make-element 'tt (list s))
  115. s))
  116. str))))
  117. (define (Flag . str)
  118. (make-element 'no-break
  119. (list (make-element 'tt (cons "-" (decode-content str))))))
  120. (define (DFlag . str)
  121. (make-element 'no-break
  122. (list (make-element 'tt (cons "--" (decode-content str))))))
  123. (define (PFlag . str)
  124. (make-element 'no-break
  125. (list (make-element 'tt (cons "+" (decode-content str))))))
  126. (define (DPFlag . str)
  127. (make-element 'no-break
  128. (list (make-element 'tt (cons "++" (decode-content str))))))
  129. (define (envvar . str)
  130. (make-element 'tt (decode-content str)))
  131. (define (indexed-envvar . str)
  132. (let* ([f (apply envvar str)]
  133. [s (element->string f)])
  134. (index* (list s) (list f) f)))
  135. (define (procedure . str)
  136. (make-element result-color `("#<procedure:" ,@(decode-content str) ">")))
  137. (define (racketoutput . str)
  138. (make-element output-color (decode-content str)))
  139. (define (racketerror . str)
  140. (make-element error-color (decode-content str)))
  141. (define (t . str)
  142. (decode-paragraph str))
  143. (define (inset-flow . c)
  144. (make-blockquote "insetpara" (flow-paragraphs (decode-flow c))))
  145. (define (commandline . s)
  146. (make-paragraph (cons (hspace 2) (map (lambda (s)
  147. (if (string? s)
  148. (make-element 'tt (list s))
  149. s))
  150. s))))
  151. (define (pidefterm . s)
  152. (let ([c (apply defterm s)])
  153. (index (string-append (content->string (element-content c)) "s")
  154. c)))
  155. (define (hash-lang)
  156. (make-link-element
  157. module-link-color
  158. (list (racketmodfont "#lang"))
  159. `(part ,(doc-prefix '(lib "scribblings/guide/guide.scrbl") "hash-lang"))))
  160. (define-on-demand void-const
  161. (racketresultfont "#<void>"))
  162. (define-on-demand undefined-const
  163. (racketresultfont "#<undefined>"))
  164. (define (link url
  165. #:underline? [underline? #t]
  166. #:style [style (if underline? #f "plainlink")]
  167. . str)
  168. (apply hyperlink url #:style (if style (make-style style null) plain) str))
  169. (define (math . s)
  170. (let ([c (decode-content s)])
  171. (make-element
  172. #f
  173. (append-map
  174. (lambda (i)
  175. (let loop ([i i])
  176. (cond
  177. [(string? i)
  178. (cond
  179. [(regexp-match #px"^(.*)_([a-zA-Z0-9]+)(.*)$" i)
  180. => (lambda (m)
  181. (append (loop (cadr m))
  182. (list (make-element 'subscript
  183. (loop (caddr m))))
  184. (loop (cadddr m))))]
  185. [(regexp-match #px"^(.*)\\^([a-zA-Z0-9]+)(.*)$" i)
  186. => (lambda (m)
  187. (append (loop (cadr m))
  188. (list (make-element 'superscript
  189. (loop (caddr m))))
  190. (loop (cadddr m))))]
  191. [(regexp-match #px"^(.*)([()0-9{}\\[\\]\u03C0])(.*)$" i)
  192. => (lambda (m)
  193. (append (loop (cadr m))
  194. (list (caddr m))
  195. (loop (cadddr m))))]
  196. [else
  197. (list (make-element 'italic (list i)))])]
  198. [(eq? i 'rsquo) (list 'prime)]
  199. [else (list i)])))
  200. c))))
  201. (define (filebox filename . inside)
  202. (make-nested-flow
  203. (make-style "Rfilebox" scheme-properties)
  204. (list
  205. (make-styled-paragraph
  206. (list (make-element
  207. (make-style "Rfilename" scheme-properties)
  208. (if (string? filename)
  209. (filepath filename)
  210. filename)))
  211. (make-style "Rfiletitle" scheme-properties))
  212. (make-nested-flow
  213. (make-style "Rfilecontent" scheme-properties)
  214. (decode-flow inside)))))