Merge branch 'master' of factorcode.org:/git/factor

Conflicts:

	extra/bake/bake.factor
db4
Eduardo Cavazos 2008-07-08 23:05:25 -05:00
commit 515dfd3ef2
82 changed files with 560 additions and 400 deletions

View File

@ -3,7 +3,7 @@ AR = ar
LD = ld LD = ld
EXECUTABLE = factor EXECUTABLE = factor
VERSION = 0.91 VERSION = 0.92
IMAGE = factor.image IMAGE = factor.image
BUNDLE = Factor.app BUNDLE = Factor.app

View File

@ -198,9 +198,9 @@ M: long-long-type box-return ( type -- )
: c-bool> ( int -- ? ) : c-bool> ( int -- ? )
zero? not ; zero? not ;
: >c-array ( seq type word -- ) : >c-array ( seq type word -- byte-array )
>r >r dup length dup r> <c-array> dup -roll r> [ [ dup length ] dip <c-array> ] dip
[ execute ] 2curry 2each ; inline [ [ execute ] 2curry each-index ] 2keep drop ; inline
: >c-array-quot ( type vocab -- quot ) : >c-array-quot ( type vocab -- quot )
dupd set-nth-word [ >c-array ] 2curry ; dupd set-nth-word [ >c-array ] 2curry ;

View File

@ -505,6 +505,8 @@ M: quotation '
jit-r>-word jit-r>-word
jit-swap jit-swap
jit-swap-word jit-swap-word
jit-over
jit-over-word
jit-fixnum-fast jit-fixnum-fast
jit-fixnum-fast-word jit-fixnum-fast-word
jit-fixnum>= jit-fixnum>=

View File

@ -512,7 +512,7 @@ tuple
{ "unimplemented" "kernel.private" } { "unimplemented" "kernel.private" }
{ "gc-reset" "memory" } { "gc-reset" "memory" }
} }
dup length [ >r first2 r> make-primitive ] 2each [ >r first2 r> make-primitive ] each-index
! Bump build number ! Bump build number
"build" "kernel" create build 1+ 1quotation define "build" "kernel" create build 1+ 1quotation define

View File

@ -52,7 +52,7 @@ M: string error. print ;
nl nl
"The following restarts are available:" print "The following restarts are available:" print
nl nl
dup length [ restart. ] 2each [ restart. ] each-index
] if ; ] if ;
: print-error ( error -- ) : print-error ( error -- )

View File

@ -64,8 +64,7 @@ DEFER: if
: 2keep ( x y quot -- x y ) 2over 2slip ; inline : 2keep ( x y quot -- x y ) 2over 2slip ; inline
: 3keep ( x y z quot -- x y z ) : 3keep ( x y z quot -- x y z ) >r 3dup r> -roll 3slip ; inline
>r 3dup r> -roll 3slip ; inline
! Cleavers ! Cleavers
: bi ( x p q -- ) : bi ( x p q -- )

View File

@ -43,8 +43,8 @@ ARTICLE: "sequences-integers" "Integer sequences and counted loops"
$nl $nl
"For example, the " { $link each } " combinator, given an integer, simply calls a quotation that number of times, pushing a counter on each iteration that ranges from 0 up to that integer:" "For example, the " { $link each } " combinator, given an integer, simply calls a quotation that number of times, pushing a counter on each iteration that ranges from 0 up to that integer:"
{ $example "3 [ . ] each" "0\n1\n2" } { $example "3 [ . ] each" "0\n1\n2" }
"A common idiom is to iterate over a sequence, while also maintaining a loop counter. This can be done using " { $link 2each } ":" "A common idiom is to iterate over a sequence, while also maintaining a loop counter. This can be done using " { $link each-index } ", " { $link map-index } " and " { $link reduce-index } "."
{ $example "{ \"a\" \"b\" \"c\" } dup length [\n \"Index: \" write . \"Element: \" write .\n] 2each" "Index: 0\nElement: \"a\"\nIndex: 1\nElement: \"b\"\nIndex: 2\nElement: \"c\"" } $nl
"Combinators that produce new sequences, such as " { $link map } ", will output an array if the input is an integer." ; "Combinators that produce new sequences, such as " { $link map } ", will output an array if the input is an integer." ;
ARTICLE: "sequences-access" "Accessing sequence elements" ARTICLE: "sequences-access" "Accessing sequence elements"

View File

@ -426,6 +426,18 @@ PRIVATE>
: follow ( obj quot -- seq ) : follow ( obj quot -- seq )
>r [ dup ] r> [ keep ] curry [ ] unfold nip ; inline >r [ dup ] r> [ keep ] curry [ ] unfold nip ; inline
: prepare-index ( seq quot -- seq n quot )
>r dup length r> ; inline
: each-index ( seq quot -- )
prepare-index 2each ; inline
: map-index ( seq quot -- )
prepare-index 2map ; inline
: reduce-index ( seq identity quot -- )
swapd each-index ; inline
: index ( obj seq -- n ) : index ( obj seq -- n )
[ = ] with find drop ; [ = ] with find drop ;

View File

@ -10,7 +10,7 @@ HELP: add-alarm
HELP: later HELP: later
{ $values { "quot" quotation } { "dt" duration } { "alarm" alarm } } { $values { "quot" quotation } { "dt" duration } { "alarm" alarm } }
{ $description "Creates and registers an alarm which calls the quotation once at " { $snippet "time" } { $link from-now } "." } ; { $description "Creates and registers an alarm which calls the quotation once at " { $snippet "time" } " from now." } ;
HELP: cancel-alarm HELP: cancel-alarm
{ $values { "alarm" alarm } } { $values { "alarm" alarm } }

View File

@ -82,10 +82,10 @@ PRIVATE>
<alarm> [ register-alarm ] keep ; <alarm> [ register-alarm ] keep ;
: later ( quot dt -- alarm ) : later ( quot dt -- alarm )
from-now f add-alarm ; hence f add-alarm ;
: every ( quot dt -- alarm ) : every ( quot dt -- alarm )
[ from-now ] keep add-alarm ; [ hence ] keep add-alarm ;
: cancel-alarm ( alarm -- ) : cancel-alarm ( alarm -- )
alarm-entry [ alarms get-global heap-delete ] if-box? ; alarm-entry [ alarms get-global heap-delete ] if-box? ;

View File

@ -1 +0,0 @@
Eduardo Cavazos

View File

@ -1,10 +0,0 @@
USING: kernel arrays sequences sequences.private macros ;
IN: arrays.lib
MACRO: narray ( n -- quot )
dup [ f <array> ] curry
swap <reversed> [
[ swap [ set-nth-unsafe ] keep ] curry
] map concat append ;

View File

@ -1 +0,0 @@
Non-core array words

View File

@ -1 +0,0 @@
collections

View File

@ -1,7 +1,7 @@
USING: kernel parser namespaces sequences quotations arrays vectors splitting USING: kernel parser namespaces sequences quotations arrays vectors splitting
strings words math strings words math generalizations
macros arrays.lib combinators.lib combinators.conditional newfx ; macros combinators.lib combinators.conditional newfx ;
IN: bake IN: bake

View File

@ -1,6 +1,6 @@
USING: tools.test math prettyprint kernel io arrays vectors sequences USING: tools.test math prettyprint kernel io arrays vectors sequences
arrays.lib bake bake.fry ; generalizations bake bake.fry ;
IN: bake.fry.tests IN: bake.fry.tests

2
extra/bitfields/bitfields.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: parser lexer kernel math sequences namespaces assocs summary USING: parser lexer kernel math sequences namespaces assocs summary
words splitting math.parser arrays sequences.next mirrors words splitting math.parser arrays sequences.next mirrors
shuffle compiler.units ; generalizations compiler.units ;
IN: bitfields IN: bitfields
! Example: ! Example:

View File

