]> gitweb.factorcode.org Git - factor.git/commitdiff
Source responder with syntax highlighting
authorSlava Pestov <slava@factorcode.org>
Thu, 6 Dec 2007 05:23:05 +0000 (00:23 -0500)
committerSlava Pestov <slava@factorcode.org>
Thu, 6 Dec 2007 05:23:05 +0000 (00:23 -0500)
extra/webapps/file/file.factor [changed mode: 0644->0755]
extra/webapps/source/source.factor [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index d8fec99..5ec52ab
@@ -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
diff --git a/extra/webapps/source/source.factor b/extra/webapps/source/source.factor
new file mode 100755 (executable)
index 0000000..ddc2f15
--- /dev/null
@@ -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