gcc.
Factor supports various platforms. For an up-to-date list, see
-<http://factorcode.org/getfactor.fhtml>.
+<http://factorcode.org>.
Factor requires gcc 3.4 or later.
Run 'make' ('gmake' on *BSD) with no parameters to build the Factor VM.
-Compilation will yield an executable named 'factor' on Unix,
-'factor.exe' on Windows XP/Vista, and 'factor-ce.exe' on Windows CE.
-
-* Libraries needed for compilation
-
-For X11 support, you need recent development libraries for libc,
-Freetype, X11, OpenGL and GLUT. On a Debian-derived Linux distribution
-(like Ubuntu), you can use the following line to grab everything:
-
- sudo apt-get install libc6-dev libfreetype6-dev libx11-dev glutg3-dev
-
* Bootstrapping the Factor image
Once you have compiled the Factor runtime, you must bootstrap the Factor
On Unix, Factor can either run a graphical user interface using X11, or
a terminal listener.
+For X11 support, you need recent development libraries for libc,
+Pango, X11, OpenGL and GLUT. On a Debian-derived Linux distribution
+(like Ubuntu), you can use the following line to grab everything:
+
+ sudo apt-get install libc6-dev libpango-1.0-dev libx11-dev glutg3-dev
+
If your DISPLAY environment variable is set, the UI will start
automatically:
./factor -run=listener
-If you're inside a terminal session, you can start the UI with one of
-the following two commands:
-
- ui
- [ ui ] in-thread
-
-The latter keeps the terminal listener running.
-
* Running Factor on Mac OS X - Cocoa UI
On Mac OS X, a Cocoa UI is available in addition to the terminal
Then bootstrap with the following switches:
- ./factor -i=boot.<cpu>.image -ui-backend=x11
+ ./factor -i=boot.<cpu>.image -ui-backend=x11 -ui-text-backend=pango
Now if $DISPLAY is set, running ./factor will start the UI.
factor.com -i=boot.<cpu>.image
+Before bootstrapping, you will need to download the DLLs for the Pango
+text rendering library. The required DLLs are listed in
+build-support/dlls.txt and are available from the following location:
+
+ <http://factorcode.org/dlls>
+
Once bootstrapped, double-clicking factor.exe or factor.com starts
the Factor UI.
* The Factor FAQ
-The Factor FAQ is available at <http://factorcode.org/faq.fhtml>.
+The Factor FAQ is available at the following location:
+
+ <http://concatenative.org/wiki/view/Factor/FAQ>
* Command line usage
[ "<p><img src=\"lol.jpg\" alt=\"teh lol\"/></p>" ] [ "[[image:lol.jpg|teh lol]]" convert-farkup ] unit-test
[ "<p><a href=\"http://lol.com\">http://lol.com</a></p>" ] [ "[[http://lol.com]]" convert-farkup ] unit-test
[ "<p><a href=\"http://lol.com\">haha</a></p>" ] [ "[[http://lol.com|haha]]" convert-farkup ] unit-test
+[ "<p><a href=\"http://lol.com/search?q=sex\">haha</a></p>" ] [ "[[http://lol.com/search?q=sex|haha]]" convert-farkup ] unit-test
[ "<p><a href=\"Foo/Bar\">Bar</a></p>" ] [ "[[Foo/Bar]]" convert-farkup ] unit-test
"/wiki/view/" relative-link-prefix [
{ [ dup [ 127 > ] any? ] [ drop invalid-url ] }
{ [ dup first "/\\" member? ] [ drop invalid-url ] }
{ [ CHAR: : over member? ] [ dup absolute-url? [ drop invalid-url ] unless ] }
- [ relative-link-prefix get prepend "" like ]
- } cond url-encode ;
+ [ relative-link-prefix get prepend "" like url-encode ]
+ } cond ;
: write-link ( href text -- xml )
- [ check-url link-no-follow? get "true" and ] dip
- [XML <a href=<-> nofollow=<->><-></a> XML] ;
+ [ check-url link-no-follow? get "nofollow" and ] dip
+ [XML <a href=<-> rel=<->><-></a> XML] ;
: write-image-link ( href text -- xml )
disable-images? get [
[ "application/octet-stream" binary ] [ "application/octet-stream" parse-content-type ] unit-test
-[ { } ] [ "" parse-cookie ] unit-test
-[ { } ] [ "" parse-set-cookie ] unit-test
-
-! Make sure that totally invalid cookies don't confuse us
-[ { } ] [ "hello world; how are you" parse-cookie ] unit-test
-
: lf>crlf "\n" split "\r\n" join ;
STRING: read-request-test-1
: check-header-string ( str -- str )
#! http://en.wikipedia.org/wiki/HTTP_Header_Injection
- dup "\r\n\"" intersects?
+ dup "\r\n" intersects?
[ "Header injection attack" throw ] when ;
: write-header ( assoc -- )
--- /dev/null
+IN: http.parsers.tests
+USING: http http.parsers tools.test ;
+
+[ { } ] [ "" parse-cookie ] unit-test
+[ { } ] [ "" parse-set-cookie ] unit-test
+
+! Make sure that totally invalid cookies don't confuse us
+[ { } ] [ "hello world; how are you" parse-cookie ] unit-test
+
+[ { T{ cookie { name "__s" } { value "12345567" } } } ]
+[ "__s=12345567" parse-cookie ]
+unit-test
+
+[ { T{ cookie { name "__s" } { value "12345567" } } } ]
+[ "__s=12345567;" parse-cookie ]
+unit-test
\ No newline at end of file
'value' ,
'space' ,
] seq*
- [ ";,=" member? not ] satisfy repeat1 [ drop f ] action
+ [ ";,=" member? not ] satisfy repeat0 [ drop f ] action
2choice ;
PEG: (parse-cookie) ( string -- alist )
"CGI output follows" >>message\r
swap '[\r
binary encode-output\r
- _ output-stream get swap <cgi-process> binary <process-stream> [\r
+ output-stream get _ <cgi-process> binary <process-stream> [\r
post-request? [ request get post-data>> data>> write flush ] when\r
- '[ _ write ] each-block\r
+ '[ _ stream-write ] each-block\r
] with-stream\r
] >>body ;\r
\r
[ "#" split1 drop ] map harvest ;
: split-column ( line -- columns )
- " \t" split harvest 2 head ;
+ " \t" split harvest 2 short head 2 f pad-tail ;
: parse-hex ( s -- n )
- 2 short tail hex> ;
+ dup [
+ "0x" ?head [ "U+" ?head [ "Missing 0x or U+" throw ] unless ] unless
+ hex>
+ ] when ;
: parse-line ( line -- code-unicode )
split-column [ parse-hex ] map ;
-! Copyright (C) 2007, 2008 Slava Pestov.
+! Copyright (C) 2007, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: namespaces make continuations.private kernel.private init
assocs kernel vocabs words sequences memory io system arrays
: copy-vm ( executable bundle-name -- vm )
prepend-path vm over copy-file ;
-: copy-fonts ( name dir -- )
+CONSTANT: theme-path "basis/ui/gadgets/theme/"
+
+: copy-theme ( name dir -- )
deploy-ui? get [
- append-path "resource:fonts/" swap copy-tree-into
+ append-path
+ theme-path append-path
+ [ make-directories ]
+ [ theme-path "resource:" prepend swap copy-tree ] bi
] [ 2drop ] if ;
: image-name ( vocab bundle-name -- str )
IN: tools.deploy.unix
: create-app-dir ( vocab bundle-name -- vm )
- dup "" copy-fonts
+ dup "" copy-theme
copy-vm
dup OCT: 755 set-file-permissions ;
! Copyright (C) 2007, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
-USING: io io.files io.pathnames io.directories kernel namespaces
+USING: io io.files io.pathnames io.directories io.encodings.ascii kernel namespaces
sequences locals system splitting tools.deploy.backend
tools.deploy.config tools.deploy.config.editor assocs hashtables
prettyprint combinators windows.shell32 windows.user32 ;
: copy-dll ( bundle-name -- )
"resource:factor.dll" swap copy-file-into ;
-: copy-freetype ( bundle-name -- )
- {
- "resource:freetype6.dll"
- "resource:zlib1.dll"
- } swap copy-files-into ;
+: copy-pango ( bundle-name -- )
+ "resource:build-support/dlls.txt" ascii file-lines
+ [ "resource:" prepend-path ] map
+ swap copy-files-into ;
:: copy-vm ( executable bundle-name extension -- vm )
vm "." split1-last drop extension append
: create-exe-dir ( vocab bundle-name -- vm )
dup copy-dll
deploy-ui? get [
- [ copy-freetype ]
- [ "" copy-fonts ]
+ [ copy-pango ]
+ [ "" copy-theme ]
[ ".exe" copy-vm ] tri
] [ ".com" copy-vm ] if ;
[ [ raise-window ] [ gadget-child show-help ] bi ]
[ (browser-window) ] if* ;
-: show-browser ( -- ) "handbook" com-browse ;
+: show-browser ( -- )
+ [ browser-gadget? ] find-window
+ [ raise-window ] [ browser-window ] if* ;
\ show-browser H{ { +nullary+ t } } define-command
USING: alien.syntax ;
IN: unix
-: FD_SETSIZE 1024 ;
+CONSTANT: FD_SETSIZE 1024
C-STRUCT: addrinfo
{ "int" "flags" }
--- /dev/null
+libcairo-2.dll
+libgio-2.0-0.dll
+libglib-2.0-0.dll
+libgmodule-2.0-0.dll
+libgobject-2.0-0.dll
+libgthread-2.0-0.dll
+libpango-1.0-0.dll
+libpangocairo-1.0-0.dll
+libpangowin32-1.0-0.dll
+libpng12-0.dll
+libtiff3.dll
+zlib1.dll
maybe_download_dlls() {
if [[ $OS == winnt ]] ; then
- get_url http://factorcode.org/dlls/freetype6.dll
- get_url http://factorcode.org/dlls/zlib1.dll
- get_url http://factorcode.org/dlls/OpenAL32.dll
- get_url http://factorcode.org/dlls/alut.dll
- get_url http://factorcode.org/dlls/comerr32.dll
- get_url http://factorcode.org/dlls/gssapi32.dll
- get_url http://factorcode.org/dlls/iconv.dll
- get_url http://factorcode.org/dlls/k5sprt32.dll
- get_url http://factorcode.org/dlls/krb5_32.dll
- get_url http://factorcode.org/dlls/libcairo-2.dll
- get_url http://factorcode.org/dlls/libeay32.dll
- get_url http://factorcode.org/dlls/libiconv2.dll
- get_url http://factorcode.org/dlls/libintl3.dll
- get_url http://factorcode.org/dlls/libpq.dll
- get_url http://factorcode.org/dlls/libxml2.dll
- get_url http://factorcode.org/dlls/libxslt.dll
- get_url http://factorcode.org/dlls/msvcr71.dll
- get_url http://factorcode.org/dlls/ogg.dll
- get_url http://factorcode.org/dlls/pgaevent.dll
- get_url http://factorcode.org/dlls/sqlite3.dll
- get_url http://factorcode.org/dlls/ssleay32.dll
- get_url http://factorcode.org/dlls/theora.dll
- get_url http://factorcode.org/dlls/vorbis.dll
- chmod 777 *.dll
- check_ret chmod
+ for file in `cat build-support/dlls.txt`; do
+ get_url http://factorcode.org/dlls/$file
+ chmod 777 *.dll
+ check_ret chmod
+ done
fi
}
}
install_build_system_apt() {
- sudo apt-get --yes install libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap gcc make
+ sudo apt-get --yes install libc6-dev libpango-1.0-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap gcc make
check_ret sudo
}
-! Copyright (C) 2008 Eduardo Cavazos, Slava Pestov.
+! Copyright (C) 2008, 2009 Eduardo Cavazos, Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays calendar combinators.short-circuit
-continuations debugger http.client io.directories io.files
-io.launcher io.pathnames kernel make mason.common mason.config
+continuations debugger http.client io.directories io.files io.launcher
+io.pathnames io.encodings.ascii kernel make mason.common mason.config
mason.platform mason.report mason.email namespaces sequences ;
IN: mason.child
: make-cmd ( -- args )
gnu-make platform 2array ;
+: dll-url ( -- url )
+ "http://factorcode.org/dlls/"
+ target-cpu get "x86.64" = [ "64/" append ] when ;
+
: download-dlls ( -- )
target-os get "winnt" = [
- "http://factorcode.org/dlls/"
- target-cpu get "x86.64" = [ "64/" append ] when
- [ "freetype6.dll" append ]
- [ "zlib1.dll" append ] bi
- [ download ] bi@
+ dll-url "build-support/dlls.txt" ascii file-lines
+ [ append download ] with each
] when ;
: make-vm ( -- )
<t:chloe xmlns:t="http://factorcode.org/chloe/1.0">
+ <t:atom t:href="$planet/feed.xml">[ planet-factor ]</t:atom>
+
<t:title>[ planet-factor ]</t:title>
<table width="100%" cellpadding="10">