@ -284,7 +284,7 @@ MEMO: unix-1970 ( -- timestamp )
: now ( -- timestamp ) gmt >local-time ; : now ( -- timestamp ) gmt >local-time ;
: from-now ( dt -- timestamp ) now swap time+ ; : hence ( dt -- timestamp ) now swap time+ ;
: ago ( dt -- timestamp ) now swap time- ; : ago ( dt -- timestamp ) now swap time- ;
: day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 } ; inline : day-counts { 0 31 28 31 30 31 30 31 31 30 31 30 31 } ; inline
@ -303,41 +303,25 @@ GENERIC: days-in-year ( obj -- n )
M: integer days-in-year ( year -- n ) leap-year? 366 365 ? ; M: integer days-in-year ( year -- n ) leap-year? 366 365 ? ;
M: timestamp days-in-year ( timestamp -- n ) year>> days-in-year ; M: timestamp days-in-year ( timestamp -- n ) year>> days-in-year ;
GENERIC: days-in-month ( obj -- n ) : (days-in-month) ( year month -- n )
dup 2 = [ drop leap-year? 29 28 ? ] [ nip day-counts nth ] if ;
M: array days-in-month ( obj -- n ) : days-in-month ( timestamp -- n )
first2 dup 2 = [ >date< drop (days-in-month) ;
drop leap-year? 29 28 ?
] [
nip day-counts nth
] if ;
M: timestamp days-in-month ( timestamp -- n ) : day-of-week ( timestamp -- n )
>date< drop 2array days-in-month ;
GENERIC: day-of-week ( obj -- n )
M: timestamp day-of-week ( timestamp -- n )
>date< zeller-congruence ; >date< zeller-congruence ;
M: array day-of-week ( array -- n ) :: (day-of-year) ( year month day -- n )
first3 zeller-congruence ; day-counts month head-slice sum day +
year leap-year? [
GENERIC: day-of-year ( obj -- n ) year month day <date>
year 3 1 <date>
M: array day-of-year ( array -- n )
first3
3dup day-counts rot head-slice sum +
swap leap-year? [
-roll
pick 3 1 <date> >r <date> r>
after=? [ 1+ ] when after=? [ 1+ ] when
] [ ] when ;
>r 3drop r>
] if ;
M: timestamp day-of-year ( timestamp -- n ) : day-of-year ( timestamp -- n )
>date< 3array day-of-year ; >date< (day-of-year) ;
: day-offset ( timestamp m -- timestamp n ) : day-offset ( timestamp m -- timestamp n )
over day-of-week - ; inline over day-of-week - ; inline
@ -373,7 +357,7 @@ M: timestamp day-of-year ( timestamp -- n )
M: timestamp sleep-until timestamp>millis sleep-until ; M: timestamp sleep-until timestamp>millis sleep-until ;
M: duration sleep from-now sleep-until ; M: duration sleep hence sleep-until ;
{ {
{ [ os unix? ] [ "calendar.unix" ] } { [ os unix? ] [ "calendar.unix" ] }

View File

@ -57,9 +57,9 @@ GENERIC: month. ( obj -- )
M: array month. ( pair -- ) M: array month. ( pair -- )
first2 first2
[ month-names nth write bl number>string print ] 2keep [ month-names nth write bl number>string print ]
[ 1 zeller-congruence ] 2keep [ 1 zeller-congruence ]
2array days-in-month day-abbreviations2 " " join print [ (days-in-month) day-abbreviations2 " " join print ] 2tri
over " " <repetition> concat write over " " <repetition> concat write
[ [
[ 1+ day. ] keep [ 1+ day. ] keep

View File

@ -11,7 +11,7 @@ HELP: column
HELP: <column> ( seq n -- column ) HELP: <column> ( seq n -- column )
{ $values { "seq" sequence } { "n" "a non-negative integer" } { "column" column } } { $values { "seq" sequence } { "n" "a non-negative integer" } { "column" column } }
{ $description "Outputs a new virtual sequence which presents a fixed column of a matrix represented as a sequence of rows." "The " { $snippet "i" } "th element of a column is the " { $snippet "n" } "th element of the " { $snippet "i" } "th element of" { $snippet "seq" } ". Every element of " { $snippet "seq" } " must be a sequence, and all sequences must have equal length." } { $description "Outputs a new virtual sequence which presents a fixed column of a matrix represented as a sequence of rows." "The " { $snippet "i" } "th element of a column is the " { $snippet "n" } "th element of the " { $snippet "i" } "th element of " { $snippet "seq" } ". Every element of " { $snippet "seq" } " must be a sequence, and all sequences must have equal length." }
{ $examples { $examples
{ $example { $example
"USING: arrays prettyprint columns ;" "USING: arrays prettyprint columns ;"

2
extra/combinators/cleave/cleave.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: kernel combinators words quotations arrays sequences locals macros USING: kernel combinators words quotations arrays sequences locals macros
shuffle combinators.lib arrays.lib fry ; shuffle combinators.lib generalizations fry ;
IN: combinators.cleave IN: combinators.cleave

View File

@ -11,46 +11,3 @@ HELP: generate
"[ 20 random-prime ] [ 4 mod 3 = ] generate ." "[ 20 random-prime ] [ 4 mod 3 = ] generate ."
"526367" "526367"
} ; } ;
HELP: ndip
{ $values { "quot" quotation } { "n" number } }
{ $description "A generalisation of " { $link dip } " that can work "
"for any stack depth. The quotation will be called with a stack that "
"has 'n' items removed first. The 'n' items are then put back on the "
"stack. The quotation can consume and produce any number of items."
}
{ $examples
{ $example "USING: combinators.lib kernel prettyprint ;" "1 2 [ dup ] 1 ndip .s" "1\n1\n2" }
{ $example "USING: combinators.lib kernel prettyprint ;" "1 2 3 [ drop ] 2 ndip .s" "2\n3" }
}
{ $see-also dip 2dip } ;
HELP: nslip
{ $values { "n" number } }
{ $description "A generalisation of " { $link slip } " that can work "
"for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
"removed from the stack, the quotation called, and the items restored."
}
{ $examples
{ $example "USING: combinators.lib prettyprint ;" "[ 99 ] 1 2 3 4 5 5 nslip .s" "99\n1\n2\n3\n4\n5" }
}
{ $see-also slip nkeep } ;
HELP: nkeep
{ $values { "quot" quotation } { "n" number } }
{ $description "A generalisation of " { $link keep } " that can work "
"for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
"saved, the quotation called, and the items restored."
}
{ $examples
{ $example "USING: combinators.lib kernel prettyprint ;" "1 2 3 4 5 [ drop drop drop drop drop 99 ] 5 nkeep .s" "99\n1\n2\n3\n4\n5" }
}
{ $see-also keep nslip } ;
! HELP: &&
! { $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } { "?" "a boolean" } }
! { $description "Calls each quotation in turn; outputs " { $link f } " if one of the quotations output " { $link f } ", otherwise outputs " { $link t } ". As soon as a quotation outputs " { $link f } ", evaluation stops and subsequent quotations are not called." } ;
! HELP: ||
! { $values { "quots" "a sequence of quotations with stack effect " { $snippet "( ... -- ... ? )" } } { "?" "a boolean" } }
! { $description "Calls each quotation in turn; outputs " { $link t } " if one of the quotations output " { $link t } ", otherwise outputs " { $link f } ". As soon as a quotation outputs " { $link t } ", evaluation stops and subsequent quotations are not called." } ;

View File

@ -5,16 +5,6 @@ IN: combinators.lib.tests
[ 5 ] [ [ 10 random ] [ 5 = ] generate ] unit-test [ 5 ] [ [ 10 random ] [ 5 = ] generate ] unit-test
[ t ] [ [ 10 random ] [ even? ] generate even? ] unit-test [ t ] [ [ 10 random ] [ even? ] generate even? ] unit-test
[ [ 99 ] 1 2 3 4 5 5 nslip ] must-infer
{ 99 1 2 3 4 5 } [ [ 99 ] 1 2 3 4 5 5 nslip ] unit-test
[ 1 2 3 4 5 [ drop drop drop drop drop 2 ] 5 nkeep ] must-infer
{ 2 1 2 3 4 5 } [ 1 2 3 4 5 [ drop drop drop drop drop 2 ] 5 nkeep ] unit-test
[ [ 1 2 3 + ] ] [ 1 2 3 [ + ] 3 ncurry ] unit-test
[ { 1 2 } { 2 4 } { 3 8 } { 4 16 } { 5 32 } ] [ 1 2 3 4 5 [ dup 2^ 2array ] 5 napply ] unit-test
[ [ dup 2^ 2array ] 5 napply ] must-infer
[ { "xyc" "xyd" } ] [ "x" "y" { "c" "d" } [ 3append ] 2 nwith map ] unit-test
[ { "foo" "xbarx" } ] [ { "foo" "xbarx" } ]
[ [
{ "oof" "bar" } { [ reverse ] [ "x" swap "x" 3append ] } parallel-call { "oof" "bar" } { [ reverse ] [ "x" swap "x" 3append ] } parallel-call

View File

@ -4,7 +4,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel combinators fry namespaces quotations hashtables USING: kernel combinators fry namespaces quotations hashtables
sequences assocs arrays inference effects math math.ranges sequences assocs arrays inference effects math math.ranges
arrays.lib shuffle macros continuations locals ; generalizations macros continuations locals ;
IN: combinators.lib IN: combinators.lib
@ -12,30 +12,10 @@ IN: combinators.lib
! Generalized versions of core combinators ! Generalized versions of core combinators
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MACRO: ndip ( quot n -- ) dup saver -rot restorer 3append ;
MACRO: nslip ( n -- ) dup saver [ call ] rot restorer 3append ;
: 4slip ( quot a b c d -- a b c d ) 4 nslip ; inline : 4slip ( quot a b c d -- a b c d ) 4 nslip ; inline
MACRO: nkeep ( n -- )
[ ] [ 1+ ] [ ] tri
'[ [ , ndup ] dip , -nrot , nslip ] ;
: 4keep ( w x y z quot -- w x y z ) 4 nkeep ; inline : 4keep ( w x y z quot -- w x y z ) 4 nkeep ; inline
MACRO: ncurry ( n -- ) [ curry ] n*quot ;
MACRO:: nwith ( quot n -- )
[let | n' [ n 1+ ] |
[ n' -nrot [ n' nrot quot call ] n ncurry ] ] ;
MACRO: napply ( n -- )
2 [a,b]
[ [ 1- ] [ ] bi
'[ , ntuck , nslip ] ]
map concat >quotation [ call ] append ;
: 2with ( param1 param2 obj quot -- obj curry ) : 2with ( param1 param2 obj quot -- obj curry )
with with ; inline with with ; inline

2
extra/combinators/short-circuit/short-circuit.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: kernel combinators quotations arrays sequences assocs USING: kernel combinators quotations arrays sequences assocs
locals shuffle macros fry ; locals generalizations macros fry ;
IN: combinators.short-circuit IN: combinators.short-circuit

View File

@ -5,25 +5,26 @@ ARTICLE: "ctags" "Ctags file"
{ $emphasis "ctags" } " generates a index file of every factor word in ctags format as supported by vi and other editors. More information can be found at " { $url "http://en.wikipedia.org/wiki/Ctags" } "." { $emphasis "ctags" } " generates a index file of every factor word in ctags format as supported by vi and other editors. More information can be found at " { $url "http://en.wikipedia.org/wiki/Ctags" } "."
{ $subsection ctags } { $subsection ctags }
{ $subsection ctags-write } { $subsection ctags-write }
{ $subsection ctag-strings }
{ $subsection ctag } ; { $subsection ctag } ;
HELP: ctags ( path -- ) HELP: ctags ( path -- )
{ $values { "path" "a pathname string" } } { $values { "path" "a pathname string" } }
{ $description "Generates a index file in ctags format and stores in " { $snippet "path" } "." } { $description "Generates a index file in ctags format and stores in " { $snippet "path" } "." }
{ $examples { $examples
{ $example { $unchecked-example
"USING: ctags ;" "USING: ctags ;"
"\"tags\" ctags-write" "\"tags\" ctags"
"" ""
} }
} ; } ;
HELP: ctags-write ( seq path -- ) HELP: ctags-write ( seq path -- )
{ $values { "seq" sequence } { $values { "alist" "an association list" }
{ "path" "a pathname string" } } { "path" "a pathname string" } }
{ $description "Stores a " { $snippet "seq" } " in " { $snippet "path" } ". " { $snippet "seq" } " must be an association list with ctags format: key must be a valid word and value a sequence whose first element is a resource name and second element is a line number" } { $description "Stores a " { $snippet "alist" } " in " { $snippet "path" } ". " { $snippet "alist" } " must be an association list with ctags format: key must be a valid word and value a sequence whose first element is a resource name and second element is a line number" }
{ $examples { $examples
{ $example { $unchecked-example
"USING: kernel ctags ;" "USING: kernel ctags ;"
"{ { if { \"resource:extra/unix/unix.factor\" 91 } } } \"tags\" ctags-write" "{ { if { \"resource:extra/unix/unix.factor\" 91 } } } \"tags\" ctags-write"
"" ""
@ -32,13 +33,25 @@ HELP: ctags-write ( seq path -- )
{ $notes { $notes
{ $snippet "tags" } " file will contain a single line: if\\t/path/to/factor/extra/unix/unix.factor\\t91" } ; { $snippet "tags" } " file will contain a single line: if\\t/path/to/factor/extra/unix/unix.factor\\t91" } ;
HELP: ctag-strings ( alist -- seq )
{ $values { "alist" "an association list" }
{ "seq" sequence } }
{ $description "Converts an " { $snippet "alist" } " with ctag format (a word as key and a sequence whose first element is a resource name and a second element is a line number as value) in a " { $snippet "seq" } " of ctag strings." }
{ $examples
{ $unchecked-example
"USING: kernel ctags prettyprint ;"
"{ { if { \"resource:extra/unix/unix.factor\" 91 } } } ctag-strings ."
"{ \"if\\t/path/to/factor/extra/unix/unix.factor\\t91\" }"
}
} ;
HELP: ctag ( seq -- str ) HELP: ctag ( seq -- str )
{ $values { "seq" sequence } { $values { "seq" sequence }
{ "str" string } } { "str" string } }
{ $description "Outputs a string " { $snippet "str" } " in ctag format for sequence with two elements, first one must be a valid word and second one a sequence whose first element is a resource name and second element is a line number" } { $description "Outputs a string " { $snippet "str" } " in ctag format for sequence with two elements, first one must be a valid word and second one a sequence whose first element is a resource name and second element is a line number" }
{ $examples { $examples
{ $example { $unchecked-example
"USING: kernel ctags ;" "USING: kernel ctags prettyprint ;"
"{ if { \"resource:extra/unix/unix.factor\" 91 } } ctag ." "{ if { \"resource:extra/unix/unix.factor\" 91 } } ctag ."
"\"if\\t/path/to/factor/extra/unix/unix.factor\\t91\"" "\"if\\t/path/to/factor/extra/unix/unix.factor\\t91\""
} }

View File

@ -1,7 +1,12 @@
USING: kernel ctags tools.test io.backend sequences ; USING: kernel ctags tools.test io.backend sequences arrays prettyprint ;
IN: columns.tests IN: ctags.tests
[ t ] [ [ t ] [
"if\t" "resource:extra/unix/unix.factor" normalize-path "\t91" 3append "if\t" "resource:extra/unix/unix.factor" normalize-path "\t91" 3append
{ if { "resource:extra/unix/unix.factor" 91 } } ctag = { if { "resource:extra/unix/unix.factor" 91 } } ctag =
] unit-test ] unit-test
[ t ] [
"if\t" "resource:extra/unix/unix.factor" normalize-path "\t91" 3append 1array
{ { if { "resource:extra/unix/unix.factor" 91 } } } ctag-strings =
] unit-test

View File

@ -18,8 +18,11 @@ IN: ctags
second number>string % second number>string %
] "" make ; ] "" make ;
: ctag-strings ( seq1 -- seq2 )
{ } swap [ ctag suffix ] each ;
: ctags-write ( seq path -- ) : ctags-write ( seq path -- )
ascii [ [ ctag print ] each ] with-file-writer ; [ ctag-strings ] dip ascii set-file-lines ;
: (ctags) ( -- seq ) : (ctags) ( -- seq )
{ } all-words [ { } all-words [

View File

@ -1,8 +1,22 @@
IN: db.pools.tests IN: db.pools.tests
USING: db.pools tools.test ; USING: db.pools tools.test continuations io.files namespaces
accessors kernel math destructors ;
\ <db-pool> must-infer \ <db-pool> must-infer
{ 2 0 } [ [ ] with-db-pool ] must-infer-as { 2 0 } [ [ ] with-db-pool ] must-infer-as
{ 1 0 } [ [ ] with-pooled-db ] must-infer-as { 1 0 } [ [ ] with-pooled-db ] must-infer-as
! Test behavior after image save/load
USE: db.sqlite
[ "pool-test.db" temp-file delete-file ] ignore-errors
[ ] [ "pool-test.db" sqlite-db <db-pool> "pool" set ] unit-test
[ ] [ "pool" get expired>> t >>expired drop ] unit-test
[ ] [ 1000 [ "pool" get [ ] with-pooled-db ] times ] unit-test
[ ] [ "pool" get dispose ] unit-test

View File

@ -4,7 +4,7 @@ USING: io.files kernel tools.test db db.tuples classes
db.types continuations namespaces math math.ranges db.types continuations namespaces math math.ranges
prettyprint calendar sequences db.sqlite math.intervals prettyprint calendar sequences db.sqlite math.intervals
db.postgresql accessors random math.bitfields.lib db.postgresql accessors random math.bitfields.lib
math.ranges strings sequences.lib urls ; math.ranges strings sequences.lib urls fry ;
IN: db.tuples.tests IN: db.tuples.tests
TUPLE: person the-id the-name the-number the-real TUPLE: person the-id the-name the-number the-real
@ -201,10 +201,10 @@ TUPLE: annotation n paste-id summary author mode contents ;
! ] with-db ! ] with-db
: test-sqlite ( quot -- ) : test-sqlite ( quot -- )
>r "tuples-test.db" temp-file sqlite-db r> with-db ; [ ] swap '[ "tuples-test.db" temp-file sqlite-db , with-db ] unit-test ;
: test-postgresql ( quot -- ) : test-postgresql ( quot -- )
>r { "localhost" "postgres" "foob" "factor-test" } postgresql-db r> with-db ; [ ] swap '[ { "localhost" "postgres" "foob" "factor-test" } postgresql-db , with-db ] unit-test ;
: test-repeated-insert : test-repeated-insert
[ ] [ person ensure-table ] unit-test [ ] [ person ensure-table ] unit-test
@ -463,6 +463,31 @@ fubbclass "FUBCLASS" { } define-persistent
[ t ] [ fubbclass new select-tuples [ fubbclass? ] all? ] unit-test ; [ t ] [ fubbclass new select-tuples [ fubbclass? ] all? ] unit-test ;
[ test-db-inheritance ] test-sqlite [ test-db-inheritance ] test-sqlite
[ test-db-inheritance ] test-postgresql
TUPLE: string-encoding-test id string ;
string-encoding-test "STRING_ENCODING_TEST" {
{ "id" "ID" +db-assigned-id+ }
{ "string" "STRING" TEXT }
} define-persistent
: test-string-encoding ( -- )
[ ] [ string-encoding-test ensure-table ] unit-test
[ ] [
string-encoding-test new
"\u{copyright-sign}\u{bengali-letter-cha}" >>string
[ insert-tuple ] [ id>> "id" set ] bi
] unit-test
[ "\u{copyright-sign}\u{bengali-letter-cha}" ] [
string-encoding-test new "id" get >>id select-tuple string>>
] unit-test ;
[ test-string-encoding ] test-sqlite
[ test-string-encoding ] test-postgresql
! Don't comment these out. These words must infer ! Don't comment these out. These words must infer
\ bind-tuple must-infer \ bind-tuple must-infer

View File

@ -1,6 +1,6 @@
USING: words kernel sequences combinators.lib locals USING: words kernel sequences combinators.lib locals
locals.private accessors parser namespaces continuations locals.private accessors parser namespaces continuations
summary definitions arrays.lib arrays ; summary definitions generalizations arrays ;
IN: descriptive IN: descriptive
ERROR: descriptive-error args underlying word ; ERROR: descriptive-error args underlying word ;

View File

@ -40,10 +40,9 @@ M: login-realm modify-form ( responder -- )
permit-id get realm get name>> permit-id-key <cookie> permit-id get realm get name>> permit-id-key <cookie>
"$login-realm" resolve-base-path >>path "$login-realm" resolve-base-path >>path
realm get realm get
[ timeout>> from-now >>expires ]
[ domain>> >>domain ] [ domain>> >>domain ]
[ secure>> >>secure ] [ secure>> >>secure ]
tri ; bi ;
: put-permit-cookie ( response -- response' ) : put-permit-cookie ( response -- response' )
<permit-cookie> put-cookie ; <permit-cookie> put-cookie ;

View File

@ -33,4 +33,4 @@ TUPLE: server-state-manager < filter-responder timeout ;
20 minutes >>timeout ; inline 20 minutes >>timeout ; inline
: touch-state ( state manager -- ) : touch-state ( state manager -- )
timeout>> from-now >>expires drop ; timeout>> hence >>expires drop ;

View File

@ -116,7 +116,6 @@ M: session-saver dispose
: <session-cookie> ( -- cookie ) : <session-cookie> ( -- cookie )
session get id>> session-id-key <cookie> session get id>> session-id-key <cookie>
"$sessions" resolve-base-path >>path "$sessions" resolve-base-path >>path
sessions get timeout>> from-now >>expires
sessions get domain>> >>domain ; sessions get domain>> >>domain ;
: put-session-cookie ( response -- response' ) : put-session-cookie ( response -- response' )

View File

@ -0,0 +1,136 @@
! Copyright (C) 2007 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
USING: help.syntax help.markup kernel sequences quotations
math ;
IN: generalizations
HELP: npick
{ $values { "n" integer } }
{ $description "A generalization of " { $link dup } ", "
{ $link over } " and " { $link pick } " that can work "
"for any stack depth. The nth item down the stack will be copied and "
"placed on the top of the stack."
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 4 npick .s" "1\n2\n3\n4\n1" }
}
{ $see-also dup over pick } ;
HELP: ndup
{ $values { "n" integer } }
{ $description "A generalization of " { $link dup } ", "
{ $link 2dup } " and " { $link 3dup } " that can work "
"for any number of items. The n topmost items on the stack will be copied and "
"placed on the top of the stack."
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 4 ndup .s" "1\n2\n3\n4\n1\n2\n3\n4" }
}
{ $see-also dup 2dup 3dup } ;
HELP: nnip
{ $values { "n" integer } }
{ $description "A generalization of " { $link nip } " and " { $link 2nip }
" that can work "
"for any number of items."
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 3 nnip .s" "4" }
}
{ $see-also nip 2nip } ;
HELP: ndrop
{ $values { "n" integer } }
{ $description "A generalization of " { $link drop }
" that can work "
"for any number of items."
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 3 ndrop .s" "1" }
}
{ $see-also drop 2drop 3drop } ;
HELP: nrot
{ $values { "n" integer } }
{ $description "A generalization of " { $link rot } " that works for any "
"number of items on the stack. "
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 4 nrot .s" "2\n3\n4\n1" }
}
{ $see-also rot -nrot } ;
HELP: -nrot
{ $values { "n" integer } }
{ $description "A generalization of " { $link -rot } " that works for any "
"number of items on the stack. "
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 4 -nrot .s" "4\n1\n2\n3" }
}
{ $see-also rot nrot } ;
HELP: nrev
{ $values { "n" integer } }
{ $description "A generalization of " { $link spin } " that reverses any number of items at the top of the stack."
}
{ $examples
{ $example "USING: prettyprint generalizations ;" "1 2 3 4 4 nrev .s" "4\n3\n2\n1" }
}
{ $see-also rot nrot } ;
HELP: ndip
{ $values { "quot" quotation } { "n" number } }
{ $description "A generalization of " { $link dip } " that can work "
"for any stack depth. The quotation will be called with a stack that "
"has 'n' items removed first. The 'n' items are then put back on the "
"stack. The quotation can consume and produce any number of items."
}
{ $examples
{ $example "USING: generalizations kernel prettyprint ;" "1 2 [ dup ] 1 ndip .s" "1\n1\n2" }
{ $example "USING: generalizations kernel prettyprint ;" "1 2 3 [ drop ] 2 ndip .s" "2\n3" }
}
{ $see-also dip 2dip } ;
HELP: nslip
{ $values { "n" number } }
{ $description "A generalization of " { $link slip } " that can work "
"for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
"removed from the stack, the quotation called, and the items restored."
}
{ $examples
{ $example "USING: generalizations prettyprint ;" "[ 99 ] 1 2 3 4 5 5 nslip .s" "99\n1\n2\n3\n4\n5" }
}
{ $see-also slip nkeep } ;
HELP: nkeep
{ $values { "quot" quotation } { "n" number } }
{ $description "A generalization of " { $link keep } " that can work "
"for any stack depth. The first " { $snippet "n" } " items after the quotation will be "
"saved, the quotation called, and the items restored."
}
{ $examples
{ $example "USING: generalizations kernel prettyprint ;" "1 2 3 4 5 [ drop drop drop drop drop 99 ] 5 nkeep .s" "99\n1\n2\n3\n4\n5" }
}
{ $see-also keep nslip } ;
ARTICLE: "generalizations" "Generalized shuffle words and combinators"
"A number of stack shuffling words and combinators for use in "
"macros where the arity of the input quotations depends on an "
"input parameter."
{ $subsection narray }
{ $subsection ndup }
{ $subsection npick }
{ $subsection nrot }
{ $subsection -nrot }
{ $subsection nnip }
{ $subsection ndrop }
{ $subsection nrev }
{ $subsection ndip }
{ $subsection nslip }
{ $subsection nkeep }
{ $subsection ncurry }
{ $subsection nwith }
{ $subsection napply } ;
ABOUT: "generalizations"

View File

@ -0,0 +1,34 @@
USING: tools.test generalizations kernel math arrays sequences ;
IN: generalizations.tests
{ 1 2 3 4 1 } [ 1 2 3 4 4 npick ] unit-test
{ 1 2 3 4 2 } [ 1 2 3 4 3 npick ] unit-test
{ 1 2 3 4 3 } [ 1 2 3 4 2 npick ] unit-test
{ 1 2 3 4 4 } [ 1 2 3 4 1 npick ] unit-test
[ 1 1 ndup ] must-infer
{ 1 1 } [ 1 1 ndup ] unit-test
{ 1 2 1 2 } [ 1 2 2 ndup ] unit-test
{ 1 2 3 1 2 3 } [ 1 2 3 3 ndup ] unit-test
{ 1 2 3 4 1 2 3 4 } [ 1 2 3 4 4 ndup ] unit-test
[ 1 2 2 nrot ] must-infer
{ 2 1 } [ 1 2 2 nrot ] unit-test
{ 2 3 1 } [ 1 2 3 3 nrot ] unit-test
{ 2 3 4 1 } [ 1 2 3 4 4 nrot ] unit-test
[ 1 2 2 -nrot ] must-infer
{ 2 1 } [ 1 2 2 -nrot ] unit-test
{ 3 1 2 } [ 1 2 3 3 -nrot ] unit-test
{ 4 1 2 3 } [ 1 2 3 4 4 -nrot ] unit-test
[ 1 2 3 4 3 nnip ] must-infer
{ 4 } [ 1 2 3 4 3 nnip ] unit-test
[ 1 2 3 4 4 ndrop ] must-infer
{ 0 } [ 0 1 2 3 4 4 ndrop ] unit-test
[ [ 99 ] 1 2 3 4 5 5 nslip ] must-infer
{ 99 1 2 3 4 5 } [ [ 99 ] 1 2 3 4 5 5 nslip ] unit-test
[ 1 2 3 4 5 [ drop drop drop drop drop 2 ] 5 nkeep ] must-infer
{ 2 1 2 3 4 5 } [ 1 2 3 4 5 [ drop drop drop drop drop 2 ] 5 nkeep ] unit-test
[ [ 1 2 3 + ] ] [ 1 2 3 [ + ] 3 ncurry ] unit-test
[ { 1 2 } { 2 4 } { 3 8 } { 4 16 } { 5 32 } ] [ 1 2 3 4 5 [ dup 2^ 2array ] 5 napply ] unit-test
[ [ dup 2^ 2array ] 5 napply ] must-infer
[ { "xyc" "xyd" } ] [ "x" "y" { "c" "d" } [ 3append ] 2 nwith map ] unit-test

View File

@ -0,0 +1,56 @@
! Copyright (C) 2007, 2008 Chris Double, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences sequences.private namespaces math math.ranges
combinators macros quotations fry locals arrays ;
IN: generalizations
MACRO: narray ( n -- quot )
dup [ f <array> ] curry
swap <reversed> [
[ swap [ set-nth-unsafe ] keep ] curry
] map concat append ;
MACRO: npick ( n -- )
1- dup saver [ dup ] rot [ r> swap ] n*quot 3append ;
MACRO: ndup ( n -- )
dup '[ , npick ] n*quot ;
MACRO: nrot ( n -- )
1- dup saver swap [ r> swap ] n*quot append ;
MACRO: -nrot ( n -- )
1- dup [ swap >r ] n*quot swap restorer append ;
MACRO: ndrop ( n -- )
[ drop ] n*quot ;
: nnip ( n -- )
swap >r ndrop r> ; inline
MACRO: ntuck ( n -- )
2 + [ dupd -nrot ] curry ;
MACRO: nrev ( n -- quot )
1 [a,b] [ '[ , -nrot ] ] map concat ;
MACRO: ndip ( quot n -- )
dup saver -rot restorer 3append ;
MACRO: nslip ( n -- )
dup saver [ call ] rot restorer 3append ;
MACRO: nkeep ( n -- )
[ ] [ 1+ ] [ ] tri
'[ [ , ndup ] dip , -nrot , nslip ] ;
MACRO: ncurry ( n -- ) [ curry ] n*quot ;
MACRO:: nwith ( quot n -- )
[let | n' [ n 1+ ] |
[ n' -nrot [ n' nrot quot call ] n ncurry ] ] ;
MACRO: napply ( n -- )
2 [a,b]
[ [ 1- ] keep '[ , ntuck , nslip ] ]
map concat >quotation [ call ] append ;

View File

@ -1,6 +1,6 @@
USING: assocs html.parser kernel math sequences strings ascii USING: assocs html.parser kernel math sequences strings ascii
arrays shuffle unicode.case namespaces splitting http arrays generalizations shuffle unicode.case namespaces splitting
sequences.lib accessors io combinators http.client urls ; http sequences.lib accessors io combinators http.client urls ;
IN: html.parser.analyzer IN: html.parser.analyzer
TUPLE: link attributes clickable ; TUPLE: link attributes clickable ;

View File

@ -1,10 +1,10 @@
! Copyright (C) 2007, 2008 Daniel Ehrenberg. ! Copyright (C) 2007, 2008 Daniel Ehrenberg.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel words summary slots quotations USING: accessors kernel words summary slots quotations
sequences assocs math arrays inference effects shuffle sequences assocs math arrays inference effects generalizations
continuations debugger classes.tuple namespaces vectors continuations debugger classes.tuple namespaces vectors
bit-arrays byte-arrays strings sbufs math.functions macros bit-arrays byte-arrays strings sbufs math.functions macros
sequences.private combinators mirrors combinators.lib sequences.private combinators mirrors
combinators.short-circuit ; combinators.short-circuit ;
IN: inverse IN: inverse

View File

@ -9,7 +9,7 @@ TUPLE: pool connections disposed expired ;
: check-pool ( pool -- ) : check-pool ( pool -- )
dup check-disposed dup check-disposed
dup expired>> expired? [ dup expired>> expired? [
ALIEN: 31337 >>expired 31337 <alien> >>expired
connections>> delete-all connections>> delete-all
] [ drop ] if ; ] [ drop ] if ;

View File

@ -125,7 +125,8 @@ M: fd refill
} cond ; } cond ;
M: unix (wait-to-read) ( port -- ) M: unix (wait-to-read) ( port -- )
dup dup handle>> refill dup dup
dup handle>> dup check-disposed refill dup
[ dupd wait-for-port (wait-to-read) ] [ 2drop ] if ; [ dupd wait-for-port (wait-to-read) ] [ 2drop ] if ;
! Writers ! Writers
@ -144,7 +145,9 @@ M: fd drain
} cond ; } cond ;
M: unix (wait-to-write) ( port -- ) M: unix (wait-to-write) ( port -- )
dup dup handle>> drain dup [ wait-for-port ] [ 2drop ] if ; dup
dup handle>> dup check-disposed drain
dup [ wait-for-port ] [ 2drop ] if ;
M: unix io-multiplex ( ms/f -- ) M: unix io-multiplex ( ms/f -- )
mx get-global wait-for-events ; mx get-global wait-for-events ;

View File

@ -61,6 +61,7 @@ C: <FileArgs> FileArgs
: make-FileArgs ( port -- <FileArgs> ) : make-FileArgs ( port -- <FileArgs> )
{ {
[ handle>> check-disposed ]
[ handle>> handle>> ] [ handle>> handle>> ]
[ buffer>> ] [ buffer>> ]
[ buffer>> buffer-length ] [ buffer>> buffer-length ]

View File

@ -74,7 +74,7 @@ M: winnt add-completion ( win32-handle -- )
] if ; ] if ;
M: win32-handle cancel-operation M: win32-handle cancel-operation
handle>> CancelIo drop ; [ check-disposed ] [ handle>> CancelIo drop ] bi ;
M: winnt io-multiplex ( ms -- ) M: winnt io-multiplex ( ms -- )
handle-overlapped [ 0 io-multiplex ] when ; handle-overlapped [ 0 io-multiplex ] when ;

View File

@ -1,4 +1,5 @@
USING: io.backend kernel continuations sequences ; USING: io.backend kernel continuations sequences
system vocabs.loader combinators ;
IN: io.windows.privileges IN: io.windows.privileges
HOOK: set-privilege io-backend ( name ? -- ) inline HOOK: set-privilege io-backend ( name ? -- ) inline
@ -6,3 +7,8 @@ HOOK: set-privilege io-backend ( name ? -- ) inline
: with-privileges ( seq quot -- ) : with-privileges ( seq quot -- )
over [ [ t set-privilege ] each ] curry compose over [ [ t set-privilege ] each ] curry compose
swap [ [ f set-privilege ] each ] curry [ ] cleanup ; inline swap [ [ f set-privilege ] each ] curry [ ] cleanup ; inline
{
{ [ os winnt? ] [ "io.windows.nt.privileges" require ] }
{ [ os wince? ] [ "io.windows.ce.privileges" require ] }
} cond

View File

@ -257,11 +257,11 @@ DEFER: (d)
[ laplacian-kernel ] graded-laplacian ; [ laplacian-kernel ] graded-laplacian ;
: graded-basis. ( seq -- ) : graded-basis. ( seq -- )
dup length [ [
"=== Degree " write pprint "=== Degree " write pprint
": dimension " write dup length . ": dimension " write dup length .
[ alt. ] each [ alt. ] each
] 2each ; ] each-index ;
: bigraded-triple ( u-deg z-deg bigraded-basis -- triple ) : bigraded-triple ( u-deg z-deg bigraded-basis -- triple )
#! d: C(u,z) ---> C(u+2,z-1) #! d: C(u,z) ---> C(u+2,z-1)
@ -289,11 +289,11 @@ DEFER: (d)
[ laplacian-kernel ] bigraded-laplacian ; [ laplacian-kernel ] bigraded-laplacian ;
: bigraded-basis. ( seq -- ) : bigraded-basis. ( seq -- )
dup length [ [
"=== U-degree " write . "=== U-degree " write .
dup length [ [
" === Z-degree " write pprint " === Z-degree " write pprint
": dimension " write dup length . ": dimension " write dup length .
[ " " write alt. ] each [ " " write alt. ] each
] 2each ] each-index
] 2each ; ] each-index ;

View File

@ -3,7 +3,7 @@
USING: logging.server sequences namespaces concurrency.messaging USING: logging.server sequences namespaces concurrency.messaging
words kernel arrays shuffle tools.annotations words kernel arrays shuffle tools.annotations
prettyprint.config prettyprint debugger io.streams.string prettyprint.config prettyprint debugger io.streams.string
splitting continuations effects arrays.lib parser strings splitting continuations effects generalizations parser strings
quotations fry symbols accessors ; quotations fry symbols accessors ;
IN: logging IN: logging

3
extra/math/blas/matrices/matrices.factor Normal file → Executable file
View File

@ -2,7 +2,8 @@ USING: accessors alien alien.c-types arrays byte-arrays combinators
combinators.lib combinators.short-circuit fry kernel locals macros combinators.lib combinators.short-circuit fry kernel locals macros
math math.blas.cblas math.blas.vectors math.blas.vectors.private math math.blas.cblas math.blas.vectors math.blas.vectors.private
math.complex math.functions math.order multi-methods qualified math.complex math.functions math.order multi-methods qualified
sequences sequences.merged sequences.private shuffle symbols ; sequences sequences.merged sequences.private generalizations
shuffle symbols ;
QUALIFIED: syntax QUALIFIED: syntax
IN: math.blas.matrices IN: math.blas.matrices

2
extra/math/blas/vectors/vectors.factor Normal file → Executable file
View File

@ -1,7 +1,7 @@
USING: accessors alien alien.c-types arrays byte-arrays combinators USING: accessors alien alien.c-types arrays byte-arrays combinators
combinators.short-circuit fry kernel macros math math.blas.cblas combinators.short-circuit fry kernel macros math math.blas.cblas
math.complex math.functions math.order multi-methods qualified math.complex math.functions math.order multi-methods qualified
sequences sequences.private shuffle ; sequences sequences.private generalizations ;
QUALIFIED: syntax QUALIFIED: syntax
IN: math.blas.vectors IN: math.blas.vectors

View File

@ -25,7 +25,7 @@ IN: math.vectors
: normalize ( u -- v ) dup norm v/n ; : normalize ( u -- v ) dup norm v/n ;
: set-axis ( u v axis -- w ) : set-axis ( u v axis -- w )
dup length [ >r zero? 2over ? r> swap nth ] 2map 2nip ; [ >r zero? 2over ? r> swap nth ] map-index 2nip ;
HINTS: vneg { array } ; HINTS: vneg { array } ;
HINTS: norm-sq { array } ; HINTS: norm-sq { array } ;

2
extra/mortar/mortar.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: kernel io parser lexer words namespaces quotations arrays assocs sequences USING: kernel io parser lexer words namespaces quotations arrays assocs sequences
splitting grouping math shuffle ; splitting grouping math generalizations ;
IN: mortar IN: mortar

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math sequences vectors classes classes.algebra USING: kernel math sequences vectors classes classes.algebra
combinators arrays words assocs parser namespaces definitions combinators arrays words assocs parser namespaces definitions
prettyprint prettyprint.backend quotations arrays.lib prettyprint prettyprint.backend quotations generalizations
debugger io compiler.units kernel.private effects accessors debugger io compiler.units kernel.private effects accessors
hashtables sorting shuffle math.order sets ; hashtables sorting shuffle math.order sets ;
IN: multi-methods IN: multi-methods

2
extra/processing/processing.factor Normal file → Executable file
View File

@ -1,7 +1,7 @@
USING: kernel namespaces threads combinators sequences arrays USING: kernel namespaces threads combinators sequences arrays
math math.functions math.ranges random math math.functions math.ranges random
opengl.gl opengl.glu vars multi-methods shuffle opengl.gl opengl.glu vars multi-methods generalizations shuffle
ui ui
ui.gestures ui.gestures
ui.gadgets ui.gadgets

View File

@ -1,7 +1,7 @@
USING: accessors assocs math kernel shuffle combinators.lib USING: accessors assocs math kernel shuffle generalizations
words quotations arrays combinators sequences math.vectors words quotations arrays combinators sequences math.vectors
io.styles prettyprint vocabs sorting io generic locals.private io.styles prettyprint vocabs sorting io generic locals.private
math.statistics math.order ; math.statistics math.order combinators.lib ;
IN: reports.noise IN: reports.noise
: badness ( word -- n ) : badness ( word -- n )

View File

@ -4,7 +4,8 @@
USING: combinators.lib kernel sequences math namespaces assocs USING: combinators.lib kernel sequences math namespaces assocs
random sequences.private shuffle math.functions random sequences.private shuffle math.functions
arrays math.parser math.private sorting strings ascii macros arrays math.parser math.private sorting strings ascii macros
assocs.lib quotations hashtables math.order locals ; assocs.lib quotations hashtables math.order locals
generalizations ;
IN: sequences.lib IN: sequences.lib
: each-withn ( seq quot n -- ) nwith each ; inline : each-withn ( seq quot n -- ) nwith each ; inline
@ -24,21 +25,6 @@ MACRO: firstn ( n -- )
concat >quotation concat >quotation
[ drop ] compose ; [ drop ] compose ;
: prepare-index ( seq quot -- seq n quot )
>r dup length r> ; inline
: each-index ( seq quot -- )
#! quot: ( elt index -- )
prepare-index 2each ; inline
: map-index ( seq quot -- )
#! quot: ( elt index -- obj )
prepare-index 2map ; inline
: reduce-index ( seq identity quot -- )
#! quot: ( prev elt index -- next )
swapd each-index ; inline
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: each-percent ( seq quot -- ) : each-percent ( seq quot -- )

View File

@ -1,84 +0,0 @@
! Copyright (C) 2007 Chris Double.
! See http://factorcode.org/license.txt for BSD license.
USING: help.syntax help.markup kernel sequences ;
IN: shuffle
HELP: npick
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link dup } ", "
{ $link over } " and " { $link pick } " that can work "
"for any stack depth. The nth item down the stack will be copied and "
"placed on the top of the stack."
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 4 npick .s" "1\n2\n3\n4\n1" }
}
{ $see-also dup over pick } ;
HELP: ndup
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link dup } ", "
{ $link 2dup } " and " { $link 3dup } " that can work "
"for any number of items. The n topmost items on the stack will be copied and "
"placed on the top of the stack."
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 4 ndup .s" "1\n2\n3\n4\n1\n2\n3\n4" }
}
{ $see-also dup 2dup 3dup } ;
HELP: nnip
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link nip } " and " { $link 2nip }
" that can work "
"for any number of items."
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 3 nnip .s" "4" }
}
{ $see-also nip 2nip } ;
HELP: ndrop
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link drop }
" that can work "
"for any number of items."
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 3 ndrop .s" "1" }
}
{ $see-also drop 2drop 3drop } ;
HELP: nrot
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link rot } " that works for any "
"number of items on the stack. "
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 4 nrot .s" "2\n3\n4\n1" }
}
{ $see-also rot -nrot } ;
HELP: -nrot
{ $values { "n" "a number" } }
{ $description "A generalisation of " { $link -rot } " that works for any "
"number of items on the stack. "
}
{ $examples
{ $example "USING: prettyprint shuffle ;" "1 2 3 4 4 -nrot .s" "4\n1\n2\n3" }
}
{ $see-also rot nrot } ;
ARTICLE: { "shuffle" "overview" } "Extra shuffle words"
"A number of stack shuffling words for those rare times when you "
"need to deal with tricky stack situations and can't refactor the "
"code to work around it."
{ $subsection ndup }
{ $subsection npick }
{ $subsection nrot }
{ $subsection -nrot }
{ $subsection nnip }
{ $subsection ndrop } ;
IN: shuffle
ABOUT: { "shuffle" "overview" }

