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

db4
Eduardo Cavazos 2008-08-27 17:11:09 -05:00
commit 708051b89d
306 changed files with 178 additions and 5907 deletions

View File

@ -0,0 +1,12 @@
IN: compiler.tests
USING: io.streams.string kernel tools.test eval ;
: declaration-test-1 ( -- a ) 3 ; flushable
: declaration-test ( -- ) declaration-test-1 drop ;
[ "" ] [ [ declaration-test ] with-string-writer ] unit-test
[ ] [ "IN: compiler.tests USE: io : declaration-test-1 ( -- a ) \"X\" print f ;" eval ] unit-test
[ "X" ] [ [ declaration-test ] with-string-writer ] unit-test

View File

@ -565,6 +565,12 @@ M: integer infinite-loop infinite-loop ;
[ ] [ [ too-deep ] final-info drop ] unit-test [ ] [ [ too-deep ] final-info drop ] unit-test
[ ] [ [ reversed boa slice boa nth-unsafe * ] final-info drop ] unit-test
MIXIN: empty-mixin
[ ] [ [ { empty-mixin } declare empty-mixin? ] final-info drop ] unit-test
! [ V{ string } ] [ ! [ V{ string } ] [
! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes ! [ dup string? t xor [ "A" throw ] [ ] if ] final-classes
! ] unit-test ! ] unit-test

View File

@ -68,9 +68,10 @@ M: float-array >pprint-sequence ;
USING: hints math.vectors arrays ; USING: hints math.vectors arrays ;
HINTS: vneg { float-array } { array } ; HINTS: vneg { float-array } { array } ;
HINTS: v*n { float-array object } { array object } ; HINTS: v*n { float-array float } { array object } ;
HINTS: v/n { float-array object } { array object } ; HINTS: n*v { float float-array } { array object } ;
HINTS: n/v { object float-array } { object array } ; HINTS: v/n { float-array float } { array object } ;
HINTS: n/v { float float-array } { object array } ;
HINTS: v+ { float-array float-array } { array array } ; HINTS: v+ { float-array float-array } { array array } ;
HINTS: v- { float-array float-array } { array array } ; HINTS: v- { float-array float-array } { array array } ;
HINTS: v* { float-array float-array } { array array } ; HINTS: v* { float-array float-array } { array array } ;

View File

