Diff for /gforth/ds2texi.fs between versions 1.3 and 1.27

version 1.3, 1995/01/10 18:57:41 version 1.27, 2003/03/09 15:16:47
Line 1 Line 1
 \ documentation source to texi format converter  \ documentation source to texi format converter
   
   \ Copyright (C) 1995,1996,1997,1998,1999,2003 Free Software Foundation, Inc.
   
   \ This file is part of Gforth.
   
   \ Gforth is free software; you can redistribute it and/or
   \ modify it under the terms of the GNU General Public License
   \ as published by the Free Software Foundation; either version 2
   \ of the License, or (at your option) any later version.
   
   \ This program is distributed in the hope that it will be useful,
   \ but WITHOUT ANY WARRANTY; without even the implied warranty of
   \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   \ GNU General Public License for more details.
   
   \ You should have received a copy of the GNU General Public License
   \ along with this program; if not, write to the Free Software
   \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   
 \ documentation source can contain lines in the form `doc-word' and  \ documentation source can contain lines in the form `doc-word' and
 \ `short-word'. These are converted to appropriate full or short  \ `short-word'. These are converted to appropriate full or short
 \ (without the description) glossary entries for word.  \ (without the description) glossary entries for word.
Line 8 Line 26
 \ `documentation'. Each word resides there under its own name.  \ `documentation'. Each word resides there under its own name.
   
 script? [IF]  script? [IF]
 warnings off      warnings off
 include search-order.fs      require search.fs
 include struct.fs      require extend.fs
 include debugging.fs      require glocals.fs
       require float.fs
       require struct.fs
       require debugs.fs
 [THEN]  [THEN]
   
 wordlist constant documentation  wordlist constant documentation
   
 struct  struct
     2 cells: field doc-name      cell% 2* field doc-name
     2 cells: field doc-stack-effect      cell% 2* field doc-stack-effect
     2 cells: field doc-wordset      cell% 2* field doc-wordset
     2 cells: field doc-pronounciation      cell% 2* field doc-pronounciation
     2 cells: field doc-description      cell% 2* field doc-description
 end-struct doc-entry  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 - ;
   
   : skip-prefix ( c-addr1 u1 -- c-addr2 u2 )
       2dup s" --" string-prefix?
       IF
           [char] - skip [char] - scan 1 /string
       THEN ;
   
   : replace-_ ( c-addr u -- )
       \ replaces _ with -
       chars bounds
       +DO
           i c@ [char] _ =
           if
               [char] - i c!
           endif
           1 chars
       +loop ;
       
   : condition-stack-effect ( c-addr1 u1 -- c-addr2 u2 )
       save-mem 2dup replace-_ ;
       
   : condition-wordset ( c-addr1 u1 -- c-addr2 u2 )
       dup 0=
       if
           2drop s" unknown"
       else
           save-mem
       endif ;
   
   : condition-pronounciation ( c-addr1 u1 -- c-addr2 u2 )
       save-mem 2dup replace-_ ;
   
   : make-doc ( -- )
       get-current documentation set-current
       create
           last @ name>string skip-prefix 2,               \ name
           [char] ) parse save-mem 2,      \ stack-effect
           bl sword condition-wordset 2,   \ wordset
           bl sword dup    \ pronounciation
           if
               condition-pronounciation
           else
               2drop last @ name>string skip-prefix
           endif
           2,
           get-description save-mem 2,
       set-current ;
   
 : emittexi ( c -- )  : emittexi ( c -- )
     >r      >r
     s" @{}" r@ scan 0<>      s" @{}" r@ scan 0<>
Line 41  end-struct doc-entry Line 124  end-struct doc-entry
     drop ;      drop ;
   
 : print-short ( doc-entry -- )  : print-short ( doc-entry -- )
     >r ." @format" cr      >r
       ." @findex "
       r@ doc-name 2@ typetexi
       ."  @var{ " r@ doc-stack-effect 2@ type ."  }  "
       r@ doc-wordset 2@ type
       cr
       ." @cindex "
       ." @code{" r@ doc-name 2@ typetexi ." }"
       cr
       r@ doc-name 2@ drop c@ [char] : <> if
           \ cut out words starting with :, info-lookup cannot handle them
           \ !! deal with : by replacing it here and in info-lookup?
           ." @kindex "
           r@ doc-name 2@ typetexi
           cr
       endif
       ." @format" cr
     ." @code{" r@ doc-name 2@ typetexi ." }       "      ." @code{" r@ doc-name 2@ typetexi ." }       "
     ." @i{" r@ doc-stack-effect 2@ type ." }       "      ." @i{" r@ doc-stack-effect 2@ type ." }       "
     r@ doc-wordset 2@ type ."        ``"      r@ doc-wordset 2@ type ."        ``"
Line 53  end-struct doc-entry Line 152  end-struct doc-entry
     r@ print-short      r@ print-short
     r@ doc-description 2@ dup 0<>      r@ doc-description 2@ dup 0<>
     if      if
         type ." @*" cr          \ ." @iftex" cr ." @vskip-0ex" cr ." @end iftex" cr
           type cr cr
           \ ." @ifinfo" cr ." @*" cr ." @end ifinfo" cr cr
     else      else
         2drop cr          2drop cr
     endif      endif
Line 64  end-struct doc-entry Line 165  end-struct doc-entry
     \ with the prefix addr2 u2 and continuing with a word in the      \ with the prefix addr2 u2 and continuing with a word in the
     \ wordlist `documentation'. f is true if xt is executed.      \ wordlist `documentation'. f is true if xt is executed.
     >r dup >r      >r dup >r
     3 pick over compare 0=      3 pick over str=
     if \ addr2 u2 is a prefix of addr1 u1      if \ addr2 u2 is a prefix of addr1 u1
         r> /string documentation search-wordlist          r> /string documentation search-wordlist
         if \ the rest of addr1 u1 is in documentation          if \ the rest of addr1 u1 is in documentation
Line 100  create docline doclinelength chars allot Line 201  create docline doclinelength chars allot
     repeat      repeat
     drop rdrop ;      drop rdrop ;
   
 script? [IF]  : compare-ci ( addr1 u1 addr2 u2 -- n )
 include prims2x.fs      \ case insensitive string compare
 s" primitives.b" ' register-doc process-file      \ !! works correctly only for comparing for equality
 s" gforth.ds" r/o open-file throw ds2texi bye      2 pick swap -
 [THEN]      ?dup-0=-if
           capscomp
       else
           nip nip nip
           0<
           if
               -1
           else
               1
           endif
       endif  ;
   
   : answord ( "name wordset pronounciation" -- )
       \ check the documentaion of an ans word
       name { D: wordname }
       name { D: wordset }
       name { D: pronounciation }
       wordname documentation search-wordlist
       if
           execute { doc }
           wordset doc doc-wordset 2@ compare-ci
           if 
               ." wordset: " wordname type ." : '"  doc doc-wordset 2@ type ." ' instead of '" wordset type ." '" cr
           endif
           pronounciation doc doc-pronounciation 2@ compare-ci
           if
               ." pronounciation: " wordname type ." : '" doc doc-pronounciation 2@ type ." ' instead of '" pronounciation type ." '" cr
           endif
       else
           ." undocumented: " wordname type cr
       endif ;

Removed from v.1.3  
changed lines
  Added in v.1.27


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>