--- gforth/wf.fs 2003/12/07 23:05:30 1.22 +++ gforth/wf.fs 2004/02/02 14:15:23 1.24 @@ -26,6 +26,7 @@ require string.fs : -$split ( addr u char -- addr1 u1 addr2 u2 ) >r 2dup r@ -scan 2dup + c@ r> = negate over + >r 2swap r> /string ; +: parse" ( -- addr u ) '" parse 2drop '" parse ; \ tag handling @@ -36,11 +37,20 @@ Variable indentlevel Variable tag-option s" " tag-option $! +: .type ( addr u -- ) + bounds ?DO I c@ + case + '& of ." &" endof + '< of ." <" endof + dup emit + endcase + LOOP ; + : tag ( addr u -- ) '< emit type tag-option $@ type '> emit s" " tag-option $! ; : tag/ ( addr u -- ) s" /" tag-option $+! tag ; : /tag ( addr u -- ) '< emit '/ emit type '> emit ; -: tagged ( addr1 u1 addr2 u2 -- ) 2dup 2>r tag type 2r> /tag ; +: tagged ( addr1 u1 addr2 u2 -- ) 2dup 2>r tag .type 2r> /tag ; : opt ( addr u opt u -- ) s" " tag-option $+! tag-option $+! s' ="' tag-option $+! tag-option $+! @@ -85,11 +95,11 @@ Variable table-start CASE 'l OF s" left" class= ENDOF 'r OF s" right" class= ENDOF - 'c OF s" center" class= ENDOF + 'c OF s" center" align= ENDOF '< OF s" left" class= ENDOF '> OF s" right" class= ENDOF - '= OF s" center" class= ENDOF - '~ OF s" absmiddle" class= ENDOF + '= OF s" center" align= ENDOF + '~ OF s" absmiddle" align= ENDOF ENDCASE ; : >talign ( c -- ) @@ -242,19 +252,13 @@ s" Gforth" environment? [IF] s" 0.5.0" s \ line handling : char? ( -- c ) >in @ char swap >in ! ; + : parse-tag ( addr u char -- ) - >r r@ parse type + >r r@ parse .type r> parse 2swap tagged ; : .text ( -- ) >in @ >r char drop - source r@ /string >in @ r> - nip - bounds ?DO I c@ - case - '& of ." &" endof - '< of ." <" endof - dup emit - endcase - LOOP ; + source r@ /string >in @ r> - nip .type ; Create do-words $100 0 [DO] ' .text , [LOOP] @@ -409,11 +413,12 @@ Variable toc-index indentlevel @ over indentlevel ! 2dup < IF swap DO -env -env LOOP EXIT THEN + over 1 = IF = IF -env -env THEN EXIT THEN 2dup > IF DO s" dl" >env s" dt" >env LOOP EXIT THEN 2dup = IF drop IF -env s" dt" >env THEN THEN ; : +indent ( -- ) - indentlevel @ IF -env s" dd" >env THEN + indentlevel @ IF -env -env s" dl" >env s" dd" >env THEN ; wordlist constant longtags @@ -428,21 +433,27 @@ longtags set-current : *** 2 indent s" h3" line +indent ; : -- 0 indent cr print-toc ; : && ( -- ) divs @ IF -env THEN +env - 0 parse id= s" div" env divs on ; + 0 parse id= s" div" env env? divs on ; : - s" ul" env s" li" par ; : + s" ol" env s" li" par ; : << +env ; -: <* s" center" class= s" p" >env ; +: <* s" center" class= ; : env ; : red> -env ; : >> -env ; -: *> -env ; +: *> ; : :: interpret ; : . end-sec on 0 indent ; : :code indent= s" pre" >env BEGIN source >in @ /string type cr refill WHILE source s" :endcode" str= UNTIL THEN - -env ; + -env ; +: :code-file indent= s" pre" >env + parse" r/o open-file throw >r + r@ file-size throw drop dup allocate throw + 2dup swap r@ read-file throw 2dup type drop + -env free throw drop + r> close-file throw ; : \ postpone \ ; definitions @@ -489,16 +500,16 @@ definitions Variable css-file : .title ( addr u -- ) - .' ' cr + .' ' cr s" html" >env s" head" >env cr s" Content-Type" s" http-equiv" opt s" text/xhtml; charset=iso-8859-1" s" content" opt s" meta" tag/ - css-file $@len IF + css-file @ IF css-file $@len IF s" StyleSheet" s" rel" opt css-file $@ href= s" text/css" s" type" opt s" link" tag/ - THEN + THEN THEN s" title" tagged cr -env ; @@ -523,8 +534,6 @@ Variable orig-date \ top word -: parse" ( -- addr u ) '" parse 2drop '" parse ; - : maintainer ( -- ) bl sword mail $! parse" mail-name $! ; : created ( -- )