@ -123,7 +123,7 @@ SYMBOLS: +read-only+ +hidden+ +system+
+not-content-indexed+ +encrypted+ ; +not-content-indexed+ +encrypted+ ;
: win32-file-attribute ( n attr symbol -- n ) : win32-file-attribute ( n attr symbol -- n )
>r dupd mask? [ r> , ] [ r> drop ] if ; >r dupd mask? r> swap [ , ] [ drop ] if ;
: win32-file-attributes ( n -- seq ) : win32-file-attributes ( n -- seq )
[ [

View File

@ -33,11 +33,9 @@ TUPLE: CreateProcess-args
CreateProcess-args >tuple< CreateProcess win32-error=0/f ; CreateProcess-args >tuple< CreateProcess win32-error=0/f ;
: count-trailing-backslashes ( str n -- str n ) : count-trailing-backslashes ( str n -- str n )
>r "\\" ?tail [ >r "\\" ?tail r> swap [
r> 1+ count-trailing-backslashes 1+ count-trailing-backslashes
] [ ] when ;
r>
] if ;
: fix-trailing-backslashes ( str -- str' ) : fix-trailing-backslashes ( str -- str' )
0 count-trailing-backslashes 0 count-trailing-backslashes

View File

@ -7,9 +7,8 @@ IN: ui.gadgets.canvas
TUPLE: canvas < gadget dlist ; TUPLE: canvas < gadget dlist ;
: <canvas> ( -- canvas ) : new-canvas ( class -- canvas )
canvas new-gadget new-gadget black solid-interior ; inline
black solid-interior ;
: delete-canvas-dlist ( canvas -- ) : delete-canvas-dlist ( canvas -- )
dup find-gl-context dup find-gl-context

View File

@ -7,5 +7,5 @@ TUPLE: handler < wrapper table ;
: <handler> ( child -- handler ) handler new-wrapper ; : <handler> ( child -- handler ) handler new-wrapper ;
M: handler handle-gesture* ( gadget gesture delegate -- ? ) M: handler handle-gesture ( gesture gadget -- ? )
table>> at dup [ call f ] [ 2drop t ] if ; over table>> at dup [ call f ] [ 2drop t ] if ;

View File

@ -33,7 +33,7 @@ M: dimensions-not-equal summary drop "Dimensions do not match" ;
\ <dimensioned> [ >dimensioned< ] define-inverse \ <dimensioned> [ >dimensioned< ] define-inverse
: dimensions ( dimensioned -- top bot ) : dimensions ( dimensioned -- top bot )
{ dimensioned-top dimensioned-bot } get-slots ; [ top>> ] [ bot>> ] bi ;
: check-dimensions ( d d -- ) : check-dimensions ( d d -- )
[ dimensions 2array ] bi@ = [ dimensions 2array ] bi@ =

View File

@ -1,9 +1,9 @@
! Factor port of the raytracer benchmark from ! Factor port of the raytracer benchmark from
! http://www.ffconsultancy.com/free/ray_tracer/languages.html ! http://www.ffconsultancy.com/free/ray_tracer/languages.html
USING: float-arrays compiler generic io io.files kernel math USING: arrays accessors float-arrays io io.files
math.functions math.vectors math.parser namespaces sequences io.encodings.binary kernel math math.functions math.vectors
sequences.private words io.encodings.binary ; math.parser namespaces sequences sequences.private words ;
IN: benchmark.raytracer IN: benchmark.raytracer
! parameters ! parameters
@ -23,32 +23,33 @@ IN: benchmark.raytracer
: delta 1.4901161193847656E-8 ; inline : delta 1.4901161193847656E-8 ; inline
TUPLE: ray orig dir ; TUPLE: ray { orig float-array read-only } { dir float-array read-only } ;
C: <ray> ray C: <ray> ray
TUPLE: hit normal lambda ; TUPLE: hit { normal float-array read-only } { lambda float read-only } ;
C: <hit> hit C: <hit> hit
GENERIC: intersect-scene ( hit ray scene -- hit ) GENERIC: intersect-scene ( hit ray scene -- hit )
TUPLE: sphere center radius ; TUPLE: sphere { center float-array read-only } { radius float read-only } ;
C: <sphere> sphere C: <sphere> sphere
: sphere-v ( sphere ray -- v ) : sphere-v ( sphere ray -- v )
swap sphere-center swap ray-orig v- ; inline swap center>> swap orig>> v- ; inline
: sphere-b ( ray v -- b ) swap ray-dir v. ; inline : sphere-b ( ray v -- b ) swap dir>> v. ; inline
: sphere-disc ( sphere v b -- d ) : sphere-disc ( sphere v b -- d )
sq swap norm-sq - swap sphere-radius sq + ; inline sq swap norm-sq - swap radius>> sq + ; inline
: -+ ( x y -- x-y x+y ) [ - ] 2keep + ; inline : -+ ( x y -- x-y x+y ) [ - ] 2keep + ; inline
: sphere-b/d ( b d -- t ) : sphere-b/d ( b d -- t )
-+ dup 0.0 < [ 2drop 1.0/0.0 ] [ >r [ 0.0 > ] keep r> ? ] if ; inline -+ dup 0.0 <
[ 2drop 1.0/0.0 ] [ [ [ 0.0 > ] keep ] dip ? ] if ; inline
: ray-sphere ( sphere ray -- t ) : ray-sphere ( sphere ray -- t )
2dup sphere-v tuck sphere-b [ sphere-disc ] keep 2dup sphere-v tuck sphere-b [ sphere-disc ] keep
@ -56,29 +57,31 @@ C: <sphere> sphere
inline inline
: sphere-n ( ray sphere l -- n ) : sphere-n ( ray sphere l -- n )
pick ray-dir n*v swap sphere-center v- swap ray-orig v+ ; pick dir>> n*v swap center>> v- swap orig>> v+ ;
inline inline
: if-ray-sphere ( hit ray sphere quot -- hit ) : if-ray-sphere ( hit ray sphere quot -- hit )
#! quot: hit ray sphere l -- hit #! quot: hit ray sphere l -- hit
>r pick hit-lambda >r 2dup swap ray-sphere dup r> >= [
[ 3drop ] r> if ; inline pick lambda>> [ 2dup swap ray-sphere dup ] dip >=
[ 3drop ]
] dip if ; inline
M: sphere intersect-scene ( hit ray sphere -- hit ) M: sphere intersect-scene ( hit ray sphere -- hit )
[ [ sphere-n normalize ] keep <hit> nip ] if-ray-sphere ; [ [ sphere-n normalize ] keep <hit> nip ] if-ray-sphere ;
TUPLE: group objs ; TUPLE: group < sphere { objs array read-only } ;
: <group> ( objs bound -- group ) : <group> ( objs bound -- group )
{ set-group-objs set-delegate } group construct ; [ center>> ] [ radius>> ] bi rot group boa ; inline
: make-group ( bound quot -- ) : make-group ( bound quot -- )
swap >r { } make r> <group> ; inline swap [ { } make ] dip <group> ; inline
M: group intersect-scene ( hit ray group -- hit ) M: group intersect-scene ( hit ray group -- hit )
[ [
drop drop
group-objs [ >r tuck r> intersect-scene swap ] each objs>> [ [ tuck ] dip intersect-scene swap ] each
drop drop
] if-ray-sphere ; ] if-ray-sphere ;
@ -88,30 +91,30 @@ M: group intersect-scene ( hit ray group -- hit )
initial-hit -rot intersect-scene ; inline initial-hit -rot intersect-scene ; inline
: ray-o ( ray hit -- o ) : ray-o ( ray hit -- o )
over ray-dir over hit-lambda v*n over dir>> over lambda>> v*n
swap hit-normal delta v*n v+ swap normal>> delta v*n v+
swap ray-orig v+ ; inline swap orig>> v+ ; inline
: sray-intersect ( ray scene hit -- ray ) : sray-intersect ( ray scene hit -- ray )
swap >r ray-o light vneg <ray> r> initial-intersect ; inline swap [ ray-o light vneg <ray> ] dip initial-intersect ; inline
: ray-g ( hit -- g ) hit-normal light v. ; inline : ray-g ( hit -- g ) normal>> light v. ; inline
: cast-ray ( ray scene -- g ) : cast-ray ( ray scene -- g )
2dup initial-intersect dup hit-lambda 1.0/0.0 = [ 2dup initial-intersect dup lambda>> 1.0/0.0 = [
3drop 0.0 3drop 0.0
] [ ] [
dup ray-g >r sray-intersect hit-lambda 1.0/0.0 = [ sray-intersect lambda>> 1.0/0.0 = ] keep swap
[ r> neg ] [ r> drop 0.0 ] if [ ray-g neg ] [ drop 0.0 ] if
] if ; inline ] if ; inline
: create-center ( c r d -- c2 ) : create-center ( c r d -- c2 )
>r 3.0 12.0 sqrt / * r> n*v v+ ; inline [ 3.0 12.0 sqrt / * ] dip n*v v+ ; inline
DEFER: create ( level c r -- scene ) DEFER: create ( level c r -- scene )
: create-step ( level c r d -- scene ) : create-step ( level c r d -- scene )
over >r create-center r> 2.0 / >r >r 1 - r> r> create ; over [ create-center ] dip 2.0 / [ 1 - ] 2dip create ;
: create-offsets ( quot -- ) : create-offsets ( quot -- )
{ {
@ -126,7 +129,7 @@ DEFER: create ( level c r -- scene )
: create-group ( level c r -- scene ) : create-group ( level c r -- scene )
2dup create-bound [ 2dup create-bound [
2dup <sphere> , 2dup <sphere> ,
[ >r 3dup r> create-step , ] create-offsets 3drop [ [ 3dup ] dip create-step , ] create-offsets 3drop
] make-group ; ] make-group ;
: create ( level c r -- scene ) : create ( level c r -- scene )
@ -140,7 +143,7 @@ DEFER: create ( level c r -- scene )
: ray-grid ( point ss-grid -- ray-grid ) : ray-grid ( point ss-grid -- ray-grid )
[ [
[ v+ normalize { 0.0 0.0 -4.0 } swap <ray> ] with map [ v+ normalize F{ 0.0 0.0 -4.0 } swap <ray> ] with map
] with map ; ] with map ;
: ray-pixel ( scene point -- n ) : ray-pixel ( scene point -- n )
@ -164,7 +167,7 @@ DEFER: create ( level c r -- scene )
pixel-grid [ [ ray-pixel ] with map ] with map ; pixel-grid [ [ ray-pixel ] with map ] with map ;
: run ( -- string ) : run ( -- string )
levels { 0.0 -1.0 0.0 } 1.0 create ray-trace [ levels F{ 0.0 -1.0 0.0 } 1.0 create ray-trace [
size size pgm-header size size pgm-header
[ [ oversampling sq / pgm-pixel ] each ] each [ [ oversampling sq / pgm-pixel ] each ] each
] B{ } make ; ] B{ } make ;

View File

@ -1,10 +1,11 @@
! Copyright (C) 2007 Doug Coleman. ! Copyright (C) 2007 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel macros sequences slots words classes.tuple ; USING: kernel macros sequences slots words classes.tuple
quotations combinators ;
IN: classes.tuple.lib IN: classes.tuple.lib
: reader-slots ( seq -- quot ) : reader-slots ( seq -- quot )
[ slot-spec-reader ] map [ get-slots ] curry ; [ slot-spec-reader 1quotation ] map [ cleave ] curry ;
MACRO: >tuple< ( class -- ) MACRO: >tuple< ( class -- )
all-slots rest-slice reader-slots ; all-slots rest-slice reader-slots ;

View File

@ -1,6 +0,0 @@
USING: kernel generic sequences ;
IN: generic.lib
: chain ( seq -- object ) unclip swap [ tuck set-delegate ] each ;

View File

@ -13,7 +13,7 @@ TUPLE: gesture-logger < gadget stream ;
{ 100 100 } >>dim { 100 100 } >>dim
black solid-interior ; black solid-interior ;
M: gesture-logger handle-gesture* M: gesture-logger handle-gesture
over T{ button-down } = [ dup request-focus ] when over T{ button-down } = [ dup request-focus ] when
stream>> [ . ] with-output-stream* stream>> [ . ] with-output-stream*
t ; t ;

View File

@ -226,17 +226,6 @@ DEFER: _
\ new 1 [ ?wrapped empty-inverse ] define-pop-inverse \ new 1 [ ?wrapped empty-inverse ] define-pop-inverse
: writer>reader ( word -- word' )
[ "writing" word-prop "slots" word-prop ] keep
[ swap slot-spec-writer = ] curry find nip slot-spec-reader ;
: construct-inverse ( class setters -- quot )
>r deconstruct-pred r>
[ writer>reader ] map [ get-slots ] curry
compose ;
\ construct 2 [ >r ?wrapped r> construct-inverse ] define-pop-inverse
! More useful inverse-based combinators ! More useful inverse-based combinators
: recover-fail ( try fail -- ) : recover-fail ( try fail -- )

View File

@ -168,7 +168,7 @@ M: key-caps-gadget graft*
M: key-caps-gadget ungraft* M: key-caps-gadget ungraft*
alarm>> [ cancel-alarm ] when* ; alarm>> [ cancel-alarm ] when* ;
M: key-caps-gadget handle-gesture* M: key-caps-gadget handle-gesture
drop [ key-down? ] [ key-up? ] bi or not ; drop [ key-down? ] [ key-up? ] bi or not ;
: key-caps ( -- ) : key-caps ( -- )

View File

@ -1,8 +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: sequences kernel math io calendar calendar.format USING: accessors sequences kernel math io calendar grouping
calendar.model arrays models models.filter namespaces ui.gadgets calendar.format calendar.model arrays models models.filter
ui.gadgets.labels ui.gadgets.theme ui ; namespaces ui.gadgets ui.gadgets.labels ui.gadgets.theme ui ;
IN: lcd IN: lcd
: lcd-digit ( row digit -- str ) : lcd-digit ( row digit -- str )
@ -11,7 +11,7 @@ IN: lcd
" | | | _| _| |_| |_ |_ | |_| |_| * " " | | | _| _| |_| |_ |_ | |_| |_| * "
" |_| | |_ _| | _| |_| | |_| | * " " |_| | |_ _| | _| |_| | |_| | * "
" " " "
} nth >r 4 * dup 4 + r> subseq ; } nth 4 <groups> nth ;
: lcd-row ( num row -- string ) : lcd-row ( num row -- string )
[ swap lcd-digit ] curry { } map-as concat ; [ swap lcd-digit ] curry { } map-as concat ;
@ -20,9 +20,8 @@ IN: lcd
4 [ lcd-row ] with map "\n" join ; 4 [ lcd-row ] with map "\n" join ;
: hh:mm:ss ( timestamp -- string ) : hh:mm:ss ( timestamp -- string )
{ [ hour>> ] [ minute>> ] [ second>> >fixnum ] tri
timestamp-hour timestamp-minute timestamp-second 3array [ pad-00 ] map ":" join ;
} get-slots >fixnum 3array [ pad-00 ] map ":" join ;
: <time-display> ( timestamp -- gadget ) : <time-display> ( timestamp -- gadget )
[ hh:mm:ss lcd ] <filter> <label-control> [ hh:mm:ss lcd ] <filter> <label-control>

View File

@ -194,9 +194,9 @@ METHOD: n*M.M+n*M-in-place { number double-complex-blas-matrix double-complex-bl
syntax:M: blas-matrix-base clone syntax:M: blas-matrix-base clone
[ [
[ [
{ data>> ld>> cols>> element-type } get-slots { [ data>> ] [ ld>> ] [ cols>> ] [ element-type heap-size ] } cleave
heap-size * * memory>byte-array * * memory>byte-array
] [ { ld>> rows>> cols>> transpose>> } get-slots ] bi ] [ { [ ld>> ] [ rows>> ] [ cols>> ] [ transpose>> ] } cleave ] bi
] keep (blas-matrix-like) ; ] keep (blas-matrix-like) ;
! XXX try rounding stride to next 128 bit bound for better vectorizin' ! XXX try rounding stride to next 128 bit bound for better vectorizin'
@ -296,7 +296,7 @@ syntax:M: blas-matrix-rowcol-sequence nth-unsafe
recip swap n*M ; inline recip swap n*M ; inline
: Mtranspose ( matrix -- matrix^T ) : Mtranspose ( matrix -- matrix^T )
[ { data>> ld>> rows>> cols>> transpose>> } get-slots not ] keep (blas-matrix-like) ; [ { [ data>> ] [ ld>> ] [ rows>> ] [ cols>> ] [ transpose>> not ] } cleave ] keep (blas-matrix-like) ;
syntax:M: blas-matrix-base equal? syntax:M: blas-matrix-base equal?
{ {

View File

@ -49,10 +49,9 @@ SYMBOL: visited
{ 0 0 } dup vertex (draw-maze) { 0 0 } dup vertex (draw-maze)
glEnd ; glEnd ;
TUPLE: maze ; TUPLE: maze < canvas ;
: <maze> ( -- gadget ) : <maze> ( -- gadget ) maze new-canvas ;
<canvas> { set-delegate } maze construct ;
: n ( gadget -- n ) rect-dim first2 min line-width /i ; : n ( gadget -- n ) rect-dim first2 min line-width /i ;

View File

@ -26,8 +26,8 @@ SYMBOL: key-value
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
M: processing-gadget handle-gesture* ( gadget gesture delegate -- ? ) M: processing-gadget handle-gesture ( gesture gadget -- ? )
rot drop swap ! delegate gesture swap
{ {
{ {
[ dup key-down? ] [ dup key-down? ]

View File

@ -1,3 +1,5 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs math kernel shuffle generalizations 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
@ -92,11 +94,11 @@ M: word noise badness 1 2array ;
M: wrapper noise wrapped>> noise ; M: wrapper noise wrapped>> noise ;
M: let noise let-body noise ; M: let noise body>> noise ;
M: wlet noise wlet-body noise ; M: wlet noise body>> noise ;
M: lambda noise lambda-body noise ; M: lambda noise body>> noise ;
M: object noise drop { 0 0 } ; M: object noise drop { 0 0 } ;

View File

@ -1,44 +0,0 @@
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs words sequences arrays compiler
tools.time io.styles io prettyprint vocabs kernel sorting
generator optimizer math math.order math.statistics combinators
optimizer.debugger ;
IN: report.optimizer
: table. ( alist -- )
20 short tail*
standard-table-style
[
[ [ [ pprint-cell ] each ] with-row ] each
] tabular-output ;
: results ( results quot title -- )
print
[ second ] prepose
[ [ compare ] curry sort table. ]
[
map
[ "Mean: " write mean >float . ]
[ "Median: " write median >float . ]
[ "Standard deviation: " write std >float . ]
tri
] 2bi ; inline
: optimization-passes ( word -- n )
word-dataflow nip 1 count-optimization-passes nip ;
: optimizer-measurements ( -- alist )
all-words [ compiled>> ] filter
[ dup [ optimization-passes ] benchmark 2array ] { } map>assoc ;
: optimizer-measurements. ( alist -- )
{
[ [ first ] "Optimizer passes:" results ]
[ [ second ] "Compile times:" results ]
} cleave ;
: optimizer-report ( -- )
optimizer-measurements optimizer-measurements. ;
MAIN: optimizer-report

View File

@ -1 +0,0 @@
Eduardo Cavazos

View File

@ -13,7 +13,15 @@ MIXIN: node
TUPLE: concatenation seq ; INSTANCE: concatenation node TUPLE: concatenation seq ; INSTANCE: concatenation node
TUPLE: alternation seq ; INSTANCE: alternation node TUPLE: alternation seq ; INSTANCE: alternation node
TUPLE: kleene-star term ; INSTANCE: kleene-star node TUPLE: kleene-star term ; INSTANCE: kleene-star node
TUPLE: question term ; INSTANCE: question node
! !!!!!!!!
TUPLE: possessive-question term ; INSTANCE: possessive-question node
TUPLE: possessive-kleene-star term ; INSTANCE: possessive-kleene-star node
! !!!!!!!!
TUPLE: reluctant-question term ; INSTANCE: reluctant-question node
TUPLE: reluctant-kleene-star term ; INSTANCE: reluctant-kleene-star node
TUPLE: negation term ; INSTANCE: negation node TUPLE: negation term ; INSTANCE: negation node
TUPLE: constant char ; INSTANCE: constant node TUPLE: constant char ; INSTANCE: constant node
TUPLE: range from to ; INSTANCE: range node TUPLE: range from to ; INSTANCE: range node
@ -21,7 +29,7 @@ TUPLE: lookahead term ; INSTANCE: lookahead node
TUPLE: lookbehind term ; INSTANCE: lookbehind node TUPLE: lookbehind term ; INSTANCE: lookbehind node
TUPLE: capture-group term ; INSTANCE: capture-group node TUPLE: capture-group term ; INSTANCE: capture-group node
TUPLE: non-capture-group term ; INSTANCE: non-capture-group node TUPLE: non-capture-group term ; INSTANCE: non-capture-group node
TUPLE: independent-group term ; INSTANCE: independent-group node TUPLE: independent-group term ; INSTANCE: independent-group node ! atomic group
TUPLE: character-class-range from to ; INSTANCE: character-class-range node TUPLE: character-class-range from to ; INSTANCE: character-class-range node
SINGLETON: epsilon INSTANCE: epsilon node SINGLETON: epsilon INSTANCE: epsilon node
SINGLETON: any-char INSTANCE: any-char node SINGLETON: any-char INSTANCE: any-char node
@ -51,6 +59,11 @@ left-parenthesis pipe caret dash ;
: get-unicode-case ( -- ? ) unicode-case get-option ; : get-unicode-case ( -- ? ) unicode-case get-option ;
: get-reversed-regexp ( -- ? ) reversed-regexp get-option ; : get-reversed-regexp ( -- ? ) reversed-regexp get-option ;
: <possessive-kleene-star> ( obj -- kleene ) possessive-kleene-star boa ;
: <reluctant-kleene-star> ( obj -- kleene ) reluctant-kleene-star boa ;
: <possessive-question> ( obj -- kleene ) possessive-question boa ;
: <reluctant-question> ( obj -- kleene ) reluctant-question boa ;
: <negation> ( obj -- negation ) negation boa ; : <negation> ( obj -- negation ) negation boa ;
: <concatenation> ( seq -- concatenation ) : <concatenation> ( seq -- concatenation )
>vector get-reversed-regexp [ reverse ] when >vector get-reversed-regexp [ reverse ] when
@ -101,7 +114,6 @@ ERROR: unmatched-parentheses ;
: make-negative-lookbehind ( string -- ) : make-negative-lookbehind ( string -- )
<negation> lookbehind boa push-stack ; <negation> lookbehind boa push-stack ;
DEFER: nested-parse-regexp
: make-non-capturing-group ( string -- ) : make-non-capturing-group ( string -- )
non-capture-group boa push-stack ; non-capture-group boa push-stack ;
@ -112,6 +124,7 @@ ERROR: bad-option ch ;
{ CHAR: i [ case-insensitive ] } { CHAR: i [ case-insensitive ] }
{ CHAR: d [ unix-lines ] } { CHAR: d [ unix-lines ] }
{ CHAR: m [ multiline ] } { CHAR: m [ multiline ] }
{ CHAR: n [ multiline ] }
{ CHAR: r [ reversed-regexp ] } { CHAR: r [ reversed-regexp ] }
{ CHAR: s [ dotall ] } { CHAR: s [ dotall ] }
{ CHAR: u [ unicode-case ] } { CHAR: u [ unicode-case ] }
@ -135,6 +148,7 @@ DEFER: (parse-regexp)
ERROR: bad-special-group string ; ERROR: bad-special-group string ;
DEFER: nested-parse-regexp
: (parse-special-group) ( -- ) : (parse-special-group) ( -- )
read1 { read1 {
{ [ dup CHAR: : = ] { [ dup CHAR: : = ]
@ -146,9 +160,9 @@ ERROR: bad-special-group string ;
{ [ dup CHAR: > = ] { [ dup CHAR: > = ]
[ drop nested-parse-regexp pop-stack make-independent-group ] } [ drop nested-parse-regexp pop-stack make-independent-group ] }
{ [ dup CHAR: < = peek1 CHAR: = = and ] { [ dup CHAR: < = peek1 CHAR: = = and ]
[ drop read1 drop nested-parse-regexp pop-stack make-positive-lookbehind ] } [ drop drop1 nested-parse-regexp pop-stack make-positive-lookbehind ] }
{ [ dup CHAR: < = peek1 CHAR: ! = and ] { [ dup CHAR: < = peek1 CHAR: ! = and ]
[ drop read1 drop nested-parse-regexp pop-stack make-negative-lookbehind ] } [ drop drop1 nested-parse-regexp pop-stack make-negative-lookbehind ] }
[ [
":)" read-until ":)" read-until
[ swap prefix ] dip [ swap prefix ] dip
@ -162,16 +176,27 @@ ERROR: bad-special-group string ;
: handle-left-parenthesis ( -- ) : handle-left-parenthesis ( -- )
peek1 CHAR: ? = peek1 CHAR: ? =
[ read1 drop (parse-special-group) ] [ drop1 (parse-special-group) ]
[ nested-parse-regexp ] if ; [ nested-parse-regexp ] if ;
: handle-dot ( -- ) any-char push-stack ; : handle-dot ( -- ) any-char push-stack ;
: handle-pipe ( -- ) pipe push-stack ; : handle-pipe ( -- ) pipe push-stack ;
: handle-star ( -- ) stack pop <kleene-star> push-stack ; : (handle-star) ( obj -- kleene-star )
peek1 {
{ CHAR: + [ drop1 <possessive-kleene-star> ] }
{ CHAR: ? [ drop1 <reluctant-kleene-star> ] }
[ drop <kleene-star> ]
} case ;
: handle-star ( -- ) stack pop (handle-star) push-stack ;
: handle-question ( -- ) : handle-question ( -- )
stack pop epsilon 2array <alternation> push-stack ; stack pop peek1 {
{ CHAR: + [ drop1 <possessive-question> ] }
{ CHAR: ? [ drop1 <reluctant-question> ] }
[ drop epsilon 2array <alternation> ]
} case push-stack ;
: handle-plus ( -- ) : handle-plus ( -- )
stack pop dup <kleene-star> 2array <concatenation> push-stack ; stack pop dup (handle-star)
2array <concatenation> push-stack ;
ERROR: unmatched-brace ; ERROR: unmatched-brace ;
: parse-repetition ( -- start finish ? ) : parse-repetition ( -- start finish ? )
@ -247,7 +272,7 @@ ERROR: expected-posix-class ;
ERROR: bad-escaped-literals seq ; ERROR: bad-escaped-literals seq ;
: parse-escaped-literals ( -- obj ) : parse-escaped-literals ( -- obj )
"\\E" read-until [ bad-escaped-literals ] unless "\\E" read-until [ bad-escaped-literals ] unless
read1 drop drop1
[ epsilon ] [ [ epsilon ] [
[ <constant> ] V{ } map-as [ <constant> ] V{ } map-as
first|concatenation first|concatenation

View File

@ -180,58 +180,18 @@ IN: regexp2-tests
[ t ] [ "aaaab" "a+ab" <regexp> matches? ] unit-test [ t ] [ "aaaab" "a+ab" <regexp> matches? ] unit-test
[ f ] [ "aaaxb" "a+ab" <regexp> matches? ] unit-test [ f ] [ "aaaxb" "a+ab" <regexp> matches? ] unit-test
[ t ] [ "aaacb" "a+cb" <regexp> matches? ] unit-test [ t ] [ "aaacb" "a+cb" <regexp> matches? ] unit-test
[ f ] [ "aaaab" "a++ab" <regexp> matches? ] unit-test
[ t ] [ "aaacb" "a++cb" <regexp> matches? ] unit-test
[ 3 ] [ "aaacb" "a*" <regexp> match-head ] unit-test [ 3 ] [ "aaacb" "a*" <regexp> match-head ] unit-test
[ 1 ] [ "aaacb" "a+?" <regexp> match-head ] unit-test
[ 2 ] [ "aaacb" "aa?" <regexp> match-head ] unit-test [ 2 ] [ "aaacb" "aa?" <regexp> match-head ] unit-test
[ 1 ] [ "aaacb" "aa??" <regexp> match-head ] unit-test
[ 3 ] [ "aacb" "aa?c" <regexp> match-head ] unit-test
[ 3 ] [ "aacb" "aa??c" <regexp> match-head ] unit-test
! [ t ] [ "aaa" "AAA" t <regexp> matches? ] unit-test [ t ] [ "aaa" "AAA" <iregexp> matches? ] unit-test
! [ f ] [ "aax" "AAA" t <regexp> matches? ] unit-test [ f ] [ "aax" "AAA" <iregexp> matches? ] unit-test
! [ t ] [ "aaa" "A*" t <regexp> matches? ] unit-test [ t ] [ "aaa" "A*" <iregexp> matches? ] unit-test
! [ f ] [ "aaba" "A*" t <regexp> matches? ] unit-test [ f ] [ "aaba" "A*" <iregexp> matches? ] unit-test
! [ t ] [ "b" "[AB]" t <regexp> matches? ] unit-test [ t ] [ "b" "[AB]" <iregexp> matches? ] unit-test
! [ f ] [ "c" "[AB]" t <regexp> matches? ] unit-test [ f ] [ "c" "[AB]" <iregexp> matches? ] unit-test
! [ t ] [ "c" "[A-Z]" t <regexp> matches? ] unit-test [ t ] [ "c" "[A-Z]" <iregexp> matches? ] unit-test
! [ f ] [ "3" "[A-Z]" t <regexp> matches? ] unit-test [ f ] [ "3" "[A-Z]" <iregexp> matches? ] unit-test
[ ] [
"(0[lL]?|[1-9]\\d{0,9}(\\d{0,9}[lL])?|0[xX]\\p{XDigit}{1,8}(\\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\\.[0-9]*|\\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))"
<regexp> drop
] unit-test
[ "{Lower}" <regexp> ] [ invalid-range? ] must-fail-with
[ t ] [ "fxxbar" "(?!foo).{3}bar" <regexp> matches? ] unit-test
[ f ] [ "foobar" "(?!foo).{3}bar" <regexp> matches? ] unit-test
! [ 3 ] [ "foobar" "foo(?=bar)" <regexp> match-head ] unit-test
! [ f ] [ "foobxr" "foo(?=bar)" <regexp> match-head ] unit-test
! [ f ] [ "foobxr" "foo\\z" <regexp> match-head ] unit-test
! [ 3 ] [ "foo" "foo\\z" <regexp> match-head ] unit-test
! [ 3 ] [ "foo bar" "foo\\b" <regexp> match-head ] unit-test
! [ f ] [ "fooxbar" "foo\\b" <regexp> matches? ] unit-test
! [ t ] [ "foo" "foo\\b" <regexp> matches? ] unit-test
! [ t ] [ "foo bar" "foo\\b bar" <regexp> matches? ] unit-test
! [ f ] [ "fooxbar" "foo\\bxbar" <regexp> matches? ] unit-test
! [ f ] [ "foo" "foo\\bbar" <regexp> matches? ] unit-test
! [ f ] [ "foo bar" "foo\\B" <regexp> matches? ] unit-test
! [ 3 ] [ "fooxbar" "foo\\B" <regexp> match-head ] unit-test
! [ t ] [ "foo" "foo\\B" <regexp> matches? ] unit-test
! [ f ] [ "foo bar" "foo\\B bar" <regexp> matches? ] unit-test
! [ t ] [ "fooxbar" "foo\\Bxbar" <regexp> matches? ] unit-test
! [ f ] [ "foo" "foo\\Bbar" <regexp> matches? ] unit-test
[ t ] [ "s@f" "[a-z.-]@[a-z]" <regexp> matches? ] unit-test
[ f ] [ "a" "[a-z.-]@[a-z]" <regexp> matches? ] unit-test
[ t ] [ ".o" "\\.[a-z]" <regexp> matches? ] unit-test
[ t ] [ "a" "(?i)a" <regexp> matches? ] unit-test [ t ] [ "a" "(?i)a" <regexp> matches? ] unit-test
[ t ] [ "a" "(?i)a" <regexp> matches? ] unit-test [ t ] [ "a" "(?i)a" <regexp> matches? ] unit-test
@ -253,6 +213,50 @@ IN: regexp2-tests
[ t ] [ "abc" <reversed> "a[bB][cC]" <rregexp> matches? ] unit-test [ t ] [ "abc" <reversed> "a[bB][cC]" <rregexp> matches? ] unit-test
[ t ] [ "adcbe" "a(?r)(bcd)(?-r)e" <rregexp> matches? ] unit-test [ t ] [ "adcbe" "a(?r)(bcd)(?-r)e" <rregexp> matches? ] unit-test
[ t ] [ "s@f" "[a-z.-]@[a-z]" <regexp> matches? ] unit-test
[ f ] [ "a" "[a-z.-]@[a-z]" <regexp> matches? ] unit-test
[ t ] [ ".o" "\\.[a-z]" <regexp> matches? ] unit-test
[ ] [
"(0[lL]?|[1-9]\\d{0,9}(\\d{0,9}[lL])?|0[xX]\\p{XDigit}{1,8}(\\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\\.[0-9]*|\\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))"
<regexp> drop
] unit-test
[ "{Lower}" <regexp> ] [ invalid-range? ] must-fail-with
[ 1 ] [ "aaacb" "a+?" <regexp> match-head ] unit-test
[ 1 ] [ "aaacb" "aa??" <regexp> match-head ] unit-test
[ f ] [ "aaaab" "a++ab" <regexp> matches? ] unit-test
[ t ] [ "aaacb" "a++cb" <regexp> matches? ] unit-test
[ 3 ] [ "aacb" "aa?c" <regexp> match-head ] unit-test
[ 3 ] [ "aacb" "aa??c" <regexp> match-head ] unit-test
[ t ] [ "fxxbar" "(?!foo).{3}bar" <regexp> matches? ] unit-test
[ f ] [ "foobar" "(?!foo).{3}bar" <regexp> matches? ] unit-test
[ 3 ] [ "foobar" "foo(?=bar)" <regexp> match-head ] unit-test
[ f ] [ "foobxr" "foo(?=bar)" <regexp> match-head ] unit-test
! [ f ] [ "foobxr" "foo\\z" <regexp> match-head ] unit-test
! [ 3 ] [ "foo" "foo\\z" <regexp> match-head ] unit-test
! [ 3 ] [ "foo bar" "foo\\b" <regexp> match-head ] unit-test
! [ f ] [ "fooxbar" "foo\\b" <regexp> matches? ] unit-test
! [ t ] [ "foo" "foo\\b" <regexp> matches? ] unit-test
! [ t ] [ "foo bar" "foo\\b bar" <regexp> matches? ] unit-test
! [ f ] [ "fooxbar" "foo\\bxbar" <regexp> matches? ] unit-test
! [ f ] [ "foo" "foo\\bbar" <regexp> matches? ] unit-test
! [ f ] [ "foo bar" "foo\\B" <regexp> matches? ] unit-test
! [ 3 ] [ "fooxbar" "foo\\B" <regexp> match-head ] unit-test
! [ t ] [ "foo" "foo\\B" <regexp> matches? ] unit-test
! [ f ] [ "foo bar" "foo\\B bar" <regexp> matches? ] unit-test
! [ t ] [ "fooxbar" "foo\\Bxbar" <regexp> matches? ] unit-test
! [ f ] [ "foo" "foo\\Bbar" <regexp> matches? ] unit-test
! Bug in parsing word ! Bug in parsing word
! [ t ] [ "a" R' a' matches? ] unit-test ! [ t ] [ "a" R' a' matches? ] unit-test

View File

@ -19,6 +19,7 @@ IN: regexp2.utils
: push1 ( obj -- ) input-stream get stream>> push ; : push1 ( obj -- ) input-stream get stream>> push ;
: peek1 ( -- obj ) input-stream get stream>> [ f ] [ peek ] if-empty ; : peek1 ( -- obj ) input-stream get stream>> [ f ] [ peek ] if-empty ;
: pop3 ( seq -- obj1 obj2 obj3 ) [ pop ] [ pop ] [ pop ] tri spin ; : pop3 ( seq -- obj1 obj2 obj3 ) [ pop ] [ pop ] [ pop ] tri spin ;
: drop1 ( -- ) read1 drop ;
: stack ( -- obj ) current-regexp get stack>> ; : stack ( -- obj ) current-regexp get stack>> ;
: change-whole-stack ( quot -- ) : change-whole-stack ( quot -- )

View File

@ -82,7 +82,7 @@ M: bunny-dlist bunny-geom
bunny-dlist-list glCallList ; bunny-dlist-list glCallList ;
M: bunny-buffers bunny-geom M: bunny-buffers bunny-geom
dup { array>> element-array>> } get-slots [ dup [ array>> ] [ element-array>> ] bi [
{ GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [ { GL_VERTEX_ARRAY GL_NORMAL_ARRAY } [
GL_FLOAT 0 0 buffer-offset glNormalPointer GL_FLOAT 0 0 buffer-offset glNormalPointer
[ [
@ -99,7 +99,7 @@ M: bunny-dlist dispose
list>> delete-dlist ; list>> delete-dlist ;
M: bunny-buffers dispose M: bunny-buffers dispose
{ array>> element-array>> } get-slots [ array>> ] [ element-array>> ] bi
delete-gl-buffer delete-gl-buffer ; delete-gl-buffer delete-gl-buffer ;
: <bunny-geom> ( model -- geom ) : <bunny-geom> ( model -- geom )

View File

@ -1 +0,0 @@
Eduardo Cavazos

View File

@ -1,94 +0,0 @@
USING: kernel
io
io.streams.duplex
io.sockets
io.server
combinators continuations
namespaces generic threads sequences arrays vars ;
IN: cabal
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
TUPLE: user name ;
: <user> ( client -- user )
user construct-empty
tuck set-delegate
dup [ "name: " write flush readln ] with-stream* over set-user-name ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VAR: users
: init-users ( -- ) V{ } clone >users ;
: show-users ( -- ) users> [ user-name print ] each flush ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VAR: conversation
: init-conversation ( -- ) V{ } clone >conversation ;
: show-conversation ( -- ) conversation> [ print ] each flush ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
VARS: input user ;
: ((send-input)) ( other -- ) [ input> print flush ] with-stream* ;
: (send-input) ( other -- )
[ ((send-input)) ] catch [ print dup dispose users> delete ] when ;
: send-input ( other -- )
dup duplex-stream-closed? [ users> delete ] [ (send-input) ] if ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: tag-input ( -- ) user> user-name ": " input> 3append >input ;
: log-input ( -- ) input> conversation> push ;
! : send-message ( -- ) tag-input users> >array [ send-input ] each ;
: send-message ( -- ) tag-input log-input users> >array [ send-input ] each ;
: handle-user-loop ( -- )
readln >input
{ { [ input> f eq? ] [ user> users> delete ] }
{ [ input> "/log" = ] [ show-conversation handle-user-loop ] }
{ [ input> "/users" = ] [ show-users handle-user-loop ] }
{ [ t ] [ send-message handle-user-loop ] } }
cond ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! : handle-client ( client -- ) <user> dup users> push
! dup [ >user [ handle-user-loop ] with-stream* ] with-scope ;
: handle-client ( client -- )
<user> dup users> push
dup [ >user [ handle-user-loop ] with-stream ] with-scope ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: accept-client-loop ( server -- )
[ accept [ handle-client ] curry in-thread ] keep
accept-client-loop ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! : start-cabal ( -- )
! init-users
! init-conversation
! 8000 <server> accept-client-loop ;
: start-cabal ( -- )
init-users
init-conversation
8000 internet-server [ inet4? ] find nip <server> accept-client-loop ;
MAIN: start-cabal

View File

@ -1 +0,0 @@
Minimalist chat server

View File

@ -1,2 +0,0 @@
Matthew Willis
Eduardo Cavazos

View File

@ -1 +0,0 @@
Connects to a cabal server

View File

@ -1,52 +0,0 @@
USING: kernel
io
io.streams.duplex
io.sockets
namespaces sequences math math.parser threads quotations splitting
ui
ui.gadgets
ui.gadgets.panes
ui.gadgets.scrollers
ui.gadgets.tracks
ui.tools.interactor ;
IN: cabal.ui
TUPLE: cabal-gadget input output ;
: <cabal-input> ( -- gadget )
gadget get cabal-gadget-output <pane-stream> <interactor> ;
: <cabal-gadget> ( -- gadget )
cabal-gadget construct-empty
dup
[ <scrolling-pane> over dupd set-cabal-gadget-output <scroller> 5/6 track,
<cabal-input> over dupd set-cabal-gadget-input <scroller> 1/6 track,
drop ]
curry
{ 0 1 }
build-track ;
M: cabal-gadget pref-dim* drop { 550 650 } ;
: cabal-stream ( cabal -- stream )
dup cabal-gadget-input swap cabal-gadget-output <pane-stream>
<duplex-stream> ;
: incoming-loop ( stream -- ) dup stream-readln print incoming-loop ;
: outgoing-loop ( stream -- )
readln over stream-print dup stream-flush outgoing-loop ;
: cabal-thread ( -- )
"cabal://" write readln
":" split1 string>number <inet> <client>
[ outgoing-loop ] in-thread incoming-loop ;
: cabal-client ( -- )
<cabal-gadget> dup "Cabal Client" open-window
cabal-stream [ [ cabal-thread ] with-stream ] in-thread drop ;
: cabal-client* ( -- ) [ cabal-client ] with-ui ;
MAIN: cabal-client*

View File

@ -1 +0,0 @@
Robbert van Dalen

View File

@ -1,6 +0,0 @@
! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel sequences enchilada strings ;
IN: temporary

View File

@ -1,12 +0,0 @@
! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
IN: enchilada
USING: generic kernel enchilada.engine enchilada.parser enchilada.printer prettyprint ;
: (e-eval) ( e-expression -- )
dup e-reducible? [ dup e-print . e-reduce (e-eval) ] [ e-print . ] if ;
: e-eval ( string -- )
e-parse (e-eval) ;

View File

@ -1,322 +0,0 @@
! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
IN: enchilada.engine
USING: generic kernel math sequences isequences.interface isequences.base isequences.ops ;
! Provides Enchilada's rewriting expression engine.
!
GENERIC: !! ( list -- list )
GENERIC: \\ ( list -- list )
GENERIC: e-reducible? ( e -- ? )
GENERIC: e-dyadic? ( o -- ? )
GENERIC: e-operator? ( o -- ? )
GENERIC: e-list? ( o -- ? )
GENERIC: e-symbol? ( o -- ? )
GENERIC: e-m-operate ( v op -- e )
GENERIC: e-d-operate ( v1 v2 op -- e )
GENERIC: e-reduce ( e -- e )
GENERIC: free-symbols ( s -- symbols )
TUPLE: ireplace from to seq ;
: unpack-ireplace ( ireplace -- from to seq )
dup ireplace-from swap dup ireplace-to swap ireplace-seq ; inline
GENERIC: e-replace ( from to sequence -- s )
: (ireplace1) ( from to seq -- ireplace )
dup is-atom?
[ pick over i-cmp 0 = [ drop nip ] [ nip nip ] if ]
[ <ireplace> ] if ;
: <i-replace> ( from to seq -- ireplace )
dup i-length dup 0 =
[ 3drop drop 0 ]
[ 1 = [ (ireplace1) ] [ <ireplace> ] if ]
if ;
: ireplace-i-at ( s i -- v )
swap dup ireplace-seq rot i-at dup >r swap dup ireplace-from rot i-cmp 0 =
[ r> drop ireplace-to ]
[ dup ireplace-from swap ireplace-to r> e-replace ]
if ;
M: object e-replace <i-replace> ;
M: integer e-replace -rot 2drop ;
M: ireplace i-length ireplace-seq i-length ;
M: ireplace i-at ireplace-i-at ;
M: ireplace ileft unpack-ireplace ileft e-replace ;
M: ireplace iright unpack-ireplace iright e-replace ;
M: ireplace ihead (ihead) ;
M: ireplace itail (itail) ;
M: ireplace $$ unpack-ireplace [ $$ ] 2apply rot $$ quick-hash quick-hash ;
TUPLE: esymbol seq ;
GENERIC: esymbol/i-cmp ( esymbol s -- i )
M: object esymbol/i-cmp 2drop -1 ;
M: esymbol esymbol/i-cmp swap [ esymbol-seq ] 2apply i-cmp ;
M: esymbol object/i-cmp 2drop 1 ;
M: esymbol i-cmp swap esymbol/i-cmp ;
DEFER: (sunion)
: (sunion6) ( s1 s2 -- s )
2dup [ 0 i-at ] 2apply i-cmp dup zero?
[ 2drop ] [ 0 > [ swap ] when ++ ] if ; inline
: (sunion5) ( s1 s2 -- s )
over ileft i-length pick swap i-at icut rot left-right
swap roll (sunion) -rot swap (sunion) ++ ; inline
: (sunion4) ( s1 s2 -- s )
2dup ifirst swap ilast i-cmp dup zero?
[ drop 1 itail ++ ] [ 0 > [ ++ ] [ (sunion5) ] if ] if ; inline
: (sunion3) ( s1 s2 ls1 ls2 -- s )
1 =
[ 1 = [ (sunion6) ] [ (sunion4) ] if ]
[ 1 = [ swap ] when (sunion4) ] if ; inline
: (sunion2) ( s1 s2 -- s )
2dup [ i-length ] 2apply 2dup zero?
[ 3drop drop ] [ zero? [ 2drop nip ] [ (sunion3) ] if ] if ; inline
: (sunion) ( s1 s2 -- s )
2dup eq? [ drop ] [ (sunion2) ] if ; inline
: s-union ( s1 s2 -- s )
(sunion) ; inline
: (free-symbols) ( s -- symbols )
dup is-atom?
[ dup e-symbol? [ drop 0 ] unless ]
[ 0 i-at free-symbols ] if ;
M: object free-symbols
dup i-length dup 0 =
[ 2drop 0 ]
[ 1 = [ (free-symbols) ] [ left-right [ free-symbols ] 2apply s-union ] if ] if ;
M: integer free-symbols drop 0 ;
M: object !!
dup i-length dup 0 =
[ 2drop 0 ]
[ 1 = [ 0 i-at dup left-side swap right-side [ e-reduce ] 2apply <i-dual-sided> <i> ] [ left-right [ !! ] 2apply ++ ] if ] if ;
M: integer !! ;
: (\\) ( expr -- list )
dup i-length dup 0 =
[ 2drop 0 ]
[ 1 = [ <i> ] [ left-right [ (\\) ] 2apply ++ ] if ] if ;
M: object \\
dup i-length dup 0 =
[ 2drop 0 ]
[ 1 = [ 0 i-at left-side (\\) ] [ left-right [ \\ ] 2apply ++ ] if ] if ;
M: integer \\ ;
TUPLE: emacro symbols expr eager? ;
: symbol-list? ( symbols -- ? )
i-sort dup free-symbols i-cmp 0 = ; inline
: full-reduce ( expr -- expr )
dup e-reducible? [ e-reduce full-reduce ] when ;
: <e-macro> ( symbols expr eager? -- e-macro )
dup [ swap full-reduce swap ] when
>r swap dup symbol-list? [ swap r> <emacro> ] [ "illegal symbol list" throw ] if ;
M: emacro free-symbols dup emacro-expr free-symbols swap emacro-symbols i-diff ;
M: emacro e-replace
pick over [ free-symbols ] 2apply i-intersect i-length 0 =
[ -rot 2drop ]
[ dup >r emacro-expr e-replace r> dup emacro-symbols swap emacro-eager? rot swap <e-macro> ] if ;
: eflatten ( s -- s )
dup i-length dup zero?
[ 2drop 0 ]
[ 1 = [ 0 i-at left-side ] [ left-right [ eflatten ] 2apply ++ ] if ] if ; inline
TUPLE: c-op v d-op ;
M: object e-operator? drop f ;
M: object e-list? dup e-operator? not swap e-symbol? not and ;
M: object e-symbol? drop f ;
M: object e-dyadic? drop f ;
M: esymbol e-symbol? drop t ;
M: c-op e-m-operate
dup c-op-v swap c-op-d-op e-d-operate ;
TUPLE: .- ;
M: .- e-m-operate drop -- <i> ;
TUPLE: .` ;
M: .` e-m-operate drop `` <i> ;
TUPLE: .$ ;
M: .$ e-m-operate drop $$ <i> ;
TUPLE: .~ ;
M: .~ e-m-operate drop ~~ <i> ;
TUPLE: .: ;
M: .: e-m-operate drop :: <i> ;
TUPLE: .# ;
M: .# e-m-operate drop ## <i> ;
TUPLE: .^ ;
M: .^ e-m-operate drop eflatten ;
TUPLE: .! ;
M: .! e-m-operate drop !! <i> ;
TUPLE: .\ ;
M: .\ e-m-operate drop \\ <i> ;
TUPLE: .+ ;
M: .+ e-d-operate drop ++ <i> ;
TUPLE: .* ;
M: .* e-d-operate drop ** [ <i> ] 2apply ++ ;
TUPLE: ./ ;
M: ./ e-d-operate drop // [ <i> ] 2apply ++ ;
TUPLE: .& ;
M: .& e-d-operate drop && <i> ;
TUPLE: .| ;
M: .| e-d-operate drop || <i> ;
TUPLE: .< ;
M: .< e-d-operate drop << [ <i> ] 2apply ++ ;
TUPLE: .> ;
M: .> e-d-operate drop >> <i> ;
TUPLE: .@ ;
M: .@ e-d-operate >r swap 0 i-cmp 0 = [ dup eflatten swap <i> ++ r> ++ ] [ r> 2drop 0 ] if ;
TUPLE: .? ;
M: .? e-d-operate drop (i-eq?) [ 1 ] [ 0 ] if <i> ;
TUPLE: .% ;
M: .% e-d-operate drop %% [ <i> ] 2apply ++ ;
UNION: monadic-class c-op .- .` .$ .~ .: .# .^ .! .\ emacro ;
UNION: dyadic-class .+ .* ./ .& .| .< .> .@ .? .% ;
UNION: operator-class monadic-class dyadic-class ;
M: operator-class e-operator? drop t ;
M: monadic-class e-dyadic? drop f ;
M: dyadic-class e-dyadic? drop t ;
DEFER: +e+
: (e-reducible?) ( e -- ? )
left-right 2dup [ e-reducible? ] either?
[ 2drop t ] [ ifirst e-operator? swap ilast e-list? and ] if ; inline
M: object e-reducible?
dup i-length 1 <= [ drop f ] [ (e-reducible?) ] if ;
: (e-reduce2) ( e1 e2 -- e )
2dup ifirst swap ilast swap e-m-operate
-rot 1 itail swap dup i-length 1- ihead rot ++ swap ++ ; inline
: (e-reduce) ( e -- e )
left-right swap dup e-reducible? [ (e-reduce) swap ++ ]
[ swap dup e-reducible? [ (e-reduce) ++ ] [ (e-reduce2) ] if ] if ; inline
M: object e-reduce
dup e-reducible? [ (e-reduce) ] when ;
: (+e+2) ( e1 e2 -- e )
2dup ifirst swap ilast swap <c-op>
-rot 1 itail swap dup i-length 1- ihead rot ++ swap ++ ; inline
: (+e+1) ( e1 e2 -- e )
2dup ifirst e-dyadic? swap ilast e-list? and
[ (+e+2) ] [ ++g ] if ; inline
TUPLE: e-exp expr reducible ;
M: e-exp e-reducible? e-exp-reducible ;
: <expr> ( s -- e-exp )
dup e-exp? [ dup e-reducible? <e-exp> ] unless ; inline
: +e+ ( e1 e2 -- e )
2dup [ i-length 1 >= ] both?
[ (+e+1) ] [ ++g ] if <expr> ; inline
: e-ipair ( e1 e2 -- e )
<isequence> <expr> ; inline
M: c-op e-replace dup >r c-op-v e-replace r> c-op-d-op <c-op> ;
GENERIC: e-exp/++ ( s e -- e )
GENERIC: e-exp/ipair ( s e -- e )
M: e-exp ++ swap e-exp/++ ;
M: e-exp ipair swap e-exp/ipair ;
M: object e-exp/++ swap +e+ ;
M: object e-exp/ipair swap e-ipair ;
M: e-exp e-exp/++ swap +e+ ;
M: e-exp e-exp/ipair swap e-ipair ;
M: e-exp object/++ swap +e+ ;
M: e-exp object/ipair swap e-ipair ;
M: operator-class ++ +e+ ;
M: e-exp i-length e-exp-expr i-length ;
M: e-exp i-at swap e-exp-expr swap i-at ;
M: e-exp ileft e-exp-expr ileft ;
M: e-exp iright e-exp-expr iright ;
M: e-exp ihead swap e-exp-expr swap ihead ;
M: e-exp itail swap e-exp-expr swap itail ;
M: e-exp $$ e-exp-expr $$ ;
M: e-exp e-replace
dup i-length 1 =
[ e-exp-expr e-replace ]
[ 3dup iright e-replace >r ileft e-replace r> ++ ] if ;
TUPLE: ereplacement from to ;
: (ereplace) ( symbols from-symbol -- to-symbol )
esymbol-seq dup ++ <esymbol> dup pick i-intersect i-length zero?
[ nip ] [ (ereplace) ] if ; inline
: (replacements3) ( symbols from-symbol -- newsymbols replacement )
2dup (ereplace) rot over i-union -rot <ereplacement> ; inline
: (replacements2) ( symbols intersect -- replacements )
dup i-length zero?
[ 2drop 0 ]
[ dup >r ifirst (replacements3) swap r> 1 itail (replacements2) ++ ] if ;
: replace-s ( s replacements -- s )
dup i-length dup zero?
[ 2drop ]
[ 1 = [ 0 i-at dup ereplacement-from swap ereplacement-to rot e-replace ] [ left-right >r replace-s r> replace-s ] if ] if ;
: (replacements) ( value macro -- replacements )
dup emacro-expr free-symbols swap emacro-symbols -1 ++
i-intersect tuck swap free-symbols i-intersect (replacements2) ; inline
: (replace-macro) ( replacements macro -- macro )
2dup dup >r emacro-symbols swap replace-s swap emacro-expr rot replace-s r> emacro-eager? <e-macro> ;
: (eval-macro) ( value macro -- macro )
dup >r emacro-symbols dup -1 ++ swap ilast rot <i> r> dup >r emacro-expr e-replace r> emacro-eager? <e-macro> ;
: eval-macro ( value macro -- s )
2dup (replacements) swap (replace-macro) (eval-macro) ;
: emacro-e-m-operate ( value macro -- s )
eval-macro dup emacro-symbols i-length zero? [ emacro-expr ] when ;
M: emacro e-m-operate emacro-e-m-operate ;

View File

@ -1,139 +0,0 @@
! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
IN: enchilada.parser
USING: strings sequences kernel promises lazy-lists parser-combinators parser-combinators.simple isequences.interface isequences.base enchilada.engine ;
USE: lazy-lists
USE: parser-combinators
DEFER: e-expression
LAZY: e/- ( -- parser )
"-" token [ drop <.-> ] <@ ;
LAZY: e/# ( -- parser )
"#" token [ drop <.#> ] <@ ;
LAZY: e/^ ( -- parser )
"^" token [ drop <.^> ] <@ ;
LAZY: e/` ( -- parser )
"`" token [ drop <.`> ] <@ ;
LAZY: e/: ( -- parser )
":" token [ drop <.:> ] <@ ;
LAZY: e/~ ( -- parser )
"~" token [ drop <.~> ] <@ ;
LAZY: e/$ ( -- parser )
"$" token [ drop <.$> ] <@ ;
LAZY: e/! ( -- parser )
"!" token [ drop <.!> ] <@ ;
LAZY: e/\ ( -- parser )
"\\" token [ drop <.\> ] <@ ;
LAZY: e/+ ( -- parser )
"+" token [ drop <.+> ] <@ ;
LAZY: e/| ( -- parser )
"|" token [ drop <.|> ] <@ ;
LAZY: e/& ( -- parser )
"&" token [ drop <.&> ] <@ ;
LAZY: e/* ( -- parser )
"*" token [ drop <.*> ] <@ ;
LAZY: e// ( -- parser )
"/" token [ drop <./> ] <@ ;
LAZY: e/< ( -- parser )
"<" token [ drop <.<> ] <@ ;
LAZY: e/> ( -- parser )
">" token [ drop <.>> ] <@ ;
LAZY: e/@ ( -- parser )
"@" token [ drop <.@> ] <@ ;
LAZY: e/? ( -- parser )
"?" token [ drop <.?> ] <@ ;
LAZY: e/% ( -- parser )
"%" token [ drop <.%> ] <@ ;
LAZY: e-monadic ( -- parser )
e/- e/# <|> e/^ <|> e/` <|> e/: <|> e/~ <|> e/$ <|> e/! <|> e/\ <|> ;
LAZY: e-dyadic ( -- parser )
e/+ e/* <|> e/& <|> e/| <|> e// <|> e/< <|> e/> <|> e/@ <|> e/? <|> e/% <|> ;
LAZY: e-number ( -- parser )
'integer' ;
LAZY: e-letter ( -- parser )
[ letter? ] satisfy [ 1 swap <string> ] <@ ;
LAZY: e-digit ( -- parser )
[ digit? ] satisfy [ 1 swap <string> ] <@ ;
LAZY: e-alphanumeric-char ( -- parser )
e-letter e-digit <|> ;
LAZY: e-alphanumeric-symbol ( -- parser )
e-letter e-alphanumeric-char <!*> <&> [ dup first swap second "" [ append ] reduce append ] <@ ;
LAZY: e-symbol ( -- parser )
e-alphanumeric-symbol 'string' <|> sp [ <esymbol> ] <@ ;
LAZY: e-symbol-list ( -- parser )
e-symbol <!+> [ { } [ ++ ] reduce ] <@ ;
LAZY: e-macro-expression ( -- parser )
"=" token "=" token <?> <&> sp e-expression <&> [ dup 1 tail swap first second [ t ] [ f ] if add ] <@ ;
LAZY: e-macro ( -- parser )
"{" token sp e-symbol-list &> e-macro-expression <?> <&> "}" token sp <&
[ dup first swap second dup [ first ] [ drop { 0 f } ] if dup first swap second <e-macro> ] <@ ;
LAZY: e-right-expression ( -- parser )
"=" token e-expression &> ;
: create-e-item ( pair -- e-item )
dup first swap second dup [ first ] [ drop 0 ] if <i-dual-sided> <i> ;
LAZY: e-item ( -- parser )
e-expression e-right-expression <?> <&> [ create-e-item ] <@ ;
LAZY: e-rest ( -- parser )
";" token sp e-item &> <!*> [ { } [ ++ ] reduce ] <@ ;
LAZY: e-contents ( -- parser )
e-item e-rest <&> [ dup first swap second ++ ] <@ ;
LAZY: e-non-empty ( -- parser )
"[" token e-contents &> "]" token sp <& ;
LAZY: e-empty ( -- parser )
"[" token "]" token <&> [ drop 0 ] <@ ;
LAZY: e-sequence ( -- parser )
e-empty e-non-empty <|> e-number <|> ;
LAZY: e-operand ( -- parser )
"_" token <?> e-sequence <&> [ dup second swap first [ -- ] when <i> ] <@ ;
LAZY: e-operator ( -- parser )
e-monadic e-dyadic <|> e-macro <|> ;
LAZY: e-element ( -- parser )
e-operator e-operand <|> e-symbol <|> sp ;
LAZY: e-expression ( -- parser )
e-element <!*> [ { } [ ++ ] reduce ] <@ ;
: e-parse ( string -- result ) e-expression parse car parse-result-parsed ;

View File

@ -1,71 +0,0 @@
! Copyright (C) 2007 Robbert van Dalen.
! See http://factorcode.org/license.txt for BSD license.
IN: enchilada.printer
USING: prettyprint strings generic kernel math math.parser sequences isequences.interface isequences.base enchilada.engine ;
: s-append ( s1 s2 s3 -- s )
swap append append ;
DEFER: e-print
DEFER: l-print
GENERIC: (e-print) ( op -- string )
M: .- (e-print) drop "-" ;
M: .# (e-print) drop "#" ;
M: .$ (e-print) drop "$" ;
M: .^ (e-print) drop "^" ;
M: .` (e-print) drop "`" ;
M: .~ (e-print) drop "~" ;
M: .: (e-print) drop ":" ;
M: .! (e-print) drop "!" ;
M: .\ (e-print) drop "\\" ;
M: .+ (e-print) drop "+" ;
M: .* (e-print) drop "*" ;
M: ./ (e-print) drop "/" ;
M: .< (e-print) drop "<" ;
M: .> (e-print) drop ">" ;
M: .| (e-print) drop "|" ;
M: .& (e-print) drop "&" ;
M: .@ (e-print) drop "@" ;
M: .? (e-print) drop "?" ;
M: .% (e-print) drop "%" ;
: (eprint-macro-expr) ( emacro -- string )
dup emacro-expr dup i-length 0 =
[ 2drop "" ]
[ e-print swap emacro-eager? [ "==" ] [ "=" ] if swap append ] if ;
: (l-print1) ( e-list -- string )
0 i-at dup left-side swap right-side dup 0 =
[ drop dup i-length 0 = [ drop " " ] [ e-print ] if ] [ e-print swap e-print swap "=" s-append ] if ;
: (l-print0) ( e-list -- string )
left-right [ l-print ] 2apply ";" s-append ;
: l-print ( e-list -- string )
dup i-length dup 0 =
[ 2drop "0" ] [ 1 = [ (l-print1) ] [ (l-print0) ] if ] if ;
: prefix-neg ( s -- s prefix )
dup i-length 0 < [ -- "_" ] [ "" ] if ;
: (e-print3) ( symbol -- string )
esymbol-seq to-sequence >string ;
: (e-print2) ( e-list -- string )
dup integer? [ prefix-neg swap number>string append ] [ prefix-neg "[" append swap l-print "]" append append ] if ;
: (e-print1) ( e-expression -- string )
0 i-at dup e-operator? [ (e-print) ] [ dup e-symbol? [ (e-print3) ] [ (e-print2) ] if ] if ;
: e-print ( e-expression -- string )
dup i-length dup 0 =
[ 2drop "" ]
[ 1 = [ (e-print1) ] [ left-right [ e-print ] 2apply " " s-append ] if ] if ;
M: c-op (e-print) dup c-op-d-op swap c-op-v (e-print2) swap (e-print) " " s-append ;
M: emacro (e-print) "{" swap dup emacro-symbols e-print swap (eprint-macro-expr) "}" append append append ;

View File

@ -1 +0,0 @@
Enchilada, a concatenative programming language

View File

@ -1 +0,0 @@
languages

View File

@ -1,12 +0,0 @@
! Copyright (C) 2006 Matthew Willis. All Rights Reserved.
! See http://factorcode.org/license.txt for BSD license.
!
REQUIRES: libs/calendar libs/crypto libs/basic-authentication
libs/furnace libs/serialize ;
PROVIDE: apps/furnace-onigiri
{ +files+ {
"onigiri.factor"
"onigiri.facts"
} } ;

View File

@ -1,166 +0,0 @@
! Copyright (C) 2006 Matthew Willis. All Rights Reserved.
! See http://factorcode.org/license.txt for BSD license.
!
USING: httpd threads kernel namespaces furnace sequences
html strings math assocs crypto io file-responder calendar
prettyprint parser errors sha2 basic-authentication arrays
serialize ;
IN: furnace:onigiri
TUPLE: entry title stub body created ;
TUPLE: user name password ;
TUPLE: meta key value ;
: title>stub ( title -- stub )
! creates a url friendly name based on the title
" " split [ [ alpha? ] subset ] map "" swap remove "-" join ;
C: entry ( title body stub -- entry )
tuck set-entry-stub
tuck set-entry-body
dup entry-stub [ over title>stub over set-entry-stub ] unless
now over set-entry-created tuck set-entry-title ;
C: user ( name password -- user )
swap string>sha-256-string over set-user-password
tuck set-user-name ;
: base-url ( -- url )
"http://" "Host" "header" get at append ;
: action>url ( action -- url )
"responder-url" get swap append ;
: stub>url ( stub -- url )
"entry-show?stub=" swap append action>url ;
: stub>entry ( stub -- entry )
entry get-global [ entry-stub = ] subset-with
dup empty? [ drop f ] [ first ] if ;
: atom ( -- )
"text/xml" serving-content
[ f "atom" render-template ] with-html-stream ;
: sitemap ( -- )
"text/xml" serving-content
[ f "sitemap" render-template ] with-html-stream ;
: css-path ( -- path )
! "text/css" serving-content
"css" meta crud-lookup* meta-value
[ "onigirihouse.css" ] unless* ;
DEFER: key>meta*
: entry-list ( -- )
"title" key>meta* meta-value
serving-html [
<furnace-model> "header" render-template
entry get-global
[ [ entry-created ] 2apply swap compare-timestamps ] sort
[ "entry-show" render-template ] each
f "footer" render-template
] with-html-stream ;
DEFER: key>meta
: entry-show ( stub -- )
stub>entry
[
"title" key>meta* meta-value
" - " pick entry-title 3append
serving-html [
<furnace-model> "header" render-template
"entry-show" render-template
f "footer" render-template
] with-html-stream
] [
"title" key>meta* meta-value " - Entry not found" append
serving-html [
[
<p> "The entry you are searching for could not be found" write </p>
<p> [ entry-list ] "Back to " "title" key>meta
[ meta-value ] [ "the main page" ] if* append render-link
</p>
] html-document
] with-html-stream
] if* ;
: entry-edit ( stub wiky -- )
swap stub>entry dup [ entry-title ] [ f ] if*
"title" key>meta* meta-value " - editing " rot 3append
serving-html [
<furnace-model> "header" render-template
swap "entry-edit" "entry-edit-plain" ? render-template
f "footer" render-template
] with-html-stream ;
: entry-update ( title body stub -- )
"onigiri-realm" [
dup stub>entry [
nip tuck set-entry-body tuck set-entry-title
] [
<entry> dup entry get-global swap add entry set-global
] if* entry-stub entry-show
] with-basic-authentication ;
: entry-delete ( stub -- )
"onigiri-realm" [
stub>entry entry get-global remove entry set-global entry-list
] with-basic-authentication ;
DEFER: name>user
: onigiri-realm ( name password -- bool )
swap name>user [ user-password = ] [ drop f ] if*
user get-global empty? or ;
: register-actions ( -- )
\ entry-list { } define-action
\ entry-show { { "stub" } } define-action
\ entry-edit { { "stub" } { "wiky" f v-default } } define-action
\ entry-update { { "title" } { "body" } { "stub" } } define-action
\ entry-delete { { "stub" } } define-action
\ atom { } define-action
\ sitemap { } define-action
"onigiri" "entry-list" "apps/furnace-onigiri/templates/" web-app
"onigiri-resources" [
[
"apps/furnace-onigiri/resources/" resource-path "doc-root" set
file-responder
] with-scope
] add-simple-responder
[ onigiri-realm ] "onigiri-realm" add-realm
! and finally, use scaffolding for metadata and user data
[
"furnace:onigiri" set-in
meta "key" "onigiri-realm" scaffold
user "name" "onigiri-realm" scaffold
] with-scope ;
: onigiri ( -- )
register-actions
"default-responder" key>meta* meta-value
[ "onigiri" set-default-responder ] when
"port" key>meta* meta-value string>number [ 8888 ] unless*
[ httpd ] in-thread drop ;
: onigiri-dump ( path -- )
[
[
entry get-global serialize
meta get-global serialize
user get-global serialize
] with-serialized
] with-file-writer ;
: onigiri-boot ( path -- )
<file-reader> [
[
deserialize entry set-global
deserialize meta set-global
deserialize user set-global
] with-serialized
] with-stream ;

View File

@ -1,4 +0,0 @@
Recent posts sidebar
Links sidebar
Widgets (Onigirihouse feels ...)
Tagging*

View File

@ -1,7 +0,0 @@
body { font: 14px "Trebuchet MS", Arial, Helvetica, sans-serif; }
h1, h2, h3, h4, h5, h6 { font-family: lucida grande ; }
#header { text-align: center ; }
#container { max-width: 720px ; margin: 0 auto; padding: 20px; }
.entry { margin-bottom: 75px ; }
a { color: #5C832F; text-decoration: none; }
a:hover { text-decoration: underline; }

View File

@ -1,15 +0,0 @@
/* == wiky == */
*.wiki blockquote { background:#ddd; border:solid 1px #999; margin-left:1em; padding:0.5em;}
*.wiki table {
border-collapse: collapse;
empty-cells: show;
}
*.wiki table td {
border: solid 1px black;
padding: 0.25em 0.5em 0.25em 0.5em;
text-align: center;
}
/*pre { font-size:100%; background: #eed; border:1px dotted #999; padding:0 0.5em; overflow:auto; }*/
pre { font-family:courier new, monospace; overflow:auto; }

View File

@ -1,373 +0,0 @@
/* This work is licensed under Creative Commons GNU LGPL License.
License: http://creativecommons.org/licenses/LGPL/2.1/
Author: Stefan Goessner/2005-06
Web: http://goessner.net/
*/
var Wiky = {
version: 0.95,
blocks: null,
rules: {
all: [
"Wiky.rules.pre",
"Wiky.rules.nonwikiblocks",
"Wiky.rules.wikiblocks",
"Wiky.rules.post",
],
pre: [
{ rex:/(\r?\n)/g, tmplt:"\xB6" }, // replace line breaks with '¶' ..
],
post: [
{ rex:/(^\xB6)|(\xB6$)/g, tmplt:"" }, // .. remove linebreaks at BOS and EOS ..
{ rex:/@([0-9]+)@/g, tmplt:function($0,$1){return Wiky.restore($1);} }, // resolve blocks ..
{ rex:/\xB6/g, tmplt:"\n" } // replace '¶' with line breaks ..
],
nonwikiblocks: [
{ rex:/\\([%])/g, tmplt:function($0,$1){return Wiky.store($1);} },
{ rex:/\[(?:\{([^}]*)\})?(?:\(([^)]*)\))?%(.*?)%\]/g, tmplt:function($0,$1,$2,$3){return ":p]"+Wiky.store("<pre"+($2?(" lang=\"x-"+Wiky.attr($2)+"\""):"")+Wiky.style($1)+">" + Wiky.apply($3, $2?Wiky.rules.lang[Wiky.attr($2)]:Wiky.rules.code) + "</pre>")+"[p:";} } //programm code block
],
wikiblocks: [
"Wiky.rules.nonwikiinlines",
"Wiky.rules.escapes",
{ rex:/(?:^|\xB6)(={1,6})(.*?)[=]*(?=\xB6|$)/g, tmplt:function($0,$1,$2){ var h=$1.length; return ":p]\xB6<h"+h+">"+$2+"</h"+h+">\xB6[p:";} }, // <h1> .. <h6>
{ rex:/(?:^|\xB6)[-]{4}(?:\xB6|$)/g, tmplt:"\xB6<hr/>\xB6" }, // horizontal ruler ..
{ rex:/\\\\([ \xB6])/g, tmplt:"<br/>$1" }, // forced line break ..
{ rex:/(^|\xB6)([*01aAiIg]*[\.*])[ ]/g, tmplt:function($0,$1,$2){var state=$2.replace(/([*])/g,"u").replace(/([\.])/,"");return ":"+state+"]"+$1+"["+state+":";}},
{ rex:/(?:^|\xB6);[ ](.*?):[ ]/g, tmplt:"\xB6:l][l:$1:d][d:"}, // ; term : definition
{ rex:/\[(?:\{([^}]*)\})?(?:\(([^)]*)\))?\"/g, tmplt:function($0,$1,$2){return ":p]<blockquote"+Wiky.attr($2,"cite",0)+Wiky.attr($2,"title",1)+Wiky.style($1)+">[p:"; } }, // block quotation start
{ rex:/\"\]/g, tmplt:":p]</blockquote>[p:" }, // block quotation end
{ rex:/\[(\{[^}]*\})?\|/g, tmplt:":t]$1[r:" }, // .. start table ..
{ rex:/\|\]/g, tmplt:":r][t:" }, // .. end table ..
{ rex:/\|\xB6[ ]?\|/g, tmplt:":r]\xB6[r:" }, // .. end/start table row ..
{ rex:/\|/g, tmplt:":c][c:" }, // .. end/start table cell ..
{ rex:/^(.*)$/g, tmplt:"[p:$1:p]" }, // start paragraph '[p:' at BOS .. end paragraph ':p]' at EOS ..
{ rex:/(([\xB6])([ \t\f\v\xB6]*?)){2,}/g, tmplt:":p]$1[p:" }, // .. separate paragraphs at blank lines ..
{ rex:/\[([01AIacdgilprtu]+)[:](.*?)[:]([01AIacdgilprtu]+)\]/g, tmplt:function($0,$1,$2,$3){return Wiky.sectionRule($1==undefined?"":$1,"",Wiky.apply($2,Wiky.rules.wikiinlines),!$3?"":$3);} },
{ rex:/\[[01AIacdgilprtu]+[:]|[:][01AIacdgilprtu]+\]/g, tmplt:"" }, // .. remove singular section delimiters (they frequently exist with incomplete documents while typing) ..
{ rex:/<td>(?:([0-9]*)[>])?([ ]?)(.*?)([ ]?)<\/td>/g, tmplt:function($0,$1,$2,$3,$4){return "<td"+($1?" colspan=\""+$1+"\"":"")+($2==" "?(" style=\"text-align:"+($2==$4?"center":"right")+";\""):($4==" "?" style=\"text-align:left;\"":""))+">"+$2+$3+$4+"</td>";} },
{ rex:/<(p|table)>(?:\xB6)?(?:\{(.*?)\})/g, tmplt:function($0,$1,$2){return "<"+$1+Wiky.style($2)+">";} },
{ rex:/<p>([ \t\f\v\xB6]*?)<\/p>/g, tmplt:"$1" }, // .. remove empty paragraphs ..
"Wiky.rules.shortcuts"
],
nonwikiinlines: [
{ rex:/%(?:\{([^}]*)\})?(?:\(([^)]*)\))?(.*?)%/g, tmplt:function($0,$1,$2,$3){return Wiky.store("<code"+($2?(" lang=\"x-"+Wiky.attr($2)+"\""):"")+Wiky.style($1)+">" + Wiky.apply($3, $2?Wiky.rules.lang[Wiky.attr($2)]:Wiky.rules.code) + "</code>");} }, // inline code
{ rex:/%(.*?)%/g, tmplt:function($0,$1){return Wiky.store("<code>" + Wiky.apply($2, Wiky.rules.code) + "</code>");} }
],
wikiinlines: [
{ rex:/\*([^*]+)\*/g, tmplt:"<strong>$1</strong>" }, // .. strong ..
{ rex:/_([^_]+)_/g, tmplt:"<em>$1</em>" },
{ rex:/\^([^^]+)\^/g, tmplt:"<sup>$1</sup>" },
{ rex:/~([^~]+)~/g, tmplt:"<sub>$1</sub>" },
{ rex:/\(-(.+?)-\)/g, tmplt:"<del>$1</del>" },
{ rex:/\?([^ \t\f\v\xB6]+)\((.+)\)\?/g, tmplt:"<abbr title=\"$2\">$1</abbr>" }, // .. abbreviation ..
{ rex:/\[(?:\{([^}]*)\})?[Ii]ma?ge?\:([^ ,\]]*)(?:[, ]([^\]]*))?\]/g, tmplt:function($0,$1,$2,$3){return Wiky.store("<img"+Wiky.style($1)+" src=\""+$2+"\" alt=\""+($3?$3:$2)+"\" title=\""+($3?$3:$2)+"\"/>");} }, // wikimedia image style ..
{ rex:/\[([^ ,]+)[, ]([^\]]*)\]/g, tmplt:function($0,$1,$2){return Wiky.store("<a href=\""+$1+"\">"+$2+"</a>");}}, // wiki block style uri's ..
{ rex:/(((http(s?))\:\/\/)?[A-Za-z0-9\._\/~\-:]+\.(?:png|jpg|jpeg|gif|bmp))/g, tmplt:function($0,$1,$2){return Wiky.store("<img src=\""+$1+"\" alt=\""+$1+"\"/>");} }, // simple images ..
{ rex:/((mailto\:|javascript\:|(news|file|(ht|f)tp(s?))\:\/\/)[A-Za-z0-9\.:_\/~%\-+&#?!=()@\x80-\xB5\xB7\xFF]+)/g, tmplt:"<a href=\"$1\">$1</a>" } // simple uri's ..
],
escapes: [
{ rex:/\\([|*_~\^])/g, tmplt:function($0,$1){return Wiky.store($1);} },
{ rex:/\\&/g, tmplt:"&amp;" },
{ rex:/\\>/g, tmplt:"&gt;" },
{ rex:/\\</g, tmplt:"&lt;" }
],
shortcuts: [
{ rex:/---/g, tmplt:"&#8212;" }, // &mdash;
{ rex:/--/g, tmplt:"&#8211;" }, // &ndash;
{ rex:/[\.]{3}/g, tmplt:"&#8230;"}, // &hellip;
{ rex:/<->/g, tmplt:"&#8596;"}, // $harr;
{ rex:/<-/g, tmplt:"&#8592;"}, // &larr;
{ rex:/->/g, tmplt:"&#8594;"}, //&rarr;
],
code: [
{ rex:/&/g, tmplt:"&amp;"},
{ rex:/</g, tmplt:"&lt;"},
{ rex:/>/g, tmplt:"&gt;"}
],
lang: {}
},
inverse: {
all: [
"Wiky.inverse.pre",
"Wiky.inverse.nonwikiblocks",
"Wiky.inverse.wikiblocks",
"Wiky.inverse.post"
],
pre: [
{ rex:/(\r?\n)/g, tmplt:"\xB6" } // replace line breaks with '¶' ..
],
post: [
{ rex:/@([0-9]+)@/g, tmplt:function($0,$1){return Wiky.restore($1);} }, // resolve blocks ..
{ rex:/\xB6/g, tmplt:"\n" } // replace '¶' with line breaks ..
],
nonwikiblocks: [
{ rex:/<pre([^>]*)>(.*?)<\/pre>/mgi, tmplt:function($0,$1,$2){return Wiky.store("["+Wiky.invStyle($1)+Wiky.invAttr($1,["lang"]).replace(/x\-/,"")+"%"+Wiky.apply($2, Wiky.hasAttr($1,"lang")?Wiky.inverse.lang[Wiky.attrVal($1,"lang").substr(2)]:Wiky.inverse.code)+"%]");} } //code block
],
wikiblocks: [
"Wiky.inverse.nonwikiinlines",
"Wiky.inverse.escapes",
"Wiky.inverse.wikiinlines",
{ rex:/<h1>(.*?)<\/h1>/mgi, tmplt:"=$1=" },
{ rex:/<h2>(.*?)<\/h2>/mgi, tmplt:"==$1==" },
{ rex:/<h3>(.*?)<\/h3>/mgi, tmplt:"===$1===" },
{ rex:/<h4>(.*?)<\/h4>/mgi, tmplt:"====$1====" },
{ rex:/<h5>(.*?)<\/h5>/mgi, tmplt:"=====$1=====" },
{ rex:/<h6>(.*?)<\/h6>/mgi, tmplt:"======$1======" },
{ rex:/<(p|table)[^>]+(style=\"[^\"]*\")[^>]*>/mgi, tmplt:function($0,$1,$2){return "<"+$1+">"+Wiky.invStyle($2);} },
{ rex:/\xB6{2}<li/mgi, tmplt:"\xB6<li" }, // ie6 only ..
{ rex:/<li class=\"?([^ >\"]*)\"?[^>]*?>([^<]*)/mgi, tmplt:function($0,$1,$2){return $1.replace(/u/g,"*").replace(/([01aAiIg])$/,"$1.")+" "+$2;}}, // list items ..
{ rex:/(^|\xB6)<(u|o)l[^>]*?>\xB6/mgi, tmplt:"$1" }, // only outer level list start at BOL ...
{ rex:/(<\/(?:dl|ol|ul|p)>[ \xB6]*<(?:p)>)/gi, tmplt:"\xB6\xB6" },
{ rex:/<dt>(.*?)<\/dt>[ \f\n\r\t\v]*<dd>/mgi, tmplt:"; $1: " },
{ rex:/<blockquote([^>]*)>/mgi, tmplt:function($0,$1){return Wiky.store("["+Wiky.invStyle($1)+Wiky.invAttr($1,["cite","title"])+"\"");} },
{ rex:/<\/blockquote>/mgi, tmplt:"\"]" },
{ rex:/<td class=\"?lft\"?>\xB6*[ ]?|<\/tr>/mgi, tmplt:"|" }, // ie6 only ..
{ rex:/\xB6<tr(?:[^>]*?)>/mgi, tmplt:"\xB6" },
{ rex:/<td colspan=\"([0-9]+)\"(?:[^>]*?)>/mgi, tmplt:"|$1>" },
{ rex:/<td(?:[^>]*?)>/mgi, tmplt:"|" },
{ rex:/<table>/mgi, tmplt:"[" },
{ rex:/<\/table>/mgi, tmplt:"]" },
{ rex:/<tr(?:[^>]*?)>\xB6*|<\/td>\xB6*|<tbody>\xB6*|<\/tbody>/mgi, tmplt:"" },
{ rex:/<hr\/?>/mgi, tmplt:"----" },
{ rex:/<br\/?>/mgi, tmplt:"\\\\" },
{ rex:/(<p>|<(d|o|u)l[^>]*>|<\/(dl|ol|ul|p)>|<\/(li|dd)>)/mgi, tmplt:"" },
"Wiky.inverse.shortcuts"
],
nonwikiinlines: [
{ rex:/<code>(.*?)<\/code>/g, tmplt:function($0,$1){return Wiky.store("%"+Wiky.apply($1, Wiky.inverse["code"])+"%");} }
],
wikiinlines: [
{ rex:/<strong[^>]*?>(.*?)<\/strong>/mgi, tmplt:"*$1*" },
{ rex:/<b[^>]*?>(.*?)<\/b>/mgi, tmplt:"*$1*" },
{ rex:/<em[^>]*?>(.*?)<\/em>/mgi, tmplt:"_$1_" },
{ rex:/<i[^>]*?>(.*?)<\/i>/mgi, tmplt:"_$1_" },
{ rex:/<sup[^>]*?>(.*?)<\/sup>/mgi, tmplt:"^$1^" },
{ rex:/<sub[^>]*?>(.*?)<\/sub>/mgi, tmplt:"~$1~" },
{ rex:/<del[^>]*?>(.*?)<\/del>/mgi, tmplt:"(-$1-)" },
{ rex:/<abbr title=\"([^\"]*)\">(.*?)<\/abbr>/mgi, tmplt:"?$2($1)?" },
{ rex:/<a href=\"([^\"]*)\"[^>]*?>(.*?)<\/a>/mgi, tmplt:function($0,$1,$2){return $1==$2?$1:"["+$1+","+$2+"]";}},
{ rex:/<img([^>]*)\/>/mgi, tmplt:function($0,$1){var a=Wiky.attrVal($1,"alt"),h=Wiky.attrVal($1,"src"),t=Wiky.attrVal($1,"title"),s=Wiky.attrVal($1,"style");return s||(t&&h!=t)?("["+Wiky.invStyle($1)+"img:"+h+(t&&(","+t))+"]"):h;}},
],
escapes: [
{ rex:/([|*_~%\^])/g, tmplt:"\\$1" },
{ rex:/&amp;/g, tmplt:"\\&" },
{ rex:/&gt;/g, tmplt:"\\>" },
{ rex:/&lt;/g, tmplt:"\\<" }
],
shortcuts: [
{ rex:/&#8211;|\u2013/g, tmplt:"--"},
{ rex:/&#8212;|\u2014/g, tmplt:"---"},
{ rex:/&#8230;|\u2026/g, tmplt:"..."},
{ rex:/&#8596;|\u2194/g, tmplt:"<->"},
{ rex:/&#8592;|\u2190/g, tmplt:"<-"},
{ rex:/&#8594;|\u2192/g, tmplt:"->"}
],
code: [
{ rex:/&amp;/g, tmplt:"&"},
{ rex:/&lt;/g, tmplt:"<"},
{ rex:/&gt;/g, tmplt:">"}
],
lang: {}
},
toHtml: function(str) {
Wiky.blocks = [];
return Wiky.apply(str, Wiky.rules.all);
},
toWiki: function(str) {
Wiky.blocks = [];
return Wiky.apply(str, Wiky.inverse.all);
},
apply: function(str, rules) {
if (str && rules)
for (var i in rules) {
if (typeof(rules[i]) == "string")
str = Wiky.apply(str, eval(rules[i]));
else
str = str.replace(rules[i].rex, rules[i].tmplt);
}
return str;
},
store: function(str, unresolved) {
return unresolved ? "@" + (Wiky.blocks.push(str)-1) + "@"
: "@" + (Wiky.blocks.push(str.replace(/@([0-9]+)@/g, function($0,$1){return Wiky.restore($1);}))-1) + "@";
},
restore: function(idx) {
return Wiky.blocks[idx];
},
attr: function(str, name, idx) {
var a = str && str.split(",")[idx||0];
return a ? (name ? (" "+name+"=\""+a+"\"") : a) : "";
},
hasAttr: function(str, name) {
return new RegExp(name+"=").test(str);
},
attrVal: function(str, name) {
return str.replace(new RegExp("^.*?"+name+"=\"(.*?)\".*?$"), "$1");
},
invAttr: function(str, names) {
var a=[], x;
for (var i in names)
if (str.indexOf(names[i]+"=")>=0)
a.push(str.replace(new RegExp("^.*?"+names[i]+"=\"(.*?)\".*?$"), "$1"));
return a.length ? ("("+a.join(",")+")") : "";
},
style: function(str) {
var s = str && str.split(/,|;/), p, style = "";
for (var i in s) {
p = s[i].split(":");
if (p[0] == ">") style += "margin-left:4em;";
else if (p[0] == "<") style += "margin-right:4em;";
else if (p[0] == ">>") style += "float:right;";
else if (p[0] == "<<") style += "float:left;";
else if (p[0] == "=") style += "display:block;margin:0 auto;";
else if (p[0] == "_") style += "text-decoration:underline;";
else if (p[0] == "b") style += "border:solid 1px;";
else if (p[0] == "c") style += "color:"+p[1]+";";
else if (p[0] == "C") style += "background:"+p[1]+";";
else if (p[0] == "w") style += "width:"+p[1]+";";
else style += p[0]+":"+p[1]+";";
}
return style ? " style=\""+style+"\"" : "";
},
invStyle: function(str) {
var s = /style=/.test(str) ? str.replace(/^.*?style=\"(.*?)\".*?$/, "$1") : "",
p = s && s.split(";"), pi, prop = [];
for (var i in p) {
pi = p[i].split(":");
if (pi[0] == "margin-left" && pi[1]=="4em") prop.push(">");
else if (pi[0] == "margin-right" && pi[1]=="4em") prop.push("<");
else if (pi[0] == "float" && pi[1]=="right") prop.push(">>");
else if (pi[0] == "float" && pi[1]=="left") prop.push("<<");
else if (pi[0] == "margin" && pi[1]=="0 auto") prop.push("=");
else if (pi[0] == "display" && pi[1]=="block") ;
else if (pi[0] == "text-decoration" && pi[1]=="underline") prop.push("_");
else if (pi[0] == "border" && pi[1]=="solid 1px") prop.push("b");
else if (pi[0] == "color") prop.push("c:"+pi[1]);
else if (pi[0] == "background") prop.push("C:"+pi[1]);
else if (pi[0] == "width") prop.push("w:"+pi[1]);
else if (pi[0]) prop.push(pi[0]+":"+pi[1]);
}
return prop.length ? ("{" + prop.join(",") + "}") : "";
},
sectionRule: function(fromLevel, style, content, toLevel) {
var trf = { p_p: "<p>$1</p>",
p_u: "<p>$1</p><ul$3>",
p_o: "<p>$1</p><ol$3>",
// p - ul
// ul - p
u_p: "<li$2>$1</li></ul>",
u_c: "<li$2>$1</li></ul></td>",
u_r: "<li$2>$1</li></ul></td></tr>",
uu_p: "<li$2>$1</li></ul></li></ul>",
uo_p: "<li$2>$1</li></ol></li></ul>",
uuu_p: "<li$2>$1</li></ul></li></ul></li></ul>",
uou_p: "<li$2>$1</li></ul></li></ol></li></ul>",
uuo_p: "<li$2>$1</li></ol></li></ul></li></ul>",
uoo_p: "<li$2>$1</li></ol></li></ol></li></ul>",
// ul - ul
u_u: "<li$2>$1</li>",
uu_u: "<li$2>$1</li></ul></li>",
uo_u: "<li$2>$1</li></ol></li>",
uuu_u: "<li$2>$1</li></ul></li></ul></li>",
uou_u: "<li$2>$1</li></ul></li></ol></li>",
uuo_u: "<li$2>$1</li></ol></li></ul></li>",
uoo_u: "<li$2>$1</li></ol></li></ol></li>",
u_uu: "<li$2>$1<ul$3>",
// ul - ol
u_o: "<li$2>$1</li></ul><ol$3>",
uu_o: "<li$2>$1</li></ul></li></ul><ol$3>",
uo_o: "<li$2>$1</li></ol></li></ul><ol$3>",
uuu_o: "<li$2>$1</li></ul></li></ul></li></ul><ol$3>",
uou_o: "<li$2>$1</li></ul></li></ol></li></ul><ol$3>",
uuo_o: "<li$2>$1</li></ol></li></ul></li></ul><ol$3>",
uoo_o: "<li$2>$1</li></ol></li></ol></li></ul><ol$3>",
u_uo: "<li$2>$1<ol$3>",
// ol - p
o_p: "<li$2>$1</li></ol>",
oo_p: "<li$2>$1</li></ol></li></ol>",
ou_p: "<li$2>$1</li></ul></li></ol>",
ooo_p: "<li$2>$1</li></ol></li></ol>",
ouo_p: "<li$2>$1</li></ol></li></ul></li></ol>",
oou_p: "<li$2>$1</li></ul></li></ol></li></ol>",
ouu_p: "<li$2>$1</li></ul></li></ul></li></ol>",
// ol - ul
o_u: "<li$2>$1</li></ol><ul$3>",
oo_u: "<li$2>$1</li></ol></li></ol><ul$3>",
ou_u: "<li$2>$1</li></ul></li></ol><ul$3>",
ooo_u: "<li$2>$1</li></ol></li></ol></li></ol><ul$3>",
ouo_u: "<li$2>$1</li></ol></li></ul></li></ol><ul$3>",
oou_u: "<li$2>$1</li></ul></li></ol></li></ol><ul$3>",
ouu_u: "<li$2>$1</li></ul></li></ul></li></ol><ul$3>",
o_ou: "<li$2>$1<ul$3>",
// -- ol - ol --
o_o: "<li$2>$1</li>",
oo_o: "<li$2>$1</li></ol></li>",
ou_o: "<li$2>$1</li></ul></li>",
ooo_o: "<li$2>$1</li></ol></li></ol></li>",
ouo_o: "<li$2>$1</li></ol></li></ul></li>",
oou_o: "<li$2>$1</li></ul></li></ol></li>",
ouu_o: "<li$2>$1</li></ul></li></ul></li>",
o_oo: "<li$2>$1<ol$3>",
// -- dl --
l_d: "<dt>$1</dt>",
d_l: "<dd>$1</dd>",
d_u: "<dd>$1</dd></dl><ul>",
d_o: "<dd>$1</dd></dl><ol>",
p_l: "<p>$1</p><dl>",
u_l: "<li$2>$1</li></ul><dl>",
o_l: "<li$2>$1</li></ol><dl>",
uu_l: "<li$2>$1</li></ul></li></ul><dl>",
uo_l: "<li$2>$1</li></ol></li></ul><dl>",
ou_l: "<li$2>$1</li></ul></li></ol><dl>",
oo_l: "<li$2>$1</li></ol></li></ol><dl>",
d_p: "<dd>$1</dd></dl>",
// -- table --
p_t: "<p>$1</p><table>",
p_r: "<p>$1</p></td></tr>",
p_c: "<p>$1</p></td>",
t_p: "</table><p>$1</p>",
r_r: "<tr><td>$1</td></tr>",
r_p: "<tr><td><p>$1</p>",
r_c: "<tr><td>$1</td>",
r_u: "<tr><td>$1<ul>",
c_p: "<td><p>$1</p>",
c_r: "<td>$1</td></tr>",
c_c: "<td>$1</td>",
// c_u: "<td>$1<ul>",
u_t: "<li$2>$1</li></ul><table>",
o_t: "<li$2>$1</li></ol><table>",
d_t: "<dd>$1</dd></dl><table>",
t_u: "</table><p>$1</p><ul>",
t_o: "</table><p>$1</p><ol>",
t_l: "</table><p>$1</p><dl>"
};
var type = { "0": "decimal-leading-zero",
"1": "decimal",
"a": "lower-alpha",
"A": "upper-alpha",
"i": "lower-roman",
"I": "upper-roman",
"g": "lower-greek" };
var from = "", to = "", maxlen = Math.max(fromLevel.length, toLevel.length), sync = true, sectiontype = type[toLevel.charAt(toLevel.length-1)], transition;
for (var i=0; i<maxlen; i++)
if (fromLevel.charAt(i+1) != toLevel.charAt(i+1) || !sync || i == maxlen-1)
{
from += fromLevel.charAt(i) == undefined ? " " : fromLevel.charAt(i);
to += toLevel.charAt(i) == undefined ? " " : toLevel.charAt(i);
sync = false;
}
transition = (from + "_" + to).replace(/([01AIagi])/g, "o");
return !trf[transition] ? ("?(" + transition + ")") // error string !
: trf[transition].replace(/\$2/, " class=\"" + fromLevel + "\"")
.replace(/\$3/, !sectiontype ? "" : (" style=\"list-style-type:" + sectiontype + ";\""))
.replace(/\$1/, content)
.replace(/<p><\/p>/, "");
}
}

View File

@ -1,9 +0,0 @@
pre.syntax { font-size:100%; background: #eed; border:1px dotted #999; padding:0 0.5em; overflow:auto; }
span.cmt { font-style: italic; color: green; }
span.str { font-style: italic; color: darkred; }
span.kwd { color: blue; }
span.obj { color: purple; }
span.mbr { color: gray; }
span.xtag { color: blue; }
span.xnam { color: purple; }
span.xval { font-style: italic; color: darkred; }

View File

@ -1,40 +0,0 @@
/* This work is licensed under Creative Commons GNU LGPL License.
License: http://creativecommons.org/licenses/LGPL/2.1/
Author: Stefan Goessner/2005-06
Web: http://goessner.net/
credits: http://www.regular-expressions.info/examplesprogrammer.html
*/
Wiky.rules.lang.js = [
"Wiky.rules.code",
{ rex:/"([^"\\\xB6]*(\\.[^"\\\xB6]*)*)"/g, tmplt:function($0,$1){return Wiky.store("<span class=\"str\">\""+$1+"\"</span>");}}, // string delimited by '"' with '\"' allowed ..
{ rex:/'([^'\\\xB6]*(\\.[^'\\\xB6]*)*)'/g, tmplt:function($0,$1){return Wiky.store("<span class=\"str\">\'"+$1+"\'</span>");}}, // string delimited by "'" with "\'" allowed ..
{ rex:/\/\/(.*?)(?:\xB6|$)/g, tmplt:function($0,$1){return Wiky.store("<span class\=\"cmt\">//"+$1+"</span>\xB6");}}, // single line comment
{ rex:/\/\*(.*?)\*\//g, tmplt:function($0,$1){return Wiky.store("<span class\=\"cmt\">\/*"+$1+"*\/</span>");}}, // multi-line comment
// { rex:/([\]\[\-+\|*!%<>=\{\}?:,\)\(]+)|(&#34;|&#47;|&#61;)+/g, tmplt:"<span class=\"op\">$1</span>"}, // operators
{ rex:/\b(break|case|catch|continue|do|else|false|for|function|if|in|new|return|switch|this|throw|true|try|var|while|with)\b/g, tmplt:"<span class=\"kwd\">$1</span>" }, // keywords
{ rex:/\b(arguments|Array|Boolean|Date|Error|Function|Global|Math|Number|Object|RegExp|String)\b/g, tmplt:"<span class=\"obj\">$1</span>" }, // objects
{ rex:/\.(abs|acos|anchor|arguments|asin|atan|atan2|big|blink|bold|callee|caller|ceil|charAt|charCodeAt|concat|constructor|cos|E|escape|eval|exp|fixed|floor|fontcolor|fontsize|fromCharCode|getDate|getDay|getFullYear|getHours|getMilliseconds|getMinutes|getMonth|getSeconds|getTime|getTimezoneOffset|getUTCDate|getUTCDay|getUTCFullYear|getUTCHours|getUTCMilliseconds|getUTCMinutes|getUTCMonth|getUTCSeconds|getVarDate|getYear|index|indexOf|Infinity|input|isFinite|isNaN|italics|join|lastIndex|lastIndexOf|lastMatch|lastParen|leftContext|length|link|LN10|LN2|log|LOG10E|LOG2E|match|max|MAX_VALUE|min|MIN_VALUE|NaN|NaN|NEGATIVE_INFINITY|parse|parseFloat|parseInt|PI|pop|POSITIVE_INFINITY|pow|prototype|push|random|replace|reverse|rightContext|round|search|setDate|setFullYear|setHours|setMilliseconds|setMinutes|setMonth|setSeconds|setTime|setUTCDate|setUTCFullYear|setUTCHours|setUTCMilliseconds|setUTCMinutes|setUTCMonth|setUTCSeconds|setYear|shift|sin|slice|slice|small|sort|splice|split|sqrt|SQRT1_2|SQRT2|strike|sub|substr|substring|sup|tan|toGMTString|toLocaleString|toLowerCase|toString|toUpperCase|toUTCString|unescape|unshift|UTC|valueOf)\b/g, tmplt:".<span class=\"mbr\">$1</span>" }, // members
];
Wiky.rules.lang.xml = [
{ rex:/<script([^>]*)>(.*?)<\/script>/g, tmplt:function($0,$1,$2){return "<script"+$1+">"+Wiky.store(Wiky.apply($2, Wiky.rules.lang.js))+"</script>";} }, // script blocks ..
{ rex:/<!\[CDATA\[(.*?)\]\]>/g, tmplt:function($0,$1){return Wiky.store("&lt;![CDATA["+$1+"]]&gt;");} }, // CDATA sections, ..
{ rex:/<!(.*?)>/g, tmplt:function($0,$1){return Wiky.store("<span class=\"cmt\">&lt;!"+$1+"&gt;</span>");} }, // inline xml comments, doctypes, ..
{ rex:/</g, tmplt:"\xAB"}, // replace '<' by '«'
{ rex:/>/g, tmplt:"\xBB"}, // replace '>' by '»'
{ rex:/([-A-Za-z0-9_:]+)[ ]*=[ ]*\"(.*?)\"/g, tmplt:"<span class=\"xnam\">$1</span>=<span class=\"xval\">&quot;$2&quot;</span>"}, // "xml attribute value strings ..
{ rex:/(\xAB[\/]?)([-A-Za-z0-9_:]+)/g, tmplt:"$1<span class=\"xtag\">$2</span>"}, // "xml tag ..
{ rex:/\xAB/g, tmplt:"&lt;"}, // replace '«' by '<'
{ rex:/\xBB/g, tmplt:"&gt;"}, // replace '»' by '>'
];
Wiky.inverse.lang.js = [
{ rex:/<span class=\"?(cmt|kwd|mbr|obj|str)\"?>|<\/span>/mgi, tmplt:"" },
{ rex:/<strong>(.*?)<\/strong>/mgi, tmplt:"[*$1*]" },
"Wiky.inverse.code"
];
Wiky.inverse.lang.xml = [
{ rex:/<span class=\"?(cmt|xtag|xnam|xval)\"?>|<\/span>/mgi, tmplt:"" },
"Wiky.inverse.lang.js"
];

View File

@ -1,88 +0,0 @@
/* math */
dfn, div.eq {
white-space: nowrap;
font-family: sans-serif;
font-style: normal;
color: navy;
}
div.eq {
margin-left: 3em;
margin-right: 1em;
}
div.eq a {float:right}
span.h { /* huge */
font-size:150%;
}
span.o, span.s, span.f {
display:-moz-inline-box;
-moz-box-orient:vertical;
display:inline-block;
vertical-align:middle;
margin:0 0.2em;
}
span.x, span.i, span.d, span.n, span.o span {
display: block;
}
span.x, span.d, span.n, span.s, span.o span {
text-align:center;
margin:0 0.2em;
}
span.n, span.d {
font-size: 90%;
}
span.i {
text-align: left;
margin:0 0.2em 0 0;
}
span.b {
font-weight: bold;
}
span.x, span.i, span.f span.f {
font-size: 80%;
}
span.n {
border-bottom:solid 1px navy;
}
span.v, span.m {
display:-moz-inline-box;
-moz-box-orient:vertical;
display:inline-block;
vertical-align:middle;
}
span.v span.e, span.m span.e {
font-size: 90%;
white-space:nowrap;
display: block;
text-align:center;
margin:0.2em;
}
/*span.m > span.e { height:2em; }*/ /* hide ie 6 */
span.lb, span.rb {
margin:0;
padding:0;
vertical-align: middle;
border-top:1px solid navy;
border-bottom:1px solid navy;
}
span.lb {
border-left:1px solid navy;
}
span.rb {
border-right:1px solid navy;
}
span.lbrk2, span.rbrk2 {
font-size:200%;
}
span.lbrk3, span.rbrk3 {
font-size:300%;
}

View File

@ -1,374 +0,0 @@
/* This work is licensed under Creative Commons GNU LGPL License.
License: http://creativecommons.org/licenses/LGPL/2.1/
Author: Stefan Goessner/2005-06
Web: http://goessner.net/
inspired by: http://xml-maiden.com/
*/
Wiky.rules.math = {
version: 0.95,
preshortcuts: [
// { rex:/[ ]/g, tmplt:"`"}, // omit due to charset support ie6
{ rex:/\+\-/g, tmplt:"&#177;"},
{ rex:/\/O|\\Oslash/g, tmplt:"&#216;"},
{ rex:/\/o|\\oslash/g, tmplt:"&#248;"},
{ rex:/<->|\\harr/g, tmplt:"&#8596;"},
{ rex:/<-|\\larr/g, tmplt:"&#8592;"},
{ rex:/->|\\rarr/g, tmplt:"&#8594;"},
{ rex:/<=>|\\hArr/g, tmplt:"&#8660;"},
{ rex:/=>|\\rArr/g, tmplt:"&#8658;"},
{ rex:/-=|\\equiv/g, tmplt:"&#8801;"},
{ rex:/<=|\\le/g, tmplt:"&#8804;"},
{ rex:/>=|\\ge/g, tmplt:"&#8805;"},
{ rex:/</g, tmplt:"&lt;"},
{ rex:/>/g, tmplt:"&gt;"}
],
postshortcuts: [
{ rex:/\*|\\middot/g, tmplt:"&#183;"},
{ rex:/\\x|\\times/g, tmplt:"&#215;"},
{ rex:/~=|\\cong/g, tmplt:"&#8773;"},
{ rex:/~~|\\asymp/g, tmplt:"&#8776;"},
{ rex:/~|\\sim/g, tmplt:"&#8764;"},
{ rex:/!=|\\neq|\\ne/g, tmplt:"&#8800;"},
{ rex:/\.\.\.|\\ldots/g, tmplt:"&#8230;"},
{ rex:/\\in|\\isin/g, tmplt:"&#8712;"},
{ rex:/([0-9])x([0-9])/g, tmplt:"$1&#215;$2"},
{ rex:/([A-Za-z]) x ([A-Za-z])/g, tmplt:"$1&#215;$2"},
// { rex:/[`]{4}/g, tmplt:"&#8195;"}, // omit due to charset support ie6
// { rex:/[`]{3}/g, tmplt:"&#8194;"},
// { rex:/[`]{2}/g, tmplt:" "},
// { rex:/[`]/g, tmplt:"&#8201;"},
{ rex:/\{/g, tmplt:"&#8206;"}, // unvisible left-to-right mark,
{ rex:/\}/g, tmplt:"&#8207;"} // unvisible right-to-left mark,
],
expr: [
{ rex:/\^\^/g, tmplt:"^&#94;"}, // ^ overindex
{ rex:/(\\sum|\\prod|\\int)_([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})\^([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<span class=\"o\"><span class=\"x\">$3</span>$1<span class=\"x\">$2</span></span>"}, // over-/underscript (\sum, \prod, \int)
{ rex:/(\\sum|\\prod|\\int)\^([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<span class=\"o\"><span class=\"x\">$2</span>$1<span>&#160;</span></span>"},
{ rex:/(\\sum|\\prod|\\int)_([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<span class=\"o\"><span>&#160;</span>$1<span class=\"x\">$2</span></span>"},
{ rex:/_([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})\^([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<span class=\"s\"><span class=\"i\">$2</span><span class=\"i\">$1</span></span>"}, // over-/underindex
{ rex:/\^([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<sup class=\"i\">$1</sup>"}, // overindex
{ rex:/_([-]?[a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<sub class=\"i\">$1</sub>"}, // underindex
{ rex:/-/g, tmplt:"&#8722;"},
{ rex:/([a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})\/([a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<span class=\"f\"><span class=\"n\">$1</span><span class=\"d\">$2</span></span>"}, // fraction
{ rex:/([a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})\/\/([a-zA-Z0-9\.&;#\\]+|\{@[0-9]+@\})/g, tmplt:"<sup>$1</sup>&#8260;<sub>$2</sub>"}, // fraction
{ rex:/\[((\[(([^,\]]+[,]){1,}[^\]]+)\][ \n]*){1,})\]/g, tmplt:function($0,$1){var m=Wiky.math.transpose($1.replace(/(^\[|\]$)/g,"").replace(/(\][ \n]*\[)/g,"|").split("|")),sz=" style=\"font-size:"+(m.len)+"00%;\"";/*alert("{("+m.mat.join(")}\n{(").split(",").join(")(")+")}");*/ return "<span class=\"lb\""+sz+">"+Wiky.math.fence()+"</span><span class=\"m\"><span class=\"e\">"+m.mat.join("</span></span>\n<span class=\"m\"><span class=\"e\">").split(",").join("</span><span class=\"e\">")+"</span></span><span class=\"rb\""+sz+">"+Wiky.math.fence()+"</span>";}}, // matrix
{ rex:/\[((?:[^,\]]){1,}[^\]]+)\]/g, tmplt:function($0,$1){var v=$1.split(","),sz=" style=\"font-size:"+v.length+"00%;\""; return "<span class=\"lb\""+sz+">"+Wiky.math.fence()+"</span><span class=\"v\"><span class=\"e\">"+v.join("</span><span class=\"e\">")+"</span></span><span class=\"rb\""+sz+">"+Wiky.math.fence()+"</span>";}}, // vector
{ rex:/!([a-zA-Z0-9\.&;]+)/g, tmplt:"<span class=\"b\">$1</span>" }, // bold vector symbol ..
{ rex:/\\prod/g, tmplt:"<span class=\"h\">&#8719;</span>"},
{ rex:/\\sum/g, tmplt:"<span class=\"h\">&#8721;</span>"},
{ rex:/\\int/g, tmplt:"<span class=\"h\">&#8747;</span>"},
"Wiky.rules.math.postshortcuts"
],
symbols: [
{ rex:/\\Alpha/g, tmplt:"&#913;"},
{ rex:/\\Beta/g, tmplt:"&#914;"},
{ rex:/\\Gamma/g, tmplt:"&#915;"},
{ rex:/\\Delta/g, tmplt:"&#916;"},
{ rex:/\\Epsilon/g, tmplt:"&#917;"},
{ rex:/\\Zeta/g, tmplt:"&#918;"},
{ rex:/\\Eta/g, tmplt:"&#919;"},
{ rex:/\\Theta/g, tmplt:"&#920;"},
{ rex:/\\Iota/g, tmplt:"&#921;"},
{ rex:/\\Kappa/g, tmplt:"&#922;"},
{ rex:/\\Lambda/g, tmplt:"&#923;"},
{ rex:/\\Mu/g, tmplt:"&#924;"},
{ rex:/\\Nu/g, tmplt:"&#925;"},
{ rex:/\\Xi/g, tmplt:"&#926;"},
{ rex:/\\Omicron/g, tmplt:"&#927;"},
{ rex:/\\Pi/g, tmplt:"&#928;"},
{ rex:/\\Rho/g, tmplt:"&#929;"},
{ rex:/\\Sigma/g, tmplt:"&#931;"},
{ rex:/\\Tau/g, tmplt:"&#932;"},
{ rex:/\\Upsilon/g, tmplt:"&#933;"},
{ rex:/\\Phi/g, tmplt:"&#934;"},
{ rex:/\\Chi/g, tmplt:"&#935;"},
{ rex:/\\Psi/g, tmplt:"&#936;"},
{ rex:/\\Omega/g, tmplt:"&#937;"},
{ rex:/\\alpha/g, tmplt:"&#945;"},
{ rex:/\\beta/g, tmplt:"&#946;"},
{ rex:/\\gamma/g, tmplt:"&#947;"},
{ rex:/\\delta/g, tmplt:"&#948;"},
{ rex:/\\epsilon/g, tmplt:"&#949;"},
{ rex:/\\zeta/g, tmplt:"&#950;"},
{ rex:/\\eta/g, tmplt:"&#951;"},
{ rex:/\\thetasym/g, tmplt:"&#977;"},
{ rex:/\\theta/g, tmplt:"&#952;"},
{ rex:/\\iota/g, tmplt:"&#953;"},
{ rex:/\\kappa/g, tmplt:"&#954;"},
{ rex:/\\lambda/g, tmplt:"&#955;"},
{ rex:/\\mu/g, tmplt:"&#956;"},
{ rex:/\\nu/g, tmplt:"&#957;"},
{ rex:/\\xi/g, tmplt:"&#958;"},
{ rex:/\\omicron/g, tmplt:"&#959;"},
{ rex:/\\piv/g, tmplt:"&#982;"},
{ rex:/\\pi/g, tmplt:"&#960;"},
{ rex:/\\rho/g, tmplt:"&#961;"},
{ rex:/\\sigmaf/g, tmplt:"&#962;"},
{ rex:/\\sigma/g, tmplt:"&#963;"},
{ rex:/\\tau/g, tmplt:"&#964;"},
{ rex:/\\upsilon/g, tmplt:"&#965;"},
{ rex:/\\phi/g, tmplt:"&#966;"},
{ rex:/\\chi/g, tmplt:"&#967;"},
{ rex:/\\psi/g, tmplt:"&#968;"},
{ rex:/\\omega/g, tmplt:"&#969;"},
{ rex:/\\upsih/g, tmplt:"&#978;"},
// miscellaneous symbols
{ rex:/\\bull/g, tmplt:"&#8226;"},
{ rex:/\\uarr/g, tmplt:"&#8593;"},
{ rex:/\\darr/g, tmplt:"&#8595;"},
{ rex:/\\crarr/g, tmplt:"&#8629;"},
{ rex:/\\lArr/g, tmplt:"&#8656;"},
{ rex:/\\uArr/g, tmplt:"&#8657;"},
{ rex:/\\dArr/g, tmplt:"&#8659;"},
{ rex:/\\forall/g, tmplt:"&#8704;"},
{ rex:/\\part/g, tmplt:"&#8706;"},
{ rex:/\\exist/g, tmplt:"&#8707;"},
{ rex:/\\empty/g, tmplt:"&#8709;"},
{ rex:/\\nabla/g, tmplt:"&#8711;"},
{ rex:/\\notin/g, tmplt:"&#8713;"},
{ rex:/\\ni/g, tmplt:"&#8715;"},
{ rex:/\\minus/g, tmplt:"&#8722;"},
{ rex:/\\lowast/g, tmplt:"&#8727;"},
{ rex:/\\sqrt|\\radic/g, tmplt:"&#8730;"},
{ rex:/\\prop/g, tmplt:"&#8733;"},
{ rex:/\\infin/g, tmplt:"&#8734;"},
{ rex:/\\ang/g, tmplt:"&#8736;"},
{ rex:/\\and/g, tmplt:"&#8743;"},
{ rex:/\\or/g, tmplt:"&#8744;"},
{ rex:/\\cap/g, tmplt:"&#8745;"},
{ rex:/\\cup/g, tmplt:"&#8746;"},
{ rex:/\\there4/g, tmplt:"&#8756;"},
{ rex:/\\sub/g, tmplt:"&#8834;"},
{ rex:/\\sup/g, tmplt:"&#8835;"},
{ rex:/\\nsub/g, tmplt:"&#8836;"},
{ rex:/\\sube/g, tmplt:"&#8838;"},
{ rex:/\\supe/g, tmplt:"&#8839;"},
{ rex:/\\oplus/g, tmplt:"&#8853;"},
{ rex:/\\otimes/g, tmplt:"&#8855;"},
{ rex:/\\perp/g, tmplt:"&#8869;"},
{ rex:/\\sdot/g, tmplt:"&#8901;"}
]
};
Wiky.inverse.math = {
pre: [
{ rex:/&#8722;|\u2212/g, tmplt:"-"},
{ rex:/&#8201;|\u2009/g, tmplt:"&#8201;"},
{ rex:/&#8206;|\u200E/g, tmplt:"{"},
{ rex:/&#8207;|\u200F/g, tmplt:"}"}
],
post: [
// { rex:/([$])/g, tmplt:"\\$1" },
{ rex:/&#94;|\x5E/g, tmplt:"^"},
{ rex:/&lt;/g, tmplt:"<"},
{ rex:/&gt;/g, tmplt:">"}
],
shortcuts: [
// { rex:/&#8195;|\u2003/g, tmplt:" "}, // omit due to charset support ie6
// { rex:/&#8194;|\u2002/g, tmplt:" "},
// { rex:/&#8201;|\u2009/g, tmplt:" "},
{ rex:/&#177;|\xB1/g, tmplt:"+-"},
{ rex:/&#183;|\xB7/g, tmplt:"*"},
{ rex:/&#215;|\xD7/g, tmplt:"\\x"},
{ rex:/&#216;|\xD8/g, tmplt:"/O"},
{ rex:/&#248;|\xF8/g, tmplt:"/o"},
{ rex:/&#8592;|\u2190/g, tmplt:"&lt;-"},
{ rex:/&#8594;|\u2192/g, tmplt:"-&gt;"},
{ rex:/&#8596;|\u2194/g, tmplt:"&lt;-&gt;"},
{ rex:/&#8658;|\u21D2/g, tmplt:"=&gt;"},
{ rex:/&#8660;|\u21D4/g, tmplt:"&lt;=&gt;"},
{ rex:/&#8764;|\u223C/g, tmplt:"~"},
{ rex:/&#8773;|\u2245/g, tmplt:"~="},
{ rex:/&#8776;|\u2248/g, tmplt:"~~"},
{ rex:/&#8800;|\u2260/g, tmplt:"!="},
{ rex:/&#8230;/g, tmplt:"..."},
{ rex:/&#8801;|\u2261/g, tmplt:"-="},
{ rex:/&#8804;|\u2264/g, tmplt:"&lt;="},
{ rex:/&#8805;|\u2265/g, tmplt:"&gt;="}
],
expr: [
{ rex:/<span class=\"s\"><span class=\"i\">(\{?@[0-9]+@\}?)<\/span><span class="i">(\{?@[0-9]+@\}?)<\/span><\/span>/g, tmplt:"_$2^$1"}, // superscript + subscript
{ rex:/<span class=\"o\"><span class=\"x\">(\{?@[0-9]+@\}?)<\/span>(\\prod|\\sum|\\int)<span class=\"x\">(\{?@[0-9]+@\}?)<\/span><\/span>/g, tmplt:"$2_$3^$1"}, // overscript + underscript
{ rex:/<span class=\"o\"><span>@[0-9]+@<\/span>(\\prod|\\sum|\\int)<span class=\"x\">(\{?@[0-9]+@\}?)<\/span><\/span>/mgi, tmplt:"$1_$2", dbg:true}, // underscript
{ rex:/<span class=\"o\"><span class=\"x\">(\{?@[0-9]+@\}?)<\/span>(\\prod|\\sum|\\int)<span>@[0-9]+@<\/span><\/span>/mgi, tmplt:"$2^$1"}, // overscript
{ rex:/<span class=\"f\"><span class=\"n\">(\{?@[0-9]+@\}?)<\/span><span class="d">(\{?@[0-9]+@\}?)<\/span><\/span>/mgi, tmplt:"$1/$2"}, // fraction
{ rex:/<span class=\"lb\"[^>]*>&[^;]+;<\/span><span class=\"v\">((?:<span class=\"e\">[^>]*<\/span>){2,})<\/span><span class=\"rb\"[^>]*>&[^;]+;<\/span>/mgi, tmplt:function($0,$1){return "["+$1.replace(/(?:^<span class=\"e\">|<\/span>$)/g,"").replace(/<\/span><span class=\"e\">/g,",")+"]";}}, // vector ..
{ rex:/<span class=\"lb\"[^>]*>&[^;]+;<\/span>((?:<span class=\"m\">(?:(?:<span class=\"e\">[^>]*<\/span>){2,})<\/span>[^>]*){2,})<span class=\"rb\"[^>]*>&[^;]+;<\/span>/mgi, tmplt:function($0,$1){return "[["+Wiky.math.transpose($1.replace(/(?:^<span class=\"m\"><span class=\"e\">|<\/span><\/span>$)/g,"").replace(/<\/span><span class=\"e\">/g,",").replace(/<\/span><\/span>[^>]*<span class=\"m\"><span class=\"e\">/g,"|").split("|")).mat.join("][")+"]]";}}, // matrix ..
{ rex:/<span class=\"b\">(@[0-9]+@)<\/span>/mgi, tmplt:"!$1"}, // bold vector ..
{ rex:/<sup>(\{?@[0-9]+@\}?)<\/sup>&#8260;<sub>(\{?@[0-9]+@\}?)<\/sub>/mgi, tmplt:"$1//$2"},
{ rex:/<sup class=\"i\">(\{?@[0-9]+@\}?)<\/sup>/mgi, tmplt:"^$1" },
{ rex:/<sub class=\"i\">(\{?@[0-9]+@\}?)<\/sub>/mgi, tmplt:"_$1" }
],
symbols: [
// greek symbols
{ rex:/&#913;|\u391/g, tmplt:"\\Alpha"},
{ rex:/&#914;|\u392/g, tmplt:"\\Beta"},
{ rex:/&#915;|\u393/g, tmplt:"\\Gamma"},
{ rex:/&#916;|\u394/g, tmplt:"\\Delta"},
{ rex:/&#917;|\u395/g, tmplt:"\\Epsilon"},
{ rex:/&#918;|\u396/g, tmplt:"\\Zeta"},
{ rex:/&#919;|\u397/g, tmplt:"\\Eta"},
{ rex:/&#920;|\u398/g, tmplt:"\\Theta"},
{ rex:/&#921;|\u399/g, tmplt:"\\Iota"},
{ rex:/&#922;|\u39A/g, tmplt:"\\Kappa"},
{ rex:/&#923;|\u39B/g, tmplt:"\\Lambda"},
{ rex:/&#924;|\u39C/g, tmplt:"\\Mu"},
{ rex:/&#925;|\u39D/g, tmplt:"\\Nu"},
{ rex:/&#926;|\u39E/g, tmplt:"\\Xi"},
{ rex:/&#927;|\u39F/g, tmplt:"\\Omicron"},
{ rex:/&#928;|\u3A0/g, tmplt:"\\Pi"},
{ rex:/&#929;|\u3A1/g, tmplt:"\\Rho"},
{ rex:/&#931;|\u3A3/g, tmplt:"\\Sigma"},
{ rex:/&#932;|\u3A4/g, tmplt:"\\Tau"},
{ rex:/&#933;|\u3A5/g, tmplt:"\\Upsilon"},
{ rex:/&#934;|\u3A6/g, tmplt:"\\Phi"},
{ rex:/&#935;|\u3A7/g, tmplt:"\\Chi"},
{ rex:/&#936;|\u3A8/g, tmplt:"\\Psi"},
{ rex:/&#937;|\u3A9/g, tmplt:"\\Omega"},
{ rex:/&#945;|\u3B1/g, tmplt:"\\alpha"},
{ rex:/&#946;|\u3B2/g, tmplt:"\\beta"},
{ rex:/&#947;|\u3B3/g, tmplt:"\\gamma"},
{ rex:/&#948;|\u3B4/g, tmplt:"\\delta"},
{ rex:/&#949;|\u3B5/g, tmplt:"\\epsilon"},
{ rex:/&#950;|\u3B6/g, tmplt:"\\zeta"},
{ rex:/&#951;|\u3B7/g, tmplt:"\\eta"},
{ rex:/&#977;|\u3D1/g, tmplt:"\\thetasym"},
{ rex:/&#952;|\u3B8/g, tmplt:"\\theta"},
{ rex:/&#953;|\u3B9/g, tmplt:"\\iota"},
{ rex:/&#954;|\u3BA/g, tmplt:"\\kappa"},
{ rex:/&#955;|\u3BB/g, tmplt:"\\lambda"},
{ rex:/&#956;|\u3BC/g, tmplt:"\\mu"},
{ rex:/&#957;|\u3BD/g, tmplt:"\\nu"},
{ rex:/&#958;|\u3BE/g, tmplt:"\\xi"},
{ rex:/&#959;|\u3BF/g, tmplt:"\\omicron"},
{ rex:/&#960;|\u3C0/g, tmplt:"\\pi"},
{ rex:/&#961;|\u3C1/g, tmplt:"\\rho"},
{ rex:/&#962;|\u3C2/g, tmplt:"\\sigmaf"},
{ rex:/&#963;|\u3C3/g, tmplt:"\\sigma"},
{ rex:/&#964;|\u3C4/g, tmplt:"\\tau"},
{ rex:/&#965;|\u3C5/g, tmplt:"\\upsilon"},
{ rex:/&#966;|\u3C6/g, tmplt:"\\phi"},
{ rex:/&#967;|\u3C7/g, tmplt:"\\chi"},
{ rex:/&#968;|\u3C8/g, tmplt:"\\psi"},
{ rex:/&#969;|\u3C9/g, tmplt:"\\omega"},
// miscellaneous symbols
{ rex:/&#978;|\u3D2/g, tmplt:"\\upsih"},
{ rex:/&#982;|\u3D6/g, tmplt:"\\piv"},
{ rex:/&#8226;|\u2022/g, tmplt:"\\bull"},
{ rex:/&#8593;|\u2191/g, tmplt:"\\uarr"},
{ rex:/&#8595;|\u2193/g, tmplt:"\\darr"},
{ rex:/&#8629;|\u21B5/g, tmplt:"\\crarr"},
{ rex:/&#8656;|\u21D0/g, tmplt:"\\lArr"},
{ rex:/&#8657;|\u21D1/g, tmplt:"\\uArr"},
{ rex:/&#8659;|\u21D3/g, tmplt:"\\dArr"},
{ rex:/&#8704;|\u2200/g, tmplt:"\\forall"},
{ rex:/&#8706;|\u2202/g, tmplt:"\\part"},
{ rex:/&#8707;|\u2203/g, tmplt:"\\exist"},
{ rex:/&#8709;|\u2205/g, tmplt:"\\empty"},
{ rex:/&#8711;|\u2207/g, tmplt:"\\nabla"},
{ rex:/&#8712;|\u2208/g, tmplt:"\\isin"},
{ rex:/&#8713;|\u2209/g, tmplt:"\\notin"},
{ rex:/&#8715;|\u220B/g, tmplt:"\\ni"},
{ rex:/<span class=\"h\">(&#8719;|\u220F)<\/span>/g, tmplt:"\\prod"},
{ rex:/<span class=\"h\">(&#8721;|\u2211)<\/span>/g, tmplt:"\\sum"},
{ rex:/&#8727;|\u2217/g, tmplt:"\\lowast"},
{ rex:/&#8730;|\u221A/g, tmplt:"\\sqrt"},
{ rex:/&#8733;|\u221D/g, tmplt:"\\prop"},
{ rex:/&#8734;|\u221E/g, tmplt:"\\infin"},
{ rex:/&#8736;|\u2220/g, tmplt:"\\ang"},
{ rex:/&#8743;|\u2227/g, tmplt:"\\and"},
{ rex:/&#8744;|\u2228/g, tmplt:"\\or"},
{ rex:/&#8745;|\u2229/g, tmplt:"\\cap"},
{ rex:/&#8746;|\u222A/g, tmplt:"\\cup"},
{ rex:/<span class=\"h\">(?:&#8747;|\u222B)<\/span>/g, tmplt:"\\int"},
{ rex:/&#8756;|\u2234/g, tmplt:"\\there4"},
{ rex:/&#8834;|\u2282/g, tmplt:"\\sub"},
{ rex:/&#8835;|\u2283/g, tmplt:"\\sup"},
{ rex:/&#8836;|\u2284/g, tmplt:"\\nsub"},
{ rex:/&#8838;|\u2286/g, tmplt:"\\sube"},
{ rex:/&#8839;|\u2287/g, tmplt:"\\supe"},
{ rex:/&#8853;|\u2295/g, tmplt:"\\oplus"},
{ rex:/&#8855;|\u2297/g, tmplt:"\\otimes"},
{ rex:/&#8869;|\u22A5/g, tmplt:"\\perp"},
{ rex:/&#8901;|\u22C5/g, tmplt:"\\sdot"}
]
};
Wiky.math = {
toHtml: function(str) {
var expr = function(itr) { // region from "{" to "}", nesting allowed ..
var s = "";
for (var c = itr.str.charAt(itr.pos++); itr.pos <= itr.str.length && c != "}"; c = itr.str.charAt(itr.pos++))
s += (c == "{") ? ("{"+expr(itr)+"}") : c;
return Wiky.store(Wiky.apply(s, Wiky.rules.math.expr));
};
str = Wiky.apply(str, Wiky.rules.math.preshortcuts);
str = Wiky.apply(str, Wiky.rules.math.symbols);
str = expr({str:str,pos:0});
return str;
},
toWiki: function(str) {
var parseTree = function(itr, endtag) {
var c, s="",gt,nam,idxof=function(s,c,p){var i=s.indexOf(c,p);return i>=0?i:s.length;}
for (itr.buf=itr.str.substr(itr.pos,endtag.length);
itr.pos<itr.str.length && (!endtag || itr.buf!=endtag);
itr.buf=itr.str.substr(++itr.pos,endtag.length)) {
if ((c=itr.str.charAt(itr.pos))=="<" && (gt=idxof(itr.str,">",itr.pos)) < idxof(itr.str,"/",itr.pos)) { // start tags .. no empty elements or endtags ..
nam = itr.str.substring(itr.pos+1,Math.min(idxof(itr.str," ",itr.pos),gt));
s += itr.str.substring(itr.pos,itr.pos=gt+1) + parseTree(itr, "</" + nam + ">") + "</" + nam + ">";
itr.pos += nam.length+3;
}
else
s += c;
}
itr.pos--;
return Wiky.store(s, true);
};
str = Wiky.apply(str, Wiky.inverse.math.pre);
str = Wiky.apply(str, Wiky.inverse.math.symbols);
str = parseTree({str:str,pos:0,buf:null}, "");
while (str.match(/@[0-9]+@/g) != null)
str = Wiky.apply(str.replace(/@([0-9]+)@/g, function($0,$1){return Wiky.restore($1);}), Wiky.inverse.math.expr);
str = Wiky.apply(str, Wiky.inverse.math.shortcuts);
str = Wiky.apply(str, Wiky.inverse.math.post);
return str;
},
fence: function(str) {
return window && window.ActiveXObject ? "&#160;" : "&#8201;";
},
transpose: function (m) {
var t=[];
for (var i in m) {
m[i] = m[i].split(",");
for (var j in m[i]) {
if (!t[j]) t[j]=[];
t[j][i] = m[i][j];
}
}
for (var i in t)
t[i] = t[i].join(",");
return {mat:t, len:m.length};
}
};
Wiky.rules.pre = Wiky.rules.pre.concat({ rex:/\\([$])/g, tmplt:function($0,$1){return Wiky.store($1);} });
Wiky.rules.nonwikiblocks = Wiky.rules.nonwikiblocks.concat(
[
{ rex:/\[\(([a-zA-Z0-9\.-]+)\)\$([^$]*)\$\]/g, tmplt:function($0,$1,$2){return ":p]<div class=\"eq\"><a name=\"eq"+$1+"\">("+$1+")</a>" + Wiky.math.toHtml($2) + "</div>[p:";} }, // numbered equation
{ rex:/\[\$([^$]*)\$\]/g, tmplt:function($0,$1){return ":p]<div class=\"eq\">" + Wiky.math.toHtml($1) + "</div>[p:";} }, // equation
]);
Wiky.rules.nonwikiinlines = Wiky.rules.nonwikiinlines.concat(
{ rex:/\$([^$]*)\$/g, tmplt:function($0,$1){return "<dfn>" + Wiky.math.toHtml($1) + "</dfn>";} } // inline equation
);
Wiky.inverse.pre = Wiky.inverse.pre.concat({ rex:/([\$])/g, tmplt:"\\$1" });
Wiky.inverse.nonwikiblocks = Wiky.inverse.nonwikiblocks.concat(
[
{ rex:/<div class=\"eq\"><a name=\"eq([0-9]+)\">(?:.*?)<\/a>(.*?)<\/div>/g, tmplt:function($0,$1,$2){return Wiky.store("[("+$1+")$"+Wiky.math.toWiki($2)+"$]");} }, // numbered equation
{ rex:/<div class=\"eq\">(.*?)<\/div>/g, tmplt:function($0,$1){return Wiky.store("[$"+Wiky.math.toWiki($1)+"$]");} }, // equation
]);
Wiky.inverse.nonwikiinlines = Wiky.inverse.nonwikiinlines.concat(
{ rex:/<dfn>(.*?)<\/dfn>/g, tmplt:function($0,$1){return Wiky.store("$"+Wiky.math.toWiki($1)+"$");} } // inline equation
);

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<% USING: io namespaces furnace:onigiri html
math kernel sequences hashtables calendar ; %>
<title><% "title" key>meta* meta-value [ "an onigiri weblog" ] unless* write %></title>
<link rel="self" href="<% base-url write "atom" action>url write %>"/>
<author>
<name><% "author" key>meta* meta-value [ "anonymous" ] unless* write %></name>
</author>
<id><% base-url write "atom" action>url write %></id>
<% entry get
[ [ entry-created ] 2apply compare-timestamps neg ] sort
dup empty? [ %>
<updated><% dup first entry-created timestamp>rfc3339 write %></updated><% ] unless
[ %>
<entry>
<title><% dup entry-title write %></title>
<id><% dup entry-stub stub>url dup base-url write write %></id>
<updated><% over entry-created timestamp>rfc3339 write %></updated>
<link href="<% base-url write write %>"/>
<summary><% entry-body write-html %></summary>
</entry><% ] each %>
</feed>

View File

@ -1,19 +0,0 @@
<% USING: namespaces io kernel sequences furnace:onigiri html
furnace ; %>
<p><% "stub" get [ "true" entry-edit ] curry "Edit with Wiky" render-link %></p>
<form method="post" action="entry-update">
<% "stub" get [ %><input type="hidden" name="stub" value="<% "stub" get write %>"/><% ] when %>
<table><tr><td>Title:</td><td><input type="text" name="title" value="<% "title" get write %>"/></td></tr>
<tr><td>Body:</td><td><textarea id="body" rows="10" cols="60" name="body" onKeyUp="$('preview').innerHTML=$('body').value;"><% "body" get write %></textarea></td></tr>
<tr><td></td><td><input type="submit" name="post" value="<% "stub" get "update" "post" ? write %>"/>
<% "stub" get [ [ entry-delete ] curry "Delete" render-link ] when* %>(preview below)</td></tr>
<tr><td></td><td><div id="preview"></div></td></tr>
</table>
</form>
<script>
$('preview').innerHTML=$('body').value;
</script>

View File

@ -1,34 +0,0 @@
<% USING: namespaces io kernel sequences furnace:onigiri html
furnace ; %>
<script type="text/javascript">
function transformWiky() {
var wiky = $('wiky').value;
var html = Wiky.toHtml(wiky);
$('html').value = html;
$('preview').innerHTML = html;
}
function transformHtml() {
var html = $('preview').innerHTML;
var wiky = Wiky.toWiki(html);
$('wiky').value = wiky;
$('html').value = html;
}
</script>
<p><% "stub" get [ f entry-edit ] curry "Edit in non-Wiky editor" render-link %></p>
<form method="post" action="entry-update">
<% "stub" get [ %><input type="hidden" name="stub" value="<% "stub" get write %>"/><% ] when %>
<table><tr><td>Title:</td><td><input type="text" name="title" value="<% "title" get write %>"/></td></tr>
<tr><td>Body:</td><td><textarea id="wiky" rows="10" cols="60" name="wiky" onkeyup="transformWiky();"></textarea></td></tr>
<tr><td></td><td><input type="submit" name="post" value="<% "stub" get "update" "post" ? write %>"/>
<% "stub" get [ [ entry-delete ] curry "Delete" render-link ] when* %>
(preview below)</td></tr>
<tr><td></td><td><input id="html" type="hidden" name="body" value=""/><div id="preview"><% "body" get [ write-html ] when* %></div></td></tr>
</table>
</form>
<script type="text/javascript">
transformHtml();
</script>

View File

@ -1,9 +0,0 @@
<% USING: furnace:onigiri io namespaces math calendar html kernel furnace ; %>
<div class="entry">
<h2><a href="<% "entry-show" action>url write %>?stub=<% "stub" get write %>"><% "title" get write %></a></h2>
<p>posted <% "created" get timestamp>string write %> <% "stub" get [ entry-edit ] curry "(edit)" render-link %></p>
<% "body" get write-html %>
</div>

View File

@ -1,16 +0,0 @@
<% USING: io kernel namespaces hashtables furnace:onigiri ; %>
<% "analytics" key>meta* meta-value [ %>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "<% write %>";
urchinTracker();
</script>
<% ] when* %>
</div>
</body>
</html>

View File

@ -1,25 +0,0 @@
<?xml version="1.0"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<% USING: namespaces io kernel hashtables furnace:onigiri furnace sequences ; %>
<title><% "model" get write %></title>
<link rel='stylesheet' type='text/css' href='/responder/onigiri-resources/<% css-path write %>'/>
<link rel='stylesheet' type='text/css' href='/responder/onigiri-resources/wiky/wiky.css'/>
<link rel='stylesheet' type='text/css' href='/responder/onigiri-resources/wiky/wiky.lang.css'/>
<link rel='stylesheet' type='text/css' href='/responder/onigiri-resources/wiky/wiky.math.css'/>
<script type='text/javascript' src='/responder/onigiri-resources/wiky/wiky.js'></script>
<script type='text/javascript' src='/responder/onigiri-resources/wiky/wiky.lang.js'></script>
<script type='text/javascript' src='/responder/onigiri-resources/wiky/wiky.math.js'></script>
<script type='text/javascript' src='/responder/resources/prototype.js'></script>
</head>
<body>
<div id="header">
<h1><a href="<% "" action>url write %>"><% "title" key>meta* meta-value write %></a></h1>
<p>Proudly running on <a href="http://factorcode.org">Factor <% version write %></a></p>
<p><a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Strict</a> | <a href="<% "atom" action>url write %>">Subscribe to <% "title" key>meta [ meta-value ] [ "this weblog" ] if* write %></a> | <% [ meta-list ] "Admin" render-link %> | <% [ f entry-edit ] "Post" render-link %></p>
</div>
<div id="container">

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<% USING: namespaces furnace:onigiri sequences io ; %>
<url>
<loc><% base-url write "" action>url write %></loc>
</url>
<% entry get [ %>
<url>
<loc><% entry-stub base-url write stub>url write %></loc>
</url>
<% ] each %>
</urlset>

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files have changed in this diff Show More