Source responder with syntax highlighting

release
Slava Pestov 2007-12-06 00:23:05 -05:00
parent 0e60982aca
commit 59566c20e9
2 changed files with 39 additions and 6 deletions

25
extra/webapps/file/file.factor Normal file → Executable file
View File

@ -1,4 +1,4 @@
! Copyright (C) 2004, 2006 Slava Pestov.
! Copyright (C) 2004, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: calendar html io io.files kernel math math.parser
http.server.responders http.server.templating namespaces parser
@ -31,15 +31,24 @@ IN: webapps.file
"304 Not Modified" response
now timestamp>http-string "Date" associate print-header ;
! You can override how files are served in a custom responder
SYMBOL: serve-file-hook
[
nip
file-response
stdio get stream-copy
] serve-file-hook set-global
: serve-static ( filename mime-type -- )
over last-modified-matches? [
2drop not-modified-response
] [
dupd file-response
"method" get "head" = [
drop
file-response
] [
<file-reader> stdio get stream-copy
>r dup <file-reader> r>
serve-file-hook get call
] if
] if ;
@ -53,9 +62,13 @@ SYMBOL: page
: include-page ( filename -- )
"doc-root" get swap path+ run-page ;
: serve-fhtml ( filename -- )
serving-html
"method" get "head" = [ drop ] [ run-page ] if ;
: serve-file ( filename -- )
dup mime-type dup "application/x-factor-server-page" =
[ drop serving-html run-page ] [ serve-static ] if ;
[ drop serve-fhtml ] [ serve-static ] if ;
: file. ( name dirp -- )
[ "/" append ] when
@ -107,7 +120,7 @@ SYMBOL: page
global [
! Serve up our own source code
"resources" [
"resources" [
[
"" resource-path "doc-root" set
file-responder

View File

@ -0,0 +1,20 @@
! Copyright (C) 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: io.files namespaces webapps.file http.server.responders
xmode.code2html kernel ;
IN: webapps.source
global [
! Serve up our own source code
"source" [
[
"" resource-path "doc-root" set
[
drop
serving-html
htmlize-stream
] serve-file-hook set
file-responder
] with-scope
] add-simple-responder
] bind