View File

@ -1,25 +1,4 @@
USING: arrays shuffle kernel math tools.test inference words ; USING: shuffle tools.test ;
[ 8 ] [ 5 6 7 8 3nip ] unit-test [ 8 ] [ 5 6 7 8 3nip ] unit-test
{ 1 2 3 4 1 } [ 1 2 3 4 4 npick ] unit-test
{ 1 2 3 4 2 } [ 1 2 3 4 3 npick ] unit-test
{ 1 2 3 4 3 } [ 1 2 3 4 2 npick ] unit-test
{ 1 2 3 4 4 } [ 1 2 3 4 1 npick ] unit-test
{ t } [ [ 1 1 ndup ] infer >boolean ] unit-test
{ 1 1 } [ 1 1 ndup ] unit-test
{ 1 2 1 2 } [ 1 2 2 ndup ] unit-test
{ 1 2 3 1 2 3 } [ 1 2 3 3 ndup ] unit-test
{ 1 2 3 4 1 2 3 4 } [ 1 2 3 4 4 ndup ] unit-test
{ t } [ [ 1 2 2 nrot ] infer >boolean ] unit-test
{ 2 1 } [ 1 2 2 nrot ] unit-test
{ 2 3 1 } [ 1 2 3 3 nrot ] unit-test
{ 2 3 4 1 } [ 1 2 3 4 4 nrot ] unit-test
{ t } [ [ 1 2 2 -nrot ] infer >boolean ] unit-test
{ 2 1 } [ 1 2 2 -nrot ] unit-test
{ 3 1 2 } [ 1 2 3 3 -nrot ] unit-test
{ 4 1 2 3 } [ 1 2 3 4 4 -nrot ] unit-test
{ t } [ [ 1 2 3 4 3 nnip ] infer >boolean ] unit-test
{ 4 } [ 1 2 3 4 3 nnip ] unit-test
{ t } [ [ 1 2 3 4 4 ndrop ] infer >boolean ] unit-test
{ 0 } [ 0 1 2 3 4 4 ndrop ] unit-test
[ 3 1 2 3 ] [ 1 2 3 tuckd ] unit-test [ 3 1 2 3 ] [ 1 2 3 tuckd ] unit-test

