diff --git a/collects/meta/web/www/bib.rkt b/collects/meta/web/www/bib.rkt deleted file mode 100644 index 50c74ad0d8..0000000000 --- a/collects/meta/web/www/bib.rkt +++ /dev/null @@ -1,156 +0,0 @@ -#lang meta/web - -(require "resources.rkt") - -;; bib values are hash tables mapping field names (symbols) to strings. -;; Keywords can also be used for the field names, which makes them meta-fields -;; that are not included in the usual bib printout. Two of them are required: -;; - #:type the type of the entry (a symbol: 'article, 'techreport, etc) -;; - #:key the label for the entry - -(define bib-fields - '(author editor title booktitle journal - edition volume number series - chapter pages - type - school institution organization - publisher howpublished - address - month year - key - crossref - url - note - eprint)) - -(define meta-field? keyword?) - -(define key->number - (let ([t (for/hash ([k bib-fields] [i (in-naturals)]) (values k i))]) - (lambda (key) - (hash-ref t key (lambda () - (error 'key->number "unknown field name: ~e" key)))))) - -;; converts the hash to an alist with the order specified by bib-fields -(define (bib->alist bib) - (sort (filter-not (compose meta-field? car) (hash-map bib cons)) - < #:key (compose key->number car) #:cache-keys? #t)) - -(define (display* . xs) - (for-each display xs)) - -(define (display-attr attr) - (let* ([prefix (format " ~a = {" (car attr))] - [sep (delay (string-append "\n" (make-string (string-length prefix) - #\space)))]) - (display* prefix - (if (regexp-match? #rx"\n" (cdr attr)) - (regexp-replace* #rx"\n" (cdr attr) (force sep)) - (cdr attr)) - "}"))) - -(provide display-bib) -(define (display-bib bib) - (display* "@" (hash-ref bib '#:type) "{" (hash-ref bib '#:key)) - (for ([attr (bib->alist bib)]) (display* ",\n") (display-attr attr)) - (display* "\n}\n")) - -(provide with-braces without-braces) -(define (with-braces str) (regexp-replace* #px"\\b\\w+[A-Z]\\w*" str "{\\0}")) -(define (without-braces str) (regexp-replace* #rx"[{}]+" str "")) - -(provide bib-author) -(define (bib-author bib) - (let ([authors (regexp-split #rx"[ \t\n]+and[ \t\n]+" - (hash-ref bib 'author))]) - (case (length authors) - [(0) "???"] - [(1) (car authors)] - [(2) (apply format "~a and ~a" authors)] - [(3) (apply format "~a, ~a, and ~a" authors)] - [else (format "~a et al" (car authors))]))) - -;; ---------------------------------------------------------------------------- - -;; processes the (key val ...) alist to a hash of (key . val) by combining the -;; possibly multiple values for each key (each value becomes a line) -(provide bib) -(define (bib type key attrs) - (define t (make-hasheq)) - (hash-set! t '#:type type) - (hash-set! t '#:key key) - (for ([a attrs]) - (define (err) (error 'make-bib "bad attribute: ~e" a)) - (unless (and (pair? a) (pair? (cdr a)) (list? (cdr a))) (err)) - (let ([key (car a)]) - (unless (hash-ref t key #f) ; previous keys take precedence - (cond [(symbol? key) - ;; turn non-strings to strings, join multiple strings, normalize - ;; spaces - (let* ([val (cdr a)] - [val (map (lambda (x) (if (string? x) x (format "~a" x))) - val)] - [val (string-append* (add-between val "\n"))] - [val (regexp-replace* #rx"\t" val " ")] - [val (regexp-replace* #rx" +" val " ")] - [val (regexp-replace #rx"^ +" val "")] - [val (regexp-replace #rx" +$" val "")] - [val (regexp-replace* #rx"(?: *\r?\n *)+" val "\n")]) - (hash-set! t key val))] - [(and (meta-field? key) (null? (cddr a))) - (hash-set! t key (cadr a))] - [else (err)])))) - t) - -;; ---------------------------------------------------------------------------- - -#| -In the future, it might be good to do some field verification, etc. From the -bibtext thing: - article: An article from a journal or magazine. - req: author, title, journal, year - opt: volume, number, pages, month, note - book: A book with an explicit publisher. - req: author or editor, title, publisher, year - opt: volume or number, series, address, edition, month, note - booklet: A work that is printed and bound, but without a named publisher or - sponsoring institution. - req: title - opt: author, howpublished, address, month, year, note - conference: The same as `inproceedings', included for Scribe compatibility. - inbook: A part of a book, which may be a chapter (or section or whatever) - and/or a range of pages. - req: author or editor, title, chapter and/or pages, publisher, year - opt: volume or number, series, type, address, edition, month, note - incollection: A part of a book having its own title. - req: author, title, booktitle, publisher, year - opt: editor, volume or number, series, type, chapter, pages, address, - edition, month, note - inproceedings: An article in a conference proceedings. - req: author, title, booktitle, year - opt: editor, volume or number, series, pages, address, month, organization, - publisher, note - manual: Technical documentation. - req: title - opt: author, organization, address, edition, month, year, note - mastersthesis: A Master's thesis. - req: author, title, school, year - opt: type, address, month, note - misc: Use this type when nothing else fits. - opt: author, title, howpublished, month, year, note - phdthesis: A PhD thesis. - req: author, title, school, year - opt: type, address, month, note - proceedings: The proceedings of a conference. - req: title, year - opt: editor, volume or number, series, address, month, organization, - publisher, note - techreport: A report published by a school or other institution, usually - numbered within a series. - req: author, title, institution, year - opt: type, number, address, month, note - unpublished: A document having an author and title, but not formally - published. - req: author, title, note - opt: month, year -|# diff --git a/collects/meta/web/www/learning.rkt b/collects/meta/web/www/learning.rkt index 7f025f0ea0..4066b934d4 100644 --- a/collects/meta/web/www/learning.rkt +++ b/collects/meta/web/www/learning.rkt @@ -1,6 +1,6 @@ #lang meta/web -(require "resources.rkt" "people.rkt" "techreports.rkt") +(require "resources.rkt" "people.rkt" "techreports.rkt" "old-techreports.rkt") (provide learning) (define learning diff --git a/collects/meta/web/www/old-techreports.rkt b/collects/meta/web/www/old-techreports.rkt new file mode 100644 index 0000000000..efc6341ebb --- /dev/null +++ b/collects/meta/web/www/old-techreports.rkt @@ -0,0 +1,450 @@ +#lang meta/web + +;; Old style TR entries + +;; This code is intended only to keep the old techreports/ page up for +;; old links. + +(require "resources.rkt" "techreports.rkt" "people.rkt" "../download/data.rkt" + (prefix-in - version/utils)) + +;; ---------------------------------------------------------------------------- +;; Data + +(define last-old-tr "4.9") + +(define authors + '([plt "PLT"] + [ff mflatt robby] + [fplt mflatt plt] + [rplt robby plt] + [ffplt ff plt] + [ffc ff clements] + [fb mflatt eli] + [dorai "Dorai Sitaram"] + [wright "Andrew K. Wright"] + [flanagan "Cormac Flanagan"] + [web burns gregp jay] + [burns "Mike Burns"] + [gregp "Greg Pettyjohn"] + [dyoo "Danny Yoo"] + [ym dyoo jay] + [kathyg "Kathryn E. Gray"] + [jacobm "Jacob Matthews"] + [sowens "Scott Owens"] + [plot alex raymond] + [alex "Alexander Friedman"] + [raymond "Jamie Raymond"] + [dskippy "Mike T. McHenry"] + [ptg "Paul Graunke"] + [ryanc "Ryan Culpepper"] + [steck "Paul Steckler"] + [samth "Sam Tobin-Hochstadt"] + [gcooper "Greg Cooper"])) + +(define doc-defs + ;; each item is: + ;; (docname [docnum] versions author title . attrs) + ;; docname: a symbol for the name of the document + ;; docnum: an optional integer used in the TR number (docname used otherwise) + ;; versions: version range specification (see `versions->pred' below) + ;; author: is a symbol from the `authors' table + ;; title: is a string (no braces) + `(;; old versions + (mzscheme 1 "...*" mflatt "PLT MzScheme: Language Manual") + (mred 2 "...*" ff "PLT MrEd: Graphical Toolbox Manual") + (drscheme 3 "...*" robby "PLT DrScheme: Programming Environment Manual" + [#:note ("See also:" + "R. B. Findler, J. Clements, C. Flanagan, M. Flatt," + "S. Krishnamurthi, P. Steckler and M. Felleisen." + "DrScheme: A programming environment for Scheme," + "Journal of Functional Programming," + "12(2):159--182, March 2002." + "http://www.ccs.neu.edu/scheme/pubs/")]) + (mzlib 4 "200...*" plt "PLT MzLib: Libraries Manual") + (framework "...*" plt "PLT Framework: GUI Application Framework") + (tools "...*" robby "PLT Tools: DrScheme Extension Manual") + (web-server "300...*" web "Web Server Manual") + (mrlib "207...*" plt "PLT MrLib: Graphical Libraries Manual") + (plot "207...*" plot "PLoT Manual") + (mzc "...*" plt "PLT mzc: MzScheme Compiler Manual") + (insidemz "...*" mflatt "Inside PLT MzScheme") + (foreign "...*" eli "PLT Foreign Interface Manual") + (misclib "...*" plt "PLT Miscellaneous Libraries: Reference Manual") + (tex2page "200...*" dorai "TeX2page") + (t-y-scheme "200...*" dorai "Teach Yourself Scheme in Fixnum Days" + [type "Introduction"]) + (match "103p1" wright "Pattern Matching for Scheme") + (mrspidey "103p1" flanagan "PLT MrSpidey: Static Debugger Manual") + ;; new Scheme versions + (quick "*...!" mflatt + "Quick: An Introduction to PLT Scheme with Pictures" + [type "Introduction"]) + (more "*...!" plt "More: Systems Programming with PLT Scheme" + [type "Introduction"]) + (continue "4.1.1..." ym "Continue: Web Applications in PLT Scheme" + [type "Introduction"]) + (guide "*...!" ffplt "Guide: PLT Scheme" [type "Introduction"]) + (reference "*...!" fplt "Reference: PLT Scheme") + (htdp-langs "*...!" plt "How to Design Programs Languages") + (htdc "*...!" kathyg "How to Design Classes Languages") + (teachpack "*...!" plt "Teachpacks") + (eopl "*...!" plt "Essentials of Programming Languages Language") + (drscheme "*...!" rplt "DrScheme: PLT Programming Environment") + (mzc "*...!" plt "mzc: PLT Compilation and Packaging") + (setup-plt "*...!" plt "setup-plt: PLT Configuration and Installation") + (planet "*...!" jacobm "PLaneT: Automatic Package Distribution") + (redex "4.1...!" robby "Redex: Debugging Operational Semantics") + (scribble "*...!" fb "Scribble: PLT Documentation Tool") + (slideshow "*...!" ff "Slideshow: PLT Figure and Presentation Tools") + (web-server "*...!" jay "Web Server: PLT HTTP Server") + (tools "*...!" robby "Plugins: Extending DrScheme") + (gui "*...!" ffc "GUI: PLT Graphics Toolkit") + (framework "*...!" ff "Framework: PLT GUI Application Framework") + (sgl "*...!" sowens "GL: 3-D Graphics") + (plot "*...!" plot "PLoT: Graph Plotting") + (browser "*...!" plt "Browser: Simple HTML Rendering") + (cards "*...!" plt "Cards: Virtual Playing Cards Library") + (embedded-gui "*...!" dskippy "Embedded GUI: Widgets within editor<%>") + (games "*...!" plt "Games: Fun Examples") + (gl-board-game "*...!" plt "GL Board Game: 3-D Game Support") + (mrlib "*...!" plt "MrLib: Extra GUI Libraries") + (string-constants "*...!" plt "String Constants: GUI Internationalization") + (syntax-color "*...!" sowens "Syntax Color: Utilities") + (turtles "*...!" plt "Turtle Graphics") + (net "*...!" plt "Net: PLT Networking Libraries") + (openssl "*...!" plt "OpenSSL") + (file "*...!" plt "File: PLT File Format Libraries") + (html "*...!" plt "HTML: Parsing Library") + (parser-tools "*...!" sowens "Parser Tools: lex and yacc-style Parsing") + (xml "*...!" ptg "XML: Parsing and Writing") + (config "*...!" plt "Config: Installation and Search Paths") + (dynext "*...!" plt "Dynext: Running a C Compiler/Linker") + (errortrace "*...!" plt "Errortrace: Debugging and Profiling") + (macro-debugger "*...!" ryanc "Macro Debugger") + (make "*...!" plt "Make: Dependency Manager") + (readline "*...!" plt "Readline: Terminal Interaction") + (slatex-wrap "*...!" plt "SLaTeX Wrapper") + (trace "*...!" plt "Trace: Instrumentation to Show Function Calls") + (version "*...!" plt "Version: PLT Version Checking") + (foreign "*...!" eli "FFI: PLT Scheme Foreign Interface") + (inside "*...!" mflatt "Inside: PLT Scheme C API") + (cffi "*...!" mflatt "c-lambda: C FFI via mzc") + (mysterx "*...!" steck "MysterX: Using Windows COM Objects in Scheme") + (mzcom "*...!" steck "MzCOM: Scheme as a Windows COM Object") + (srfi "*...!" plt "SRFIs: Libraries") + (htdp-lib "*...!" plt "HtDP: Languages as Libraries") + (swindle "*...!" plt "Swindle") + (syntax "*...!" plt "Syntax: Meta-Programming Helpers") + (typed-scheme "*...!" samth "Typed Scheme: Scheme with Static Types") + (frtime "*...!" gcooper "FrTime: A Language for Reactive Programs") + (lazy "*...!" eli "Lazy Scheme") + (r5rs "*...!" plt "R5RS: Legacy Standard Language" + [#:note ("See also:" + "Rickard Kelsey and William Clinger" + "and Jonathan Rees (Editors)" + "Revised$^5$ Report of the Algorithmic Language Scheme" + "ACM SIGPLAN Notices" + "33(9):26--76, 1998")]) + (graphics "*...!" plt "Graphics: Legacy Library") + (mzlib "*...!" plt "MzLib: Legacy PLT Libraries") + (preprocessor "*...!" eli "mzpp and mztext: Preprocessors") + (mzscheme "*...!" plt "MzScheme: Legacy Module Language") + (algol60 "*...!" plt "Algol 60") + (honu "*...!" plt "Honu") + (test-box-recovery "*...!" plt "Test Box Recovery Tool") + + ;; Racket versions + (quick "!..." mflatt + "Quick: An Introduction to Racket with Pictures" + [type "Introduction"]) + (more "!..." plt "More: Systems Programming with Racket" + [type "Introduction"]) + (guide "!..." ffplt "Guide: Racket" [type "Introduction"]) + (reference "!..." fplt "Reference: Racket") + (drracket "!..." rplt "DrRacket: Programming Environment") + (scribble "!..." fb "Scribble: Racket Documentation Tool") + (slideshow "!..." ff "Slideshow: Racket Figure and Presentation Tools") + (web-server "!..." jay "Web Server: Racket HTTP Server") + (foreign "!..." eli "FFI: Racket Foreign Interface") + (inside "!..." mflatt "Inside: Racket C API") + + ;; Both Scheme and Racket + (r6rs "*..." plt "R6RS: Standard Language" + [#:note ("See also:" + "Michael Sperber and R. Kent Dybvig and Matthew Flatt" + "and Anton Van Straaten (Editors)" + "Revised$^6$ Report of the Algorithmic Language Scheme" + "September 2007")]) + + ;; (article fcffksf:drscheme + ;; [author "Robert Bruce Findler and John Clements and Cormac Flanagan" + ;; "and Matthew Flatt and Shriram Krishnamurthi" + ;; "and Paul Steckler and Matthias Felleisen"] + ;; [title "{DrScheme}: A Programming Environment for {Scheme}"] + ;; [volume 12] + ;; [number 2] + ;; [pages "159--182"] + ;; [month "March"] + ;; [journal "Journal of Functional Programming"] + ;; [year "2002"]) + )) + +;; ---------------------------------------------------------------------------- +;; Bib stuff + +;; bib values are hash tables mapping field names (symbols) to strings. +;; Keywords can also be used for the field names, which makes them meta-fields +;; that are not included in the usual bib printout. Two of them are required: +;; - #:type the type of the entry (a symbol: 'article, 'techreport, etc) +;; - #:key the label for the entry + +(define bib-fields + '(author editor title booktitle journal + edition volume number series + chapter pages + type + school institution organization + publisher howpublished + address + month year + key + crossref + url + note + eprint)) + +(define meta-field? keyword?) + +(define key->number + (let ([t (for/hash ([k bib-fields] [i (in-naturals)]) (values k i))]) + (lambda (key) + (hash-ref t key (lambda () + (error 'key->number "unknown field name: ~e" key)))))) + +;; converts the hash to an alist with the order specified by bib-fields +(define (bib->alist bib) + (sort (filter-not (compose meta-field? car) (hash-map bib cons)) + < #:key (compose key->number car) #:cache-keys? #t)) + +(define (display* . xs) + (for-each display xs)) + +(define (display-attr attr) + (let* ([prefix (format " ~a = {" (car attr))] + [sep (delay (string-append "\n" (make-string (string-length prefix) + #\space)))]) + (display* prefix + (if (regexp-match? #rx"\n" (cdr attr)) + (regexp-replace* #rx"\n" (cdr attr) (force sep)) + (cdr attr)) + "}"))) + +(define (display-bib bib) + (display* "@" (hash-ref bib '#:type) "{" (hash-ref bib '#:key)) + (for ([attr (bib->alist bib)]) (display* ",\n") (display-attr attr)) + (display* "\n}\n")) + +(define (with-braces str) (regexp-replace* #px"\\b\\w+[A-Z]\\w*" str "{\\0}")) +(define (without-braces str) (regexp-replace* #rx"[{}]+" str "")) + +(define (bib-author bib) + (let ([authors (regexp-split #rx"[ \t\n]+and[ \t\n]+" + (hash-ref bib 'author))]) + (case (length authors) + [(0) "???"] + [(1) (car authors)] + [(2) (apply format "~a and ~a" authors)] + [(3) (apply format "~a, ~a, and ~a" authors)] + [else (format "~a et al" (car authors))]))) + +;; processes the (key val ...) alist to a hash of (key . val) by combining the +;; possibly multiple values for each key (each value becomes a line) +(define (bib type key attrs) + (define t (make-hasheq)) + (hash-set! t '#:type type) + (hash-set! t '#:key key) + (for ([a attrs]) + (define (err) (error 'make-bib "bad attribute: ~e" a)) + (unless (and (pair? a) (pair? (cdr a)) (list? (cdr a))) (err)) + (let ([key (car a)]) + (unless (hash-ref t key #f) ; previous keys take precedence + (cond [(symbol? key) + ;; turn non-strings to strings, join multiple strings, normalize + ;; spaces + (let* ([val (cdr a)] + [val (map (lambda (x) (if (string? x) x (format "~a" x))) + val)] + [val (string-append* (add-between val "\n"))] + [val (regexp-replace* #rx"\t" val " ")] + [val (regexp-replace* #rx" +" val " ")] + [val (regexp-replace #rx"^ +" val "")] + [val (regexp-replace #rx" +$" val "")] + [val (regexp-replace* #rx"(?: *\r?\n *)+" val "\n")]) + (hash-set! t key val))] + [(and (meta-field? key) (null? (cddr a))) + (hash-set! t key (cadr a))] + [else (err)])))) + t) + +;; ---------------------------------------------------------------------------- +;; Version etc + +;; Use this instead of the built-in one, to make sure that we only deal +;; with known released version. +(define version->integer + (let ([t (for*/hash ([r (in-list releases)] + [v (in-value (release-version r))]) + (values v (-version->integer (regexp-replace #rx"^0+" v ""))))]) + (lambda (ver) + (hash-ref t ver (lambda () + (error 'version->integer + "unknown pltreport version: ~e" ver)))))) + +(define (date->year+month date) + (let ([m (regexp-match #rx"^([A-Z][a-z]+) +([0-9]+)$" date)]) + (if m + (values (caddr m) (cadr m)) + (error 'date->year+month "unexpected date string: ~.a" date)))) + +;; "V...V" version range +;; "...V", "V..." open-ended version range +;; "..." all versions +;; "V" specific version +;; "" no versions +;; V can be `*': a number between the v3 docs and the v4 docs +;; V can be `!': a number between the last PLT Scheme and the first Racket +(define v:3->4 (-version->integer "379")) +(define v:4->5 (-version->integer "4.3")) +(define (versions->pred str) + (let* ([str (regexp-replace* #rx" +" str " ")] + [str (regexp-replace #rx"^ +" str "")] + [str (regexp-replace #rx" +$" str "")] + [l (regexp-split #rx" *[.][.][.] *" str)] + [l (map (lambda (x) + (cond [(equal? "" x) #f] + [(equal? "*" x) v:3->4] + [(equal? "!" x) v:4->5] + [(version->integer x)] + [else (error 'versions->pred "bad version: ~e" x)])) + l)]) + (apply + (case-lambda [(ver) + (if ver + (lambda (v) (equal? ver (version->integer v))) + (lambda (v) #f))] + [(from to) + (let ([from (or from -inf.0)] + [to (or to +inf.0)]) + (lambda (v) (<= from (version->integer v) to)))] + [_ (error 'versions->pred "bad versions spec: ~e" str)]) + l))) + +;; ---------------------------------------------------------------------------- +;; Authors + +(define authors* + (let ([t (make-hasheq)]) + (for ([a authors]) + (hash-set! t (car a) + ((if (and (= 2 (length a)) (string? (cadr a))) cadr cdr) a))) + t)) + +(define (author->string author) + (let ([r (hash-ref authors* author + (lambda () (person-bibname (find-person author))))]) + (if (string? r) + r + (let ([r (string-join (map author->string r) " and ")]) + (hash-set! authors* author r) + r)))) + +;; ---------------------------------------------------------------------------- +;; Main + +(define doc-defs* + (for/list ([d doc-defs]) + (apply + (lambda (docname docnum versions author title . attrs) + `(,(versions->pred versions) + [#:docname ,docname] + [#:number-template ,(format "PLT-TR~~a-~a-v~~a" (or docnum docname))] + [title ,(with-braces title)] + [author ,(author->string author)] + ,@attrs)) + (if (number? (cadr d)) d (list* (car d) #f (cdr d)))))) + +(define last-old-tr-version (-version->integer last-old-tr)) + +(define bibs + (for*/list ([rel (in-list (reverse releases))] + [ver (in-value (release-version rel))] + #:when (<= (version->integer ver) last-old-tr-version) + [doc (in-list doc-defs*)] + #:when ((car doc) ver)) + (define attrs (cdr doc)) + (define (get key [dflt #f]) (cond [(assq key attrs) => cadr] [else dflt])) + (define docname (get '#:docname)) + (define-values (year month) (date->year+month (version->date ver))) + (define number (format (get '#:number-template) year ver)) + (define key (regexp-replace* #rx":" (string-downcase number) "_")) + (define old? (< (version->integer ver) v:4->5)) + (define site (if old? "plt-scheme" "racket-lang")) + (define note + (let ([n1 (format "\\url{http://~a.org/techreports/}" site)] + [n2 (get '#:note #f)]) + (if n2 (cons (string-append n1 ";") n2) (list n1)))) + (define maybe-s (if old? "" "s")) + (define (mk-url dir sfx) + (format "http://download.~a.org/doc~a/~a/~a/~a~a" + site maybe-s ver dir docname sfx)) + (define pdf-url (mk-url "pdf" ".pdf")) + (define pdf-html (mk-url "html" "/")) + (bib 'techreport key + `(,@attrs + [year ,year] + [month ,month] + [institution "PLT Scheme Inc."] + [type "Reference Manual"] + [number ,number] + [#:version ,ver] + [url ,pdf-url] + [#:pdf-url ,pdf-url] + [#:html-url ,pdf-html] + [note ,@note])))) + +(define old-techreports + @page[#:file "techreports/" #:title "Old PLT Technical Reports" + #:part-of 'learning + #:extra-headers + @script/inline[type: "text/javascript"]{ + function show_bib(n) { + var s = document.getElementById("bibrow"+n).style; + s.display = (s.display == "table-row") ? "none" : "table-row"; + }}]{ + @p{@strong{Note:} the entries on this page are outdated, please see the new + @techreports page.} + @p{PLT publishes technical reports about some of its tools and libraries so + that scholars who wish to give proper credit to some of our innovations + have a definite citation. Each entry below provides the full pdf and a + bibtex entry; some of the bibtex entries provide additional citations to + published papers.} + @table[width: "98%" cellspacing: 0 cellpadding: 6 border: 0 + align: 'center style: "font-size: 75%;"]{ + @(for/list ([bib (in-list bibs)] [n (in-naturals)]) + (define bgcolor (if (even? n) "#e0e0e0" "white")) + (define bibtext + (parameterize ([current-output-port (open-output-string)]) + (display-bib bib) + (get-output-string (current-output-port)))) + @list{ + @tr[valign: 'top bgcolor: bgcolor]{ + @td[style: "white-space: nowrap;"]{@(hash-ref bib 'number)} + @td[align: 'left]{@i{@(without-braces (hash-ref bib 'title))}} + @td{@(bib-author bib)} + @td{@a[href: @list{javascript: show_bib(@n)@";"}]{[bib]}@|nbsp|@; + @a[href: (hash-ref bib '#:pdf-url)]{[pdf]}@|nbsp|@; + @a[href: (hash-ref bib '#:html-url)]{[html]}}} + @tr[valign: 'top bgcolor: bgcolor + id: @list{bibrow@n} style: "display: none;"]{ + @td{}@td[colspan: 3]{@pre{@bibtext}}}})}}) diff --git a/collects/meta/web/www/techreports.rkt b/collects/meta/web/www/techreports.rkt index e4c26469f4..56c2d9be3a 100644 --- a/collects/meta/web/www/techreports.rkt +++ b/collects/meta/web/www/techreports.rkt @@ -1,9 +1,8 @@ #lang meta/web -(require "resources.rkt" "people.rkt" "../download/data.rkt" - "bib.rkt" (prefix-in - version/utils)) +;; New style TR entries -;; New style TR entries ------------------------------------------------------- +(require "resources.rkt" "people.rkt" "../download/data.rkt") (define (-all-techreports-) (list (TR 1 'reference "Reference: Racket" '(mflatt plt) @@ -104,335 +103,3 @@ @TT|{@cite[(in-bib plt-tr1 "Version M.N")]}| instead.} @dl{@(add-newlines (-all-techreports-))}}) - -;; Old style TR entries, for compatibility ------------------------------------ - -(define last-old-tr "4.9") - -(define authors - '([plt "PLT"] - [ff mflatt robby] - [fplt mflatt plt] - [rplt robby plt] - [ffplt ff plt] - [ffc ff clements] - [fb mflatt eli] - [dorai "Dorai Sitaram"] - [wright "Andrew K. Wright"] - [flanagan "Cormac Flanagan"] - [web burns gregp jay] - [burns "Mike Burns"] - [gregp "Greg Pettyjohn"] - [dyoo "Danny Yoo"] - [ym dyoo jay] - [kathyg "Kathryn E. Gray"] - [jacobm "Jacob Matthews"] - [sowens "Scott Owens"] - [plot alex raymond] - [alex "Alexander Friedman"] - [raymond "Jamie Raymond"] - [dskippy "Mike T. McHenry"] - [ptg "Paul Graunke"] - [ryanc "Ryan Culpepper"] - [steck "Paul Steckler"] - [samth "Sam Tobin-Hochstadt"] - [gcooper "Greg Cooper"])) - -(define doc-defs - ;; each item is: - ;; (docname [docnum] versions author title . attrs) - ;; docname: a symbol for the name of the document - ;; docnum: an optional integer used in the TR number (docname used otherwise) - ;; versions: version range specification (see `versions->pred' below) - ;; author: is a symbol from the `authors' table - ;; title: is a string (no braces) - `(;; old versions - (mzscheme 1 "...*" mflatt "PLT MzScheme: Language Manual") - (mred 2 "...*" ff "PLT MrEd: Graphical Toolbox Manual") - (drscheme 3 "...*" robby "PLT DrScheme: Programming Environment Manual" - [#:note ("See also:" - "R. B. Findler, J. Clements, C. Flanagan, M. Flatt," - "S. Krishnamurthi, P. Steckler and M. Felleisen." - "DrScheme: A programming environment for Scheme," - "Journal of Functional Programming," - "12(2):159--182, March 2002." - "http://www.ccs.neu.edu/scheme/pubs/")]) - (mzlib 4 "200...*" plt "PLT MzLib: Libraries Manual") - (framework "...*" plt "PLT Framework: GUI Application Framework") - (tools "...*" robby "PLT Tools: DrScheme Extension Manual") - (web-server "300...*" web "Web Server Manual") - (mrlib "207...*" plt "PLT MrLib: Graphical Libraries Manual") - (plot "207...*" plot "PLoT Manual") - (mzc "...*" plt "PLT mzc: MzScheme Compiler Manual") - (insidemz "...*" mflatt "Inside PLT MzScheme") - (foreign "...*" eli "PLT Foreign Interface Manual") - (misclib "...*" plt "PLT Miscellaneous Libraries: Reference Manual") - (tex2page "200...*" dorai "TeX2page") - (t-y-scheme "200...*" dorai "Teach Yourself Scheme in Fixnum Days" - [type "Introduction"]) - (match "103p1" wright "Pattern Matching for Scheme") - (mrspidey "103p1" flanagan "PLT MrSpidey: Static Debugger Manual") - ;; new Scheme versions - (quick "*...!" mflatt - "Quick: An Introduction to PLT Scheme with Pictures" - [type "Introduction"]) - (more "*...!" plt "More: Systems Programming with PLT Scheme" - [type "Introduction"]) - (continue "4.1.1..." ym "Continue: Web Applications in PLT Scheme" - [type "Introduction"]) - (guide "*...!" ffplt "Guide: PLT Scheme" [type "Introduction"]) - (reference "*...!" fplt "Reference: PLT Scheme") - (htdp-langs "*...!" plt "How to Design Programs Languages") - (htdc "*...!" kathyg "How to Design Classes Languages") - (teachpack "*...!" plt "Teachpacks") - (eopl "*...!" plt "Essentials of Programming Languages Language") - (drscheme "*...!" rplt "DrScheme: PLT Programming Environment") - (mzc "*...!" plt "mzc: PLT Compilation and Packaging") - (setup-plt "*...!" plt "setup-plt: PLT Configuration and Installation") - (planet "*...!" jacobm "PLaneT: Automatic Package Distribution") - (redex "4.1...!" robby "Redex: Debugging Operational Semantics") - (scribble "*...!" fb "Scribble: PLT Documentation Tool") - (slideshow "*...!" ff "Slideshow: PLT Figure and Presentation Tools") - (web-server "*...!" jay "Web Server: PLT HTTP Server") - (tools "*...!" robby "Plugins: Extending DrScheme") - (gui "*...!" ffc "GUI: PLT Graphics Toolkit") - (framework "*...!" ff "Framework: PLT GUI Application Framework") - (sgl "*...!" sowens "GL: 3-D Graphics") - (plot "*...!" plot "PLoT: Graph Plotting") - (browser "*...!" plt "Browser: Simple HTML Rendering") - (cards "*...!" plt "Cards: Virtual Playing Cards Library") - (embedded-gui "*...!" dskippy "Embedded GUI: Widgets within editor<%>") - (games "*...!" plt "Games: Fun Examples") - (gl-board-game "*...!" plt "GL Board Game: 3-D Game Support") - (mrlib "*...!" plt "MrLib: Extra GUI Libraries") - (string-constants "*...!" plt "String Constants: GUI Internationalization") - (syntax-color "*...!" sowens "Syntax Color: Utilities") - (turtles "*...!" plt "Turtle Graphics") - (net "*...!" plt "Net: PLT Networking Libraries") - (openssl "*...!" plt "OpenSSL") - (file "*...!" plt "File: PLT File Format Libraries") - (html "*...!" plt "HTML: Parsing Library") - (parser-tools "*...!" sowens "Parser Tools: lex and yacc-style Parsing") - (xml "*...!" ptg "XML: Parsing and Writing") - (config "*...!" plt "Config: Installation and Search Paths") - (dynext "*...!" plt "Dynext: Running a C Compiler/Linker") - (errortrace "*...!" plt "Errortrace: Debugging and Profiling") - (macro-debugger "*...!" ryanc "Macro Debugger") - (make "*...!" plt "Make: Dependency Manager") - (readline "*...!" plt "Readline: Terminal Interaction") - (slatex-wrap "*...!" plt "SLaTeX Wrapper") - (trace "*...!" plt "Trace: Instrumentation to Show Function Calls") - (version "*...!" plt "Version: PLT Version Checking") - (foreign "*...!" eli "FFI: PLT Scheme Foreign Interface") - (inside "*...!" mflatt "Inside: PLT Scheme C API") - (cffi "*...!" mflatt "c-lambda: C FFI via mzc") - (mysterx "*...!" steck "MysterX: Using Windows COM Objects in Scheme") - (mzcom "*...!" steck "MzCOM: Scheme as a Windows COM Object") - (srfi "*...!" plt "SRFIs: Libraries") - (htdp-lib "*...!" plt "HtDP: Languages as Libraries") - (swindle "*...!" plt "Swindle") - (syntax "*...!" plt "Syntax: Meta-Programming Helpers") - (typed-scheme "*...!" samth "Typed Scheme: Scheme with Static Types") - (frtime "*...!" gcooper "FrTime: A Language for Reactive Programs") - (lazy "*...!" eli "Lazy Scheme") - (r5rs "*...!" plt "R5RS: Legacy Standard Language" - [#:note ("See also:" - "Rickard Kelsey and William Clinger" - "and Jonathan Rees (Editors)" - "Revised$^5$ Report of the Algorithmic Language Scheme" - "ACM SIGPLAN Notices" - "33(9):26--76, 1998")]) - (graphics "*...!" plt "Graphics: Legacy Library") - (mzlib "*...!" plt "MzLib: Legacy PLT Libraries") - (preprocessor "*...!" eli "mzpp and mztext: Preprocessors") - (mzscheme "*...!" plt "MzScheme: Legacy Module Language") - (algol60 "*...!" plt "Algol 60") - (honu "*...!" plt "Honu") - (test-box-recovery "*...!" plt "Test Box Recovery Tool") - - ;; Racket versions - (quick "!..." mflatt - "Quick: An Introduction to Racket with Pictures" - [type "Introduction"]) - (more "!..." plt "More: Systems Programming with Racket" - [type "Introduction"]) - (guide "!..." ffplt "Guide: Racket" [type "Introduction"]) - (reference "!..." fplt "Reference: Racket") - (drracket "!..." rplt "DrRacket: Programming Environment") - (scribble "!..." fb "Scribble: Racket Documentation Tool") - (slideshow "!..." ff "Slideshow: Racket Figure and Presentation Tools") - (web-server "!..." jay "Web Server: Racket HTTP Server") - (foreign "!..." eli "FFI: Racket Foreign Interface") - (inside "!..." mflatt "Inside: Racket C API") - - ;; Both Scheme and Racket - (r6rs "*..." plt "R6RS: Standard Language" - [#:note ("See also:" - "Michael Sperber and R. Kent Dybvig and Matthew Flatt" - "and Anton Van Straaten (Editors)" - "Revised$^6$ Report of the Algorithmic Language Scheme" - "September 2007")]) - - ;; (article fcffksf:drscheme - ;; [author "Robert Bruce Findler and John Clements and Cormac Flanagan" - ;; "and Matthew Flatt and Shriram Krishnamurthi" - ;; "and Paul Steckler and Matthias Felleisen"] - ;; [title "{DrScheme}: A Programming Environment for {Scheme}"] - ;; [volume 12] - ;; [number 2] - ;; [pages "159--182"] - ;; [month "March"] - ;; [journal "Journal of Functional Programming"] - ;; [year "2002"]) - )) - -;; Use this instead of the built-in one, to make sure that we only deal -;; with known released version. -(define version->integer - (let ([t (for*/hash ([v+d (in-list versions+dates)] - [v (in-value (car v+d))]) - (values v (-version->integer (regexp-replace #rx"^0+" v ""))))]) - (lambda (ver) - (hash-ref t ver (lambda () - (error 'version->integer - "unknown pltreport version: ~e" ver)))))) - -(define (date->year+month date) - (let ([m (regexp-match #rx"^([A-Z][a-z]+) +([0-9]+)$" date)]) - (if m - (values (caddr m) (cadr m)) - (error 'date->year+month "unexpected date string: ~.a" date)))) - -;; "V...V" version range -;; "...V", "V..." open-ended version range -;; "..." all versions -;; "V" specific version -;; "" no versions -;; V can be `*': a number between the v3 docs and the v4 docs -;; V can be `!': a number between the last PLT Scheme and the first Racket -(define v:3->4 (-version->integer "379")) -(define v:4->5 (-version->integer "4.3")) -(define (versions->pred str) - (let* ([str (regexp-replace* #rx" +" str " ")] - [str (regexp-replace #rx"^ +" str "")] - [str (regexp-replace #rx" +$" str "")] - [l (regexp-split #rx" *[.][.][.] *" str)] - [l (map (lambda (x) - (cond [(equal? "" x) #f] - [(equal? "*" x) v:3->4] - [(equal? "!" x) v:4->5] - [(version->integer x)] - [else (error 'versions->pred "bad version: ~e" x)])) - l)]) - (apply - (case-lambda [(ver) - (if ver - (lambda (v) (equal? ver (version->integer v))) - (lambda (v) #f))] - [(from to) - (let ([from (or from -inf.0)] - [to (or to +inf.0)]) - (lambda (v) (<= from (version->integer v) to)))] - [_ (error 'versions->pred "bad versions spec: ~e" str)]) - l))) - -(define authors* - (let ([t (make-hasheq)]) - (for ([a authors]) - (hash-set! t (car a) - ((if (and (= 2 (length a)) (string? (cadr a))) cadr cdr) a))) - t)) - -(define (author->string author) - (let ([r (hash-ref authors* author - (lambda () (person-bibname (find-person author))))]) - (if (string? r) - r - (let ([r (string-join (map author->string r) " and ")]) - (hash-set! authors* author r) - r)))) - -(define doc-defs* - (for/list ([d doc-defs]) - (apply - (lambda (docname docnum versions author title . attrs) - `(,(versions->pred versions) - [#:docname ,docname] - [#:number-template ,(format "PLT-TR~~a-~a-v~~a" (or docnum docname))] - [title ,(with-braces title)] - [author ,(author->string author)] - ,@attrs)) - (if (number? (cadr d)) d (list* (car d) #f (cdr d)))))) - -(define bibs - (for*/list ([ver (filter (let ([last (-version->integer last-old-tr)]) - (lambda (v) (<= (version->integer v) last))) - (reverse all-versions))] - [doc doc-defs*] - #:when ((car doc) ver)) - (define attrs (cdr doc)) - (define (get key [dflt #f]) (cond [(assq key attrs) => cadr] [else dflt])) - (define docname (get '#:docname)) - (define-values (year month) (date->year+month (version->date ver))) - (define number (format (get '#:number-template) year ver)) - (define key (regexp-replace* #rx":" (string-downcase number) "_")) - (define old? (< (version->integer ver) v:4->5)) - (define site (if old? "plt-scheme" "racket-lang")) - (define note - (let ([n1 (format "\\url{http://~a.org/techreports/}" site)] - [n2 (get '#:note #f)]) - (if n2 (cons (string-append n1 ";") n2) (list n1)))) - (define maybe-s (if old? "" "s")) - (define (mk-url dir sfx) - (format "http://download.~a.org/doc~a/~a/~a/~a~a" - site maybe-s ver dir docname sfx)) - (define pdf-url (mk-url "pdf" ".pdf")) - (define pdf-html (mk-url "html" "/")) - (bib 'techreport key - `(,@attrs - [year ,year] - [month ,month] - [institution "PLT Scheme Inc."] - [type "Reference Manual"] - [number ,number] - [#:version ,ver] - [url ,pdf-url] - [#:pdf-url ,pdf-url] - [#:html-url ,pdf-html] - [note ,@note])))) - -(define old-techreports - @page[#:file "techreports/" #:title "Old PLT Technical Reports" - #:part-of 'learning - #:extra-headers - @script/inline[type: "text/javascript"]{ - function show_bib(n) { - var s = document.getElementById("bibrow"+n).style; - s.display = (s.display == "table-row") ? "none" : "table-row"; - }}]{ - @p{@strong{Note:} the entries on this page are outdated, please see the new - @techreports page.} - @p{PLT publishes technical reports about some of its tools and libraries so - that scholars who wish to give proper credit to some of our innovations - have a definite citation. Each entry below provides the full pdf and a - bibtex entry; some of the bibtex entries provide additional citations to - published papers.} - @table[width: "98%" cellspacing: 0 cellpadding: 6 border: 0 - align: 'center style: "font-size: 75%;"]{ - @(for/list ([bib (in-list bibs)] [n (in-naturals)]) - (define bgcolor (if (even? n) "#e0e0e0" "white")) - (define bibtext - (parameterize ([current-output-port (open-output-string)]) - (display-bib bib) - (get-output-string (current-output-port)))) - @list{ - @tr[valign: 'top bgcolor: bgcolor]{ - @td[style: "white-space: nowrap;"]{@(hash-ref bib 'number)} - @td[align: 'left]{@i{@(without-braces (hash-ref bib 'title))}} - @td{@(bib-author bib)} - @td{@a[href: @list{javascript: show_bib(@n)@";"}]{[bib]}@|nbsp|@; - @a[href: (hash-ref bib '#:pdf-url)]{[pdf]}@|nbsp|@; - @a[href: (hash-ref bib '#:html-url)]{[html]}}} - @tr[valign: 'top bgcolor: bgcolor - id: @list{bibrow@n} style: "display: none;"]{ - @td{}@td[colspan: 3]{@pre{@bibtext}}}})}})