--- gforth/ds2texi.fs 1994/11/17 15:53:09 1.2 +++ gforth/ds2texi.fs 1995/10/07 17:38:11 1.7 @@ -9,9 +9,10 @@ script? [IF] warnings off -include search-order.fs -include struct.fs -include debugging.fs +require search-order.fs +require float.fs +require struct.fs +require debugging.fs [THEN] wordlist constant documentation @@ -24,6 +25,37 @@ struct 2 cells: field doc-description end-struct doc-entry +create description-buffer 4096 chars allot + +: get-description ( -- addr u ) + description-buffer + begin + refill + while + source nip + while + source swap >r 2dup r> -rot cmove + chars + + #lf over c! char+ + repeat then + description-buffer tuck - ; + +: make-doc ( -- ) + get-current documentation set-current + create + last @ name>string 2, \ name + [char] ) parse save-string 2, \ stack-effect + bl parse-word save-string 2, \ wordset + bl parse-word dup \ pronounciation + if + save-string + else + 2drop last @ name>string + endif + 2, + get-description save-string 2, + set-current ; + : emittexi ( c -- ) >r s" @{}" r@ scan 0<> @@ -41,11 +73,17 @@ end-struct doc-entry drop ; : print-short ( doc-entry -- ) - >r ." @format" + >r + ." @findex " + r@ doc-name 2@ typetexi + ." @var{ " r@ doc-stack-effect 2@ type ." } " + r@ doc-wordset 2@ type + cr + ." @format" cr ." @code{" r@ doc-name 2@ typetexi ." } " ." @i{" r@ doc-stack-effect 2@ type ." } " r@ doc-wordset 2@ type ." ``" - r@ doc-pronounciation 2@ type ." ''@end format" cr + r@ doc-pronounciation 2@ type ." ''" cr ." @end format" cr rdrop ; : print-doc ( doc-entry -- ) @@ -53,7 +91,8 @@ end-struct doc-entry r@ print-short r@ doc-description 2@ dup 0<> if - type ." @*" cr + ." @iftex" cr ." @vskip-3ex" cr ." @end iftex" cr + type cr cr \ ." @ifinfo" cr ." @*" cr ." @end ifinfo" cr cr else 2drop cr endif @@ -101,7 +140,9 @@ create docline doclinelength chars allot drop rdrop ; script? [IF] -include prims2x.fs +require prims2x.fs s" primitives.b" ' register-doc process-file +require doc.fd +require crossdoc.fd s" gforth.ds" r/o open-file throw ds2texi bye [THEN]