View File

@ -1,24 +1,9 @@
! Copyright (C) 2007 Chris Double, Doug Coleman. ! Copyright (C) 2007 Chris Double, Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences namespaces math inference.transforms USING: kernel generalizations ;
combinators macros quotations math.ranges fry ;
IN: shuffle IN: shuffle
MACRO: npick ( n -- ) 1- dup saver [ dup ] rot [ r> swap ] n*quot 3append ;
MACRO: ndup ( n -- ) dup [ npick ] curry n*quot ;
MACRO: nrot ( n -- ) 1- dup saver swap [ r> swap ] n*quot append ;
MACRO: -nrot ( n -- ) 1- dup [ swap >r ] n*quot swap restorer append ;
MACRO: ndrop ( n -- ) [ drop ] n*quot ;
: nnip ( n -- ) swap >r ndrop r> ; inline
MACRO: ntuck ( n -- ) 2 + '[ dup , -nrot ] ;
: 2swap ( x y z t -- z t x y ) rot >r rot r> ; inline : 2swap ( x y z t -- z t x y ) rot >r rot r> ; inline
: nipd ( a b c -- b c ) rot drop ; inline : nipd ( a b c -- b c ) rot drop ; inline
@ -32,8 +17,3 @@ MACRO: ntuck ( n -- ) 2 + '[ dup , -nrot ] ;
: 4drop ( a b c d -- ) 3drop drop ; inline : 4drop ( a b c d -- ) 3drop drop ; inline
: tuckd ( x y z -- z x y z ) 2 ntuck ; inline : tuckd ( x y z -- z x y z ) 2 ntuck ; inline
MACRO: nrev ( n -- quot )
[ 1+ ] map
reverse
[ [ -nrot ] curry ] map concat ;

