home *** CD-ROM | disk | FTP | other *** search
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; ;;
- ;;; Centre for Speech Technology Research ;;
- ;;; University of Edinburgh, UK ;;
- ;;; Copyright (c) 1996,1997 ;;
- ;;; All Rights Reserved. ;;
- ;;; ;;
- ;;; Permission is hereby granted, free of charge, to use and distribute ;;
- ;;; this software and its documentation without restriction, including ;;
- ;;; without limitation the rights to use, copy, modify, merge, publish, ;;
- ;;; distribute, sublicense, and/or sell copies of this work, and to ;;
- ;;; permit persons to whom this work is furnished to do so, subject to ;;
- ;;; the following conditions: ;;
- ;;; 1. The code must retain the above copyright notice, this list of ;;
- ;;; conditions and the following disclaimer. ;;
- ;;; 2. Any modifications must be clearly marked as such. ;;
- ;;; 3. Original authors' names are not deleted. ;;
- ;;; 4. The authors' names are not used to endorse or promote products ;;
- ;;; derived from this software without specific prior written ;;
- ;;; permission. ;;
- ;;; ;;
- ;;; THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK ;;
- ;;; DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ;;
- ;;; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ;;
- ;;; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE ;;
- ;;; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ;;
- ;;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ;;
- ;;; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;;
- ;;; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ;;
- ;;; THIS SOFTWARE. ;;
- ;;; ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Author: Alan W Black
- ;;; Date: August 1996
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; Save documentation strings as texinfo files
- ;;;
- ;;; Finds all functions with documentation, and all variables with
- ;;; documentation, sorts and dumps the information in doc/festfunc.texi
- ;;; and doc/festvars.texi
- ;;;
- ;;; The makefile in the doc directory runs the compiled festival binary and
- ;;; causes these files to be created form the currently defined functions
- ;;; and variables
- ;;;
- ;;; Also provides function to extract manual section for documentation
- ;;; string and send a url to Netscape to display it
- ;;;
-
- (define (make-doc)
- "(make-doc)
- Find function and variable document strings and save them in texinfo
- format to respective files."
- (format t "Making function, feature and variable lists\n")
-
- ;; Need to ensure all library files are actually loaded if they contain
- ;; funcstions/variables which have to be put in the manual
- (require 'festival)
- (require 'display)
- (require 'mbrola)
- (require 'tilt)
-
- (make-a-doc "festfunc.texi" 'function)
- (make-a-doc "festfeat.texi" 'features)
- (make-a-doc "festvars.texi" 'vars))
-
- (define (make-a-doc outfile doclist)
- "(make-a-doc FILENAME DOCLIST)
- Make a texinfo document in FILENAME as a texinfo table, items are
- from DOCLIST. DOCLIST names which doclist to use, it may be
- one of 'function, 'features or 'vars."
- (let ((outfp (fopen outfile "wb")))
- (format outfp "@table @code\n")
- ;; Yes I am so lazy I'm not willing to write a sort function in Scheme
- (sort-and-dump-docstrings doclist outfp)
- (format outfp "@end table\n")
- (fclose outfp)))
-
- ;;;
- ;;; Documentation string may refer to a section in the manual
- ;;; If it does then we can automatically go to that section in the
- ;;; menu using Netscape.
- ;;;
-
- (defvar manual-browser "netscape"
- "manual-browser
- The Unix program name of your Netscape Navigator browser.
- [see Getting some help]")
-
- (defvar manual-url
- (format nil "http://www.cstr.ed.ac.uk/projects/festival/manual-%s.%s.%s/"
- (car festival_version_number)
- (car (cdr festival_version_number))
- (car (cdr (cdr festival_version_number))))
- "manual-url
- The default URL for the Festival Manual in html format. You may
- reset this to a file://.../... type URL on you're local machine.
- [see Getting some help]")
-
- ;;; Paul got this idea from VM, the email system for emacs and
- ;;; I found out how to do this from their code, thanks Kyle
-
- (define (send-url-to-netscape url)
- "(send-url-to-netscape URL)
- Send given URL to netscape for display. This is primarily used to
- display parts of the manual referenced in documentation strings."
- (system
- (string-append
- manual-browser
- " -remote \"openURL( "
- url
- " )\" ")))
-
- (define (lastline string)
- "(lastline STRING)
- Returns the part of the string which between the last newline and the
- end of string."
- (let ((ns (string-after string "\n")))
- (if (string-equal ns "")
- string
- (lastline ns))))
-
- (define (manual-sym symbol)
- "(manual-sym SYMBOL)
- Display the section in the manual that SYMBOL's docstring has
- identified as the most relevant. The section is named on the
- last line of a documentation string with no newlines within it
- prefixed by \"[see \" with a \"]\" just immediately before the end
- of the documentation string. The manual section name is translated to
- the section in the HTML version of the manual and a URL is
- and sent to Netscape for display. [see Getting some help]"
- (let ((section (string-before (string-after
- (lastline (eval (list 'doc symbol)))
- "[see ")
- "]")))
- (cond
- ((string-equal section "")
- (eval (list 'doc symbol))) ;; nothing there
- (t
- (manual section)))))
-
- (define (manual section)
- "(manual SECTION)
- Display SECTION in the manual. SECTION is a string identifying
- a manual section (it could be an initial substring. If SECTION
- is nil or unspecifed then the Manual table of contents is displayed.
- This uses netscape to display the manual page so you must have that
- (use variable manual-browser to identify it) and the variable
- manual-url pointing to a copy of the manual. [see Getting some help]"
- (let ((tmpfile (make_tmp_filename))
- (manual-section))
- (cond
- ((string-matches section "\"")
- (string-append "Invalid section reference containing quote: "
- section "\n"))
- ((not section)
- (send-url-to-netscape (string-append manual-url "festival_toc.html")))
- (t ;; find section in manual
- (get_url (string-append manual-url "festival_toc.html") tmpfile)
- (system
- (string-append
- "grep -i \"^<LI><A NAME.*" section "\" \"" tmpfile
- "\" | sed 's/^.*HREF=.//' | sed 's/.>.*$//' > \""
- tmpfile ".out\""))
- (set! manual-section (load (string-append tmpfile ".out") t))
- (cond
- ((not manual-section)
- (string-append "No section called: " section))
- (t
- (send-url-to-netscape (string-append manual-url (car manual-section)))
- (delete-file tmpfile)
- (delete-file (string-append tmpfile ".out"))
- "Sent manual reference url to netscape."))))))
-
- (provide 'festdoc)
-
-
-
-
-