2
extra/spheres/spheres.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: kernel opengl.demo-support opengl.gl opengl.shaders opengl.framebuffers USING: kernel opengl.demo-support opengl.gl opengl.shaders opengl.framebuffers
opengl multiline ui.gadgets accessors sequences ui.render ui math opengl multiline ui.gadgets accessors sequences ui.render ui math
arrays arrays.lib combinators ; arrays generalizations combinators ;
IN: spheres IN: spheres
STRING: plane-vertex-shader STRING: plane-vertex-shader

2
extra/springies/springies.factor Normal file → Executable file
View File

@ -1,6 +1,6 @@
USING: kernel combinators sequences arrays math math.vectors USING: kernel combinators sequences arrays math math.vectors
shuffle vars ; generalizations vars ;
IN: springies IN: springies

View File

@ -45,7 +45,7 @@ tetris-gadget H{
dup tetris-gadget-tetris maybe-update relayout-1 ; dup tetris-gadget-tetris maybe-update relayout-1 ;
M: tetris-gadget graft* ( gadget -- ) M: tetris-gadget graft* ( gadget -- )
dup [ tick ] curry 100 milliseconds from-now 100 milliseconds add-alarm dup [ tick ] curry 100 milliseconds every
swap set-tetris-gadget-alarm ; swap set-tetris-gadget-alarm ;
M: tetris-gadget ungraft* ( gadget -- ) M: tetris-gadget ungraft* ( gadget -- )

4
extra/tools/memory/memory.factor Normal file → Executable file
View File

@ -33,10 +33,10 @@ IN: tools.memory
[ [ write-cell ] each ] with-row ; [ [ write-cell ] each ] with-row ;
: (data-room.) ( -- ) : (data-room.) ( -- )
data-room 2 <groups> dup length [ data-room 2 <groups> [
[ first2 ] [ number>string "Generation " prepend ] bi* [ first2 ] [ number>string "Generation " prepend ] bi*
write-total/used/free write-total/used/free
] 2each ] each-index
"Decks" write-total "Decks" write-total
"Cards" write-total ; "Cards" write-total ;

View File

@ -1,7 +1,7 @@
USING: tools.walker io io.streams.string kernel math USING: tools.walker io io.streams.string kernel math
math.private namespaces prettyprint sequences tools.test math.private namespaces prettyprint sequences tools.test
continuations math.parser threads arrays tools.walker.debug continuations math.parser threads arrays tools.walker.debug
generic.standard ; generic.standard sequences.private kernel.private ;
IN: tools.walker.tests IN: tools.walker.tests
[ { } ] [ [ { } ] [
@ -50,6 +50,10 @@ IN: tools.walker.tests
[ 5 6 number= ] test-walker [ 5 6 number= ] test-walker
] unit-test ] unit-test
[ { 0 } ] [
[ 0 { array-capacity } declare ] test-walker
] unit-test
[ { f } ] [ [ { f } ] [
[ "XYZ" "XYZ" mismatch ] test-walker [ "XYZ" "XYZ" mismatch ] test-walker
] unit-test ] unit-test

View File

@ -121,7 +121,7 @@ SYMBOL: drag-timer
: start-drag-timer ( -- ) : start-drag-timer ( -- )
hand-buttons get-global empty? [ hand-buttons get-global empty? [
[ drag-gesture ] [ drag-gesture ]
300 milliseconds from-now 300 milliseconds hence
100 milliseconds 100 milliseconds
add-alarm drag-timer get-global >box add-alarm drag-timer get-global >box
] when ; ] when ;

View File

@ -37,7 +37,8 @@ FUNCTION: int execve ( char* path, char** argv, char** envp ) ;
>r [ first ] [ ] bi r> exec-with-env ; >r [ first ] [ ] bi r> exec-with-env ;
: with-fork ( child parent -- ) : with-fork ( child parent -- )
fork-process dup zero? -roll swap curry if ; inline [ [ fork-process dup zero? ] dip [ drop ] prepose ] dip
if ; inline
: SIGKILL 9 ; inline : SIGKILL 9 ; inline
: SIGTERM 15 ; inline : SIGTERM 15 ; inline

View File

@ -4,7 +4,7 @@
USING: alien alien.c-types alien.syntax kernel libc structs sequences USING: alien alien.c-types alien.syntax kernel libc structs sequences
continuations byte-arrays strings continuations byte-arrays strings
math namespaces system combinators vocabs.loader qualified math namespaces system combinators vocabs.loader qualified
accessors inference macros locals shuffle arrays.lib accessors inference macros locals generalizations
unix.types debugger io prettyprint ; unix.types debugger io prettyprint ;
IN: unix IN: unix

View File

@ -2,12 +2,12 @@
<t:chloe xmlns:t="http://factorcode.org/chloe/1.0"> <t:chloe xmlns:t="http://factorcode.org/chloe/1.0">
<t:title>Planet Factor Administration</t:title> <t:title>Concatenative Planet: Administration</t:title>
<ul> <ul>
<t:bind-each t:name="blogroll"> <t:bind-each t:name="blogroll">
<li> <li>
<t:a t:href="$planet-factor/admin/edit-blog" t:query="id"> <t:a t:href="$planet/admin/edit-blog" t:query="id">
<t:label t:name="name" /> <t:label t:name="name" />
</t:a> </t:a>
</li> </li>
@ -15,8 +15,8 @@
</ul> </ul>
<div> <div>
<t:a t:href="$planet-factor/admin/new-blog">Add Blog</t:a> <t:a t:href="$planet/admin/new-blog">Add Blog</t:a>
| <t:button t:action="$planet-factor/admin/update" class="link-button link">Update</t:button> | <t:button t:action="$planet/admin/update" class="link-button link">Update</t:button>
</div> </div>
</t:chloe> </t:chloe>

View File

@ -4,7 +4,7 @@
<t:title>Edit Blog</t:title> <t:title>Edit Blog</t:title>
<t:form t:action="$planet-factor/admin/edit-blog" t:for="id"> <t:form t:action="$planet/admin/edit-blog" t:for="id">
<table> <table>
@ -29,6 +29,6 @@
</t:form> </t:form>
<t:button t:action="$planet-factor/admin/delete-blog" t:for="id" class="link-button link">Delete</t:button> <t:button t:action="$planet/admin/delete-blog" t:for="id" class="link-button link">Delete</t:button>
</t:chloe> </t:chloe>

View File

@ -1,14 +0,0 @@
<?xml version='1.0' ?>
<t:chloe xmlns:t="http://factorcode.org/chloe/1.0">
<t:bind-each t:name="postings">
<p class="news">
<strong><t:label t:name="title" /></strong> <br/>
<t:a value="link" class="more">Read More...</t:a>
</p>
</t:bind-each>
</t:chloe>

View File

@ -4,7 +4,7 @@
<t:title>Edit Blog</t:title> <t:title>Edit Blog</t:title>
<t:form t:action="$planet-factor/admin/new-blog"> <t:form t:action="$planet/admin/new-blog">
<table> <table>

View File

@ -5,9 +5,9 @@
<t:style t:include="resource:extra/webapps/planet/planet.css" /> <t:style t:include="resource:extra/webapps/planet/planet.css" />
<div class="navbar"> <div class="navbar">
<t:a t:href="$planet-factor/list">Front Page</t:a> <t:a t:href="$planet/list">Front Page</t:a>
| <t:a t:href="$planet-factor/feed.xml">Atom Feed</t:a> | <t:a t:href="$planet/feed.xml">Atom Feed</t:a>
| <t:a t:href="$planet-factor/admin">Admin</t:a> | <t:a t:href="$planet/admin">Admin</t:a>
<t:if t:code="furnace.auth:logged-in?"> <t:if t:code="furnace.auth:logged-in?">
<t:if t:code="furnace.auth.features.edit-profile:allow-edit-profile?"> <t:if t:code="furnace.auth.features.edit-profile:allow-edit-profile?">

View File

@ -17,13 +17,13 @@ furnace.auth
furnace.syndication ; furnace.syndication ;
IN: webapps.planet IN: webapps.planet
TUPLE: planet-factor < dispatcher ; TUPLE: planet < dispatcher ;
SYMBOL: can-administer-planet-factor? SYMBOL: can-administer-planet?
can-administer-planet-factor? define-capability can-administer-planet? define-capability
TUPLE: planet-factor-admin < dispatcher ; TUPLE: planet-admin < dispatcher ;
TUPLE: blog id name www-url feed-url ; TUPLE: blog id name www-url feed-url ;
@ -65,7 +65,7 @@ posting "POSTINGS"
: <edit-blogroll-action> ( -- action ) : <edit-blogroll-action> ( -- action )
<page-action> <page-action>
[ blogroll "blogroll" set-value ] >>init [ blogroll "blogroll" set-value ] >>init
{ planet-factor "admin" } >>template ; { planet "admin" } >>template ;
: <planet-action> ( -- action ) : <planet-action> ( -- action )
<page-action> <page-action>
@ -74,12 +74,12 @@ posting "POSTINGS"
postings "postings" set-value postings "postings" set-value
] >>init ] >>init
{ planet-factor "planet" } >>template ; { planet "planet" } >>template ;
: <planet-feed-action> ( -- action ) : <planet-feed-action> ( -- action )
<feed-action> <feed-action>
[ "Planet Factor" ] >>title [ "Planet Factor" ] >>title
[ URL" $planet-factor" ] >>url [ URL" $planet" ] >>url
[ postings ] >>entries ; [ postings ] >>entries ;
:: <posting> ( entry name -- entry' ) :: <posting> ( entry name -- entry' )
@ -111,7 +111,7 @@ posting "POSTINGS"
<action> <action>
[ [
update-cached-postings update-cached-postings
URL" $planet-factor/admin" <redirect> URL" $planet/admin" <redirect>
] >>submit ; ] >>submit ;
: <delete-blog-action> ( -- action ) : <delete-blog-action> ( -- action )
@ -120,7 +120,7 @@ posting "POSTINGS"
[ [
"id" value <blog> delete-tuples "id" value <blog> delete-tuples
URL" $planet-factor/admin" <redirect> URL" $planet/admin" <redirect>
] >>submit ; ] >>submit ;
: validate-blog ( -- ) : validate-blog ( -- )
@ -136,7 +136,7 @@ posting "POSTINGS"
: <new-blog-action> ( -- action ) : <new-blog-action> ( -- action )
<page-action> <page-action>
{ planet-factor "new-blog" } >>template { planet "new-blog" } >>template
[ validate-blog ] >>validate [ validate-blog ] >>validate
@ -146,7 +146,7 @@ posting "POSTINGS"
[ insert-tuple ] [ insert-tuple ]
[ [
<url> <url>
"$planet-factor/admin/edit-blog" >>path "$planet/admin/edit-blog" >>path
swap id>> "id" set-query-param swap id>> "id" set-query-param
<redirect> <redirect>
] ]
@ -161,7 +161,7 @@ posting "POSTINGS"
"id" value <blog> select-tuple from-object "id" value <blog> select-tuple from-object
] >>init ] >>init
{ planet-factor "edit-blog" } >>template { planet "edit-blog" } >>template
[ [
validate-integer-id validate-integer-id
@ -174,15 +174,15 @@ posting "POSTINGS"
[ update-tuple ] [ update-tuple ]
[ [
<url> <url>
"$planet-factor/admin" >>path "$planet/admin" >>path
swap id>> "id" set-query-param swap id>> "id" set-query-param
<redirect> <redirect>
] ]
tri tri
] >>submit ; ] >>submit ;
: <planet-factor-admin> ( -- responder ) : <planet-admin> ( -- responder )
planet-factor-admin new-dispatcher planet-admin new-dispatcher
<edit-blogroll-action> "blogroll" add-main-responder <edit-blogroll-action> "blogroll" add-main-responder
<update-action> "update" add-responder <update-action> "update" add-responder
<new-blog-action> "new-blog" add-responder <new-blog-action> "new-blog" add-responder
@ -190,15 +190,15 @@ posting "POSTINGS"
<delete-blog-action> "delete-blog" add-responder <delete-blog-action> "delete-blog" add-responder
<protected> <protected>
"administer Planet Factor" >>description "administer Planet Factor" >>description
{ can-administer-planet-factor? } >>capabilities ; { can-administer-planet? } >>capabilities ;
: <planet-factor> ( -- responder ) : <planet> ( -- responder )
planet-factor new-dispatcher planet new-dispatcher
<planet-action> "list" add-main-responder <planet-action> "list" add-main-responder
<planet-feed-action> "feed.xml" add-responder <planet-feed-action> "feed.xml" add-responder
<planet-factor-admin> "admin" add-responder <planet-admin> "admin" add-responder
<boilerplate> <boilerplate>
{ planet-factor "planet-common" } >>template ; { planet "planet-common" } >>template ;
: start-update-task ( db params -- ) : start-update-task ( db params -- )
'[ , , [ update-cached-postings ] with-db ] 10 minutes every drop ; '[ , , [ update-cached-postings ] with-db ] 10 minutes every drop ;

View File

@ -2,7 +2,7 @@
<t:chloe xmlns:t="http://factorcode.org/chloe/1.0"> <t:chloe xmlns:t="http://factorcode.org/chloe/1.0">
<t:title>Planet Factor</t:title> <t:title>Concatenative Planet</t:title>
<table width="100%" cellpadding="10"> <table width="100%" cellpadding="10">
<tr> <tr>

View File

@ -0,0 +1,63 @@
Look at the source to this page by clicking *Edit* to compare the farkup language with resulting output.
= level 1 heading =
== level 2 heading ==
=== level 3 heading ===
==== level 4 heading ====
Here is a paragraph of text, with _emphasized_ and *strong* text, together with an inline %code snippet%. Did you know that E=mc^2^, and L~2~ spaces are cool? Of course, if you want to include \_ special \* characters \^ you \~ can \% do that, too.
You can make [[Wiki Links]] just like that, as well as links to external sites: [[http://sbcl.sourceforge.net]]. [[Factor|Custom link text]] can be used [[http://www.apple.com|with both types of links]].
Images can be embedded in the text:
[[image:http://factorcode.org/graphics/logo.png]]
- a list
- with three
- items
|a table|with|four|columns|
|and|two|rows|...|
Here is some code:
[{HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE}]
There is syntax highlighting various languages, too:
[factor{PEG: parse-request-line ( string -- triple )
#! Triple is { method url version }
[
'space' ,
'http-method' ,
'space' ,
'url' ,
'space' ,
'http-version' ,
'space' ,
] seq* just ;}]
Some Java:
[java{/**
* Returns the extension of the specified filename, or an empty
* string if there is none.
* @param path The path
*/
public static String getFileExtension(String path)
{
int fsIndex = getLastSeparatorIndex(path);
int index = path.lastIndexOf('.');
// there could be a dot in the path and no file extension
if(index == -1 || index < fsIndex )
return "";
else
return path.substring(index);
}}]

View File

@ -0,0 +1,5 @@
Congratulations, you are now running your very own Wiki.
You can now click *Edit* below and begin editing the content of the [[Front Page]]. This Wiki uses [[Farkup]] to mark up text.
Two special article names are recognized by the Wiki: [[Sidebar]] and [[Footer]]. They do not exist by default, but if you create them, they will be visible on every page.

View File

@ -13,6 +13,7 @@
<t:a t:href="$wiki">Front Page</t:a> <t:a t:href="$wiki">Front Page</t:a>
| <t:a t:href="$wiki/articles">All Articles</t:a> | <t:a t:href="$wiki/articles">All Articles</t:a>
| <t:a t:href="$wiki/changes">Recent Changes</t:a> | <t:a t:href="$wiki/changes">Recent Changes</t:a>
| <t:a t:href="$wiki/random">Random Article</t:a>
<t:if t:code="furnace.auth:logged-in?"> <t:if t:code="furnace.auth:logged-in?">
@ -45,6 +46,16 @@
</td> </td>
</t:if> </t:if>
</tr> </tr>
<tr>
<td>
<t:bind t:name="footer">
<small>
<t:farkup t:name="content" />
</small>
</t:bind>
</td>
</tr>
</table> </table>
</t:chloe> </t:chloe>

View File

@ -1,7 +1,8 @@
! Copyright (C) 2008 Slava Pestov ! Copyright (C) 2008 Slava Pestov
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel hashtables calendar USING: accessors kernel hashtables calendar random assocs
namespaces splitting sequences sorting math.order present namespaces splitting sequences sorting math.order present
io.files io.encodings.ascii
syndication syndication
html.components html.forms html.components html.forms
http.server http.server
@ -115,6 +116,14 @@ M: revision feed-entry-url id>> revision-url ;
{ wiki "view" } >>template ; { wiki "view" } >>template ;
: <random-article-action> ( -- action )
<action>
[
article new select-tuples random
[ title>> ] [ "Front Page" ] if*
view-url <redirect>
] >>display ;
: amend-article ( revision article -- ) : amend-article ( revision article -- )
swap id>> >>revision update-tuple ; swap id>> >>revision update-tuple ;
@ -286,15 +295,15 @@ M: revision feed-entry-url id>> revision-url ;
{ wiki "page-common" } >>template ; { wiki "page-common" } >>template ;
: init-sidebar ( -- ) : init-sidebar ( -- )
"Sidebar" latest-revision [ "Sidebar" latest-revision [ "sidebar" [ from-object ] nest-form ] when*
"sidebar" [ from-object ] nest-form "Footer" latest-revision [ "footer" [ from-object ] nest-form ] when* ;
] when* ;
: <wiki> ( -- dispatcher ) : <wiki> ( -- dispatcher )
wiki new-dispatcher wiki new-dispatcher
<main-article-action> <article-boilerplate> "" add-responder <main-article-action> <article-boilerplate> "" add-responder
<view-article-action> <article-boilerplate> "view" add-responder <view-article-action> <article-boilerplate> "view" add-responder
<view-revision-action> <article-boilerplate> "revision" add-responder <view-revision-action> <article-boilerplate> "revision" add-responder
<random-article-action> "random" add-responder
<list-revisions-action> <article-boilerplate> "revisions" add-responder <list-revisions-action> <article-boilerplate> "revisions" add-responder
<list-revisions-feed-action> "revisions.atom" add-responder <list-revisions-feed-action> "revisions.atom" add-responder
<diff-action> <article-boilerplate> "diff" add-responder <diff-action> <article-boilerplate> "diff" add-responder
@ -309,3 +318,15 @@ M: revision feed-entry-url id>> revision-url ;
<boilerplate> <boilerplate>
[ init-sidebar ] >>init [ init-sidebar ] >>init
{ wiki "wiki-common" } >>template ; { wiki "wiki-common" } >>template ;
: init-wiki ( -- )
"resource:extra/webapps/wiki/initial-content" directory* keys
[
[ ascii file-contents ] [ file-name "." split1 drop ] bi
f <revision>
swap >>title
swap >>content
"slava" >>author
now >>date
add-revision
] each ;

View File

@ -25,7 +25,7 @@ webapps.wee-url
webapps.user-admin ; webapps.user-admin ;
IN: websites.concatenative IN: websites.concatenative
: test-db ( -- db params ) "resource:test.db" sqlite-db ; : test-db ( -- params db ) "resource:test.db" sqlite-db ;
: init-factor-db ( -- ) : init-factor-db ( -- )
test-db [ test-db [
@ -48,7 +48,7 @@ TUPLE: factor-website < dispatcher ;
<blogs> "blogs" add-responder <blogs> "blogs" add-responder
<todo-list> "todo" add-responder <todo-list> "todo" add-responder
<pastebin> "pastebin" add-responder <pastebin> "pastebin" add-responder
<planet-factor> "planet" add-responder <planet> "planet" add-responder
<wiki> "wiki" add-responder <wiki> "wiki" add-responder
<wee-url> "wee-url" add-responder <wee-url> "wee-url" add-responder
<user-admin> "user-admin" add-responder <user-admin> "user-admin" add-responder

View File

@ -1,5 +1,5 @@
USING: kernel windows.com windows.com.syntax windows.ole32 USING: kernel windows.com windows.com.syntax windows.ole32
alien alien.syntax tools.test libc alien.c-types arrays.lib alien alien.syntax tools.test libc alien.c-types
namespaces arrays continuations accessors math windows.com.wrapper namespaces arrays continuations accessors math windows.com.wrapper
windows.com.wrapper.private destructors effects ; windows.com.wrapper.private destructors effects ;
IN: windows.com.tests IN: windows.com.tests

View File

@ -1,6 +1,6 @@
USING: alien alien.c-types effects kernel windows.ole32 USING: alien alien.c-types effects kernel windows.ole32
parser lexer splitting grouping sequences.lib sequences namespaces parser lexer splitting grouping sequences namespaces
assocs quotations shuffle accessors words macros alien.syntax assocs quotations generalizations accessors words macros alien.syntax
fry arrays ; fry arrays ;
IN: windows.com.syntax IN: windows.com.syntax

View File

@ -1,9 +1,8 @@
USING: alien alien.c-types windows.com.syntax USING: alien alien.c-types windows.com.syntax
windows.com.syntax.private windows.com continuations kernel windows.com.syntax.private windows.com continuations kernel
sequences.lib namespaces windows.ole32 libc vocabs namespaces windows.ole32 libc vocabs assocs accessors arrays
assocs accessors arrays sequences quotations combinators sequences quotations combinators math words compiler.units
math words compiler.units destructors fry destructors fry math.parser generalizations ;
math.parser combinators.lib ;
IN: windows.com.wrapper IN: windows.com.wrapper
TUPLE: com-wrapper vtbls disposed ; TUPLE: com-wrapper vtbls disposed ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2006 Doug Coleman. ! Copyright (C) 2005, 2006 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: alien alien.syntax parser namespaces kernel math USING: alien alien.syntax parser namespaces kernel math
windows.types shuffle math.bitfields alias ; windows.types generalizations math.bitfields alias ;
IN: windows.user32 IN: windows.user32
! HKL for ActivateKeyboardLayout ! HKL for ActivateKeyboardLayout
@ -1285,10 +1285,10 @@ FUNCTION: void SetLastErrorEx ( DWORD dwErrCode, DWORD dwType ) ;
! FUNCTION: SetWindowPlacement ! FUNCTION: SetWindowPlacement
FUNCTION: BOOL SetWindowPos ( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags ) ; FUNCTION: BOOL SetWindowPos ( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags ) ;
: HWND_BOTTOM ALIEN: 1 ; : HWND_BOTTOM ( -- alien ) 1 <alien> ;
: HWND_NOTOPMOST ALIEN: -2 ; : HWND_NOTOPMOST ( -- alien ) -2 <alien> ;
: HWND_TOP ALIEN: 0 ; : HWND_TOP ( -- alien ) 0 <alien> ;
: HWND_TOPMOST ALIEN: -1 ; : HWND_TOPMOST ( -- alien ) -1 <alien> ;
! FUNCTION: SetWindowRgn ! FUNCTION: SetWindowRgn
! FUNCTION: SetWindowsHookA ! FUNCTION: SetWindowsHookA

View File

@ -422,7 +422,10 @@ F_FIXNUM quot_code_offset_to_scan(CELL quot, F_FIXNUM offset)
} }
if(jit_ignore_declare_p(untag_object(array),i)) if(jit_ignore_declare_p(untag_object(array),i))
{ {
if(offset == 0) return i;
i++; i++;
break; break;
} }
default: default: