home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / pcl / docs.lha / latexinfo / elisp / elisp-fmt.el < prev    next >
Encoding:
Text File  |  1992-02-20  |  29.0 KB  |  713 lines

  1. ;;; Definition formatting: \deffn, \defun, etc
  2.  
  3. ;; What definition formatting produces:
  4. ;;
  5. ;; \deffn category name args...
  6. ;;     In Info, `Category: name ARGS'
  7. ;;     In index: name:  node. line#.
  8. ;;
  9. ;; \defvr category name 
  10. ;;     In Info, `Category: name'
  11. ;;     In index: name:  node. line#.
  12. ;;
  13. ;; \deftp category name attributes...
  14. ;; `category name attributes...'       Note: \deftp args in lower case.
  15. ;;     In index: name:  node. line#.
  16. ;;
  17. ;; Specialized function-like or variable-like entity:
  18. ;;
  19. ;; \defun, \defmac, \defspec, \defvar, \defopt
  20. ;;
  21. ;; \defun name args           In Info, `Function: name ARGS'
  22. ;; \defmac name args          In Info, `Macro: name ARGS'
  23. ;; \defvar name               In Info, `Variable: name'
  24. ;; etc.
  25. ;;     In index: name:  node. line#.
  26. ;;
  27. ;; Generalized typed-function-like or typed-variable-like entity:
  28. ;; \deftypefn category data-type name args...
  29. ;;     In Info, `Category:  data-type name args...'
  30. ;; \deftypevr category data-type name 
  31. ;;     In Info, `Category:  data-type name'
  32. ;;     In index: name:  node. line#.
  33. ;;
  34. ;; Specialized typed-function-like or typed-variable-like entity:
  35. ;; \deftypefun data-type name args...
  36. ;;     In Info, `Function:  data-type name ARGS'
  37. ;;     In index: name:  node. line#.   
  38. ;;
  39. ;; \deftypevar data-type name 
  40. ;;     In Info, `Variable:  data-type name'
  41. ;;     In index: name:  node. line#.   but include args after name!?
  42. ;;
  43. ;; Generalized object oriented entity: 
  44. ;; \defop category class name args...
  45. ;;     In Info, `Category on class: name ARG'
  46. ;;     In index: name on class: node. line#.
  47. ;;
  48. ;; \defcv category class name         
  49. ;;     In Info, `Category of class: name'
  50. ;;     In index: name of class: node. line#.
  51. ;;
  52. ;; Specialized object oriented entity:
  53. ;; \defmethod class name args... 
  54. ;;     In Info, `Method on class: name ARGS'
  55. ;;     In index: name on class: node. line#.
  56. ;;
  57. ;; \defivar class name
  58. ;;     In Info, `Instance variable of class: name'
  59. ;;     In index: name of class: node. line#.
  60.  
  61.  
  62. ;;; The definition formatting functions
  63.  
  64. (defun latexinfo-format-defun ()
  65.   (latexinfo-push-stack 'defun nil)
  66.   (setq fill-column (- fill-column 5))
  67.   (latexinfo-format-defun-1 t))
  68.  
  69. (defun latexinfo-end-defun ()
  70.   (setq fill-column (+ fill-column 5))
  71.   (latexinfo-discard-command)
  72.   (let ((start (nth 1 (latexinfo-pop-stack 'defun))))
  73.     (latexinfo-do-itemize start)
  74.     ;; Delete extra newline inserted after header.
  75.     (save-excursion
  76.       (goto-char start)
  77.       (delete-char -1))))
  78.  
  79. (defun latexinfo-format-defunx ()
  80.   (latexinfo-format-defun-1 nil))
  81.  
  82. (defun latexinfo-format-defun-1 (first-p)
  83.   (let ((parse-args (latexinfo-format-parse-defun-args))
  84.     (command-type (get latexinfo-command-name 'latexinfo-defun-type)))
  85.     (latexinfo-discard-command)
  86.     ;; Delete extra newline inserted after previous header line.
  87.     (if (not first-p)
  88.     (delete-char -2))
  89.     (funcall
  90.      (get latexinfo-command-name 'latexinfo-deffn-formatting-property) parse-args)
  91.     ;; Insert extra newline so that paragraph filling does not mess
  92.     ;; with header line.
  93.     (insert "\n\n")
  94.     (rplaca (cdr (cdr (car latexinfo-stack))) (point))
  95.     (funcall
  96.      (get latexinfo-command-name 'latexinfo-defun-indexing-property) parse-args)))
  97.  
  98.  
  99. ;;; Formatting the first line of a definition
  100.  
  101. (defun latexinfo-format-parse-defun-args ()
  102.   (goto-char latexinfo-command-end)
  103.   (let ((start (point))
  104.     (nargs
  105.      (get latexinfo-command-name 'latexinfo-numargs)))
  106.     (if (not (integerp nargs))
  107.     (error "Unknown number of arguments to %s: %s"
  108.            latexinfo-command-name nargs))
  109.     (forward-list 1)            ; required arg 
  110.     (if (looking-at "[\\[]")        ; optional arg 
  111.     (delete-region (point)
  112.                (save-excursion
  113.              (forward-sexp 1) (point))))
  114.     (setq nargs (1- nargs))
  115.     (while (> nargs 0)
  116.       (skip-chars-forward " \t\n")
  117.       (if (looking-at "{")        ; required arg 
  118.       (forward-list 1)
  119.     (error "Argument %s missing from function" nargs))
  120.       (setq nargs (1- nargs)))
  121.     (setq latexinfo-command-end (point))
  122.     (let ((marker (move-marker (make-marker) latexinfo-command-end)))
  123.       (latexinfo-format-expand-region start (point))
  124.       (setq latexinfo-command-end (marker-position marker))
  125.       (move-marker marker nil))
  126.     (goto-char start)
  127.     (let ((args '())
  128.       beg end)
  129.       (skip-chars-forward " \t\n")
  130.       (while (< (point) latexinfo-command-end)
  131.     (cond ((looking-at "[{[]")
  132.            (setq beg (1+ (point)))
  133.            (forward-list 1)
  134.            (setq end (1- (point))))
  135.           (t
  136.            (setq beg (point))
  137.            (re-search-forward "[\n ]")
  138.            (forward-char -1)
  139.            (setq end (point))))
  140.     (if (> end (1+ beg))
  141.         (setq args 
  142.           (cons (buffer-substring beg end) args)))
  143.     (skip-chars-forward " \t\n"))
  144.       (nreverse args))))
  145.  
  146.  
  147. ;; \deffn, \defvr, \deftp
  148. (put 'deffn 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
  149. (put 'defvr 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
  150. (put 'deftp 'latexinfo-deffn-formatting-property 'latexinfo-format-deffn)
  151. (defun latexinfo-format-deffn (parsed-args)
  152.   ;; Generalized function-like, variable-like, or generic data-type entity:
  153.   ;; \deffn category name args...
  154.   ;;     In Info, `Category: name ARGS'
  155.   ;; \deftp category name attributes...
  156.   ;; `category name attributes...'       Note: \deftp args in lower case.
  157.   (let ((category (car parsed-args))
  158.         (name (car (cdr parsed-args)))
  159.         (args (cdr (cdr parsed-args))))
  160.     (if (not (looking-at "\n")) (insert "\n"))
  161.     (insert " -- " category ": " name)
  162.     (while args
  163.       (insert " "
  164.               (if (or (= ?& (aref (car args) 0))
  165.                       (eq (eval (car command-type)) 'deftp-type))
  166.                   (car args)
  167.                 (upcase (car args))))
  168.       (setq args (cdr args)))))
  169.  
  170. ;; \defun, \defmac, \defspec, \defvar, \defopt: Specialized, simple
  171. (put 'defun 'latexinfo-deffn-formatting-property
  172.      'latexinfo-format-specialized-defun)
  173. (put 'defmac 'latexinfo-deffn-formatting-property
  174.      'latexinfo-format-specialized-defun)
  175. (put 'defspec 'latexinfo-deffn-formatting-property
  176.      'latexinfo-format-specialized-defun)
  177. (put 'defvar 'latexinfo-deffn-formatting-property
  178.      'latexinfo-format-specialized-defun)
  179. (put 'defopt 'latexinfo-deffn-formatting-property
  180.      'latexinfo-format-specialized-defun)
  181. (defun latexinfo-format-specialized-defun (parsed-args)
  182.   ;; Specialized function-like or variable-like entity:
  183.   ;; \defun{name}{args}           In Info, `Function: Name ARGS'
  184.   ;; \defmac{name}{args}          In Info, `Macro: Name ARGS'
  185.   ;; \defvar{name}               In Info, `Variable: Name'
  186.   ;; Use cdr of command-type to determine category:
  187.   (let ((category (car (cdr command-type)))
  188.         (name (car parsed-args))
  189.         (args (cdr parsed-args)))
  190.     (if (not (looking-at "\n")) (insert "\n"))
  191.     (insert " -- " category ": " name)
  192.     (while args
  193.       (insert " "
  194.               (if (= ?& (aref (car args) 0))
  195.                   (car args)
  196.                 (upcase (car args)))
  197.           "\n")
  198.       (setq args (cdr args)))))
  199.  
  200. ;; \deftypefn, \deftypevr: Generalized typed
  201. (put 'deftypefn 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefn)
  202. (put 'deftypevr 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefn)
  203. (defun latexinfo-format-deftypefn (parsed-args)
  204.   ;; Generalized typed-function-like or typed-variable-like entity:
  205.   ;; \deftypefn category data-type name args...
  206.   ;;     In Info, `Category:  data-type name args...'
  207.   ;; \deftypevr category data-type name 
  208.   ;;     In Info, `Category:  data-type name'
  209.   ;; Note: args in lower case, unless modified in command line.
  210.   (let ((category (car parsed-args))
  211.         (data-type (car (cdr parsed-args)))
  212.         (name (car (cdr (cdr parsed-args))))
  213.         (args (cdr (cdr (cdr parsed-args)))))
  214.     (if (not (looking-at "\n")) (insert "\n"))
  215.     (if (null (and category data-type name))
  216.     (error "Null arg: %s %s %s" category data-type name)
  217.       (insert " -- " category ": " data-type " " name))
  218.     (while args
  219.       (insert " " (car args))
  220.       (setq args (cdr args)))))
  221.  
  222. ;; \deftypefun, \deftypevar: Specialized typed
  223. (put 'deftypefun 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefun)
  224. (put 'deftypevar 'latexinfo-deffn-formatting-property 'latexinfo-format-deftypefun)
  225. (defun latexinfo-format-deftypefun (parsed-args)
  226.   ;; Specialized typed-function-like or typed-variable-like entity:
  227.   ;; \deftypefun data-type name args...
  228.   ;;     In Info, `Function:  data-type name ARGS'
  229.   ;; \deftypevar data-type name 
  230.   ;;     In Info, `Variable:  data-type name'
  231.   ;; Note: args in lower case, unless modified in command line.
  232.   ;; Use cdr of command-type to determine category:
  233.   (let ((category (car (cdr command-type)))
  234.         (data-type (car parsed-args))
  235.         (name (car (cdr  parsed-args)))
  236.         (args (cdr (cdr parsed-args))))
  237.     (if (not (looking-at "\n")) (insert "\n"))
  238.     (if (null (and category data-type name))
  239.     (error "Null arg: %s %s %s" category data-type name)
  240.       (insert " -- " category ": " data-type " " name))
  241.     (while args
  242.       (insert " " (car args))
  243.       (setq args (cdr args)))))
  244.  
  245. ;; \defop: Generalized object-oriented
  246. (put 'defop 'latexinfo-deffn-formatting-property 'latexinfo-format-defop)
  247. (defun latexinfo-format-defop (parsed-args)
  248.   ;; Generalized object oriented entity: 
  249.   ;; \defop category class name args...
  250.   ;;     In Info, `Category on class: name ARG'
  251.   ;; Note: args in upper case; use of `on'
  252.   (let ((category (car parsed-args))
  253.         (class (car (cdr parsed-args)))
  254.         (name (car (cdr (cdr parsed-args))))
  255.         (args (cdr (cdr (cdr parsed-args)))))
  256.     (if (not (looking-at "\n")) (insert "\n"))
  257.     (if (null (and category data-type name))
  258.     (error "Null arg: %s %s %s" category class name)
  259.       (insert " -- " category " on " class ": " name))
  260.     (while args
  261.       (insert " " (upcase (car args)))
  262.       (setq args (cdr args)))))
  263.  
  264. ;; \defcv: Generalized object-oriented
  265. (put 'defcv 'latexinfo-deffn-formatting-property 'latexinfo-format-defcv)
  266. (defun latexinfo-format-defcv (parsed-args)
  267.   ;; Generalized object oriented entity: 
  268.   ;; \defcv category class name         
  269.   ;;     In Info, `Category of class: name'
  270.   ;; Note: args in upper case; use of `of'
  271.   (let ((category (car parsed-args))
  272.         (class (car (cdr parsed-args)))
  273.         (name (car (cdr (cdr parsed-args))))
  274.         (args (cdr (cdr (cdr parsed-args)))))
  275.     (if (not (looking-at "\n")) (insert "\n"))
  276.     (if (null (and category data-type name))
  277.     (error "Null arg: %s %s %s" category class name)
  278.       (insert " -- " category " of " class ": " name))
  279.     (while args
  280.       (insert " " (upcase (car args)))
  281.       (setq args (cdr args)))))
  282.  
  283. ;; \defmethod: Specialized object-oriented
  284. (put 'defmethod 'latexinfo-deffn-formatting-property 'latexinfo-format-defmethod)
  285. (defun latexinfo-format-defmethod (parsed-args)
  286.   ;; Specialized object oriented entity:
  287.   ;; \defmethod class name args... 
  288.   ;;     In Info, `Method on class: name ARGS'
  289.   ;; Note: args in upper case; use of `on'
  290.   ;; Use cdr of command-type to determine category:
  291.   (let ((category (car (cdr command-type)))
  292.         (class (car parsed-args))
  293.         (name (car (cdr  parsed-args)))
  294.         (args (cdr  (cdr parsed-args))))
  295.     (if (not (looking-at "\n")) (insert "\n"))
  296.     (if (null (and category data-type name))
  297.     (error "Null arg: %s %s %s" category class name)
  298.       (insert " -- " category " on " class ": " name))
  299.     (while args
  300.       (insert " " (upcase (car args)))
  301.       (setq args (cdr args)))))
  302.  
  303. ;; \defivar: Specialized object-oriented
  304. (put 'defivar 'latexinfo-deffn-formatting-property 'latexinfo-format-defivar)
  305. (defun latexinfo-format-defivar (parsed-args)
  306.   ;; Specialized object oriented entity:
  307.   ;; \defivar class name
  308.   ;;     In Info, `Instance variable of class: name'
  309.   ;; Note: args in upper case; use of `of'
  310.   ;; Use cdr of command-type to determine category:
  311.   (let ((category (car (cdr command-type)))
  312.         (class (car parsed-args))
  313.         (name (car (cdr  parsed-args)))
  314.         (args (cdr  (cdr parsed-args))))
  315.     (if (not (looking-at "\n")) (insert "\n"))
  316.     (if (null (and category data-type name))
  317.     (error "Null arg: %s %s %s" category class name)
  318.       (insert " -- " category " of " class ": " name))
  319.     (while args
  320.       (insert " " (upcase (car args)))
  321.       (setq args (cdr args)))))
  322.  
  323.  
  324. ;;; Indexing for definitions
  325.  
  326. ;; An index entry has three parts: the `entry proper', the node name, and the
  327. ;; line number.  Depending on the which command is used, the entry is
  328. ;; formatted differently:
  329. ;;
  330. ;; \defun, 
  331. ;; \defmac, 
  332. ;; \defspec, 
  333. ;; \defvar, 
  334. ;; \defopt          all use their 1st argument as the entry-proper 
  335. ;;
  336. ;; \deffn, 
  337. ;; \defvr, 
  338. ;; \deftp 
  339. ;; \deftypefun
  340. ;; \deftypevar      all use their 2nd argument as the entry-proper
  341. ;;
  342. ;; \deftypefn, 
  343. ;; \deftypevr       both use their 3rd argument as the entry-proper  
  344. ;;
  345. ;; \defmethod       uses its 2nd and 1st arguments as an entry-proper 
  346. ;;                    formatted: NAME on CLASS
  347.  
  348. ;; \defop           uses its 3rd and 2nd arguments as an entry-proper 
  349. ;;                    formatted: NAME on CLASS
  350. ;;        
  351. ;; \defivar         uses its 2nd and 1st arguments as an entry-proper
  352. ;;                    formatted: NAME of CLASS
  353. ;;
  354. ;; \defcv           uses its 3rd and 2nd argument as an entry-proper
  355. ;;                    formatted: NAME of CLASS
  356.  
  357. (put 'defun 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  358. (put 'defun 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  359. (put 'defmac 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  360. (put 'defspec 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  361. (put 'defvar 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  362. (put 'defopt  'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  363.  
  364. (defun latexinfo-index-defun (parsed-args)
  365.   ;; use 1st parsed-arg  as entry-proper
  366.   ;; `index-list' will be latexinfo-findex or the like
  367.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  368.     (set index-list
  369.          (cons 
  370.           ;; Three elements: entry-proper, node-name, line-number
  371.           (list
  372.            (car parsed-args)
  373.            latexinfo-last-node
  374.            ;; Region formatting may not provide last node position.
  375.            (if latexinfo-last-node-pos
  376.                (1+ (count-lines latexinfo-last-node-pos (point)))
  377.              1))
  378.           (symbol-value index-list)))))
  379.  
  380. (put 'deffn 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
  381. (put 'defvr 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
  382. (put 'deftp 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
  383. (put 'deftypefun 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
  384. (put 'deftypevar 'latexinfo-defun-indexing-property 'latexinfo-index-deffn)
  385. (defun latexinfo-index-deffn (parsed-args) 
  386.  ;; use 2nd parsed-arg  as entry-proper
  387.   ;; `index-list' will be latexinfo-findex or the like
  388.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  389.     (set index-list
  390.          (cons 
  391.           ;; Three elements: entry-proper, node-name, line-number
  392.           (list
  393.            (car (cdr parsed-args))
  394.            latexinfo-last-node
  395.            ;; Region formatting may not provide last node position.
  396.            (if latexinfo-last-node-pos
  397.                (1+ (count-lines latexinfo-last-node-pos (point)))
  398.              1))
  399.           (symbol-value index-list)))))
  400.  
  401. (put 'deftypefn 'latexinfo-defun-indexing-property 'latexinfo-index-deftypefn)
  402. (put 'deftypevr 'latexinfo-defun-indexing-property 'latexinfo-index-deftypefn)
  403. (defun latexinfo-index-deftypefn (parsed-args)
  404.   ;; use 3rd parsed-arg  as entry-proper
  405.   ;; `index-list' will be latexinfo-findex or the like
  406.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  407.     (set index-list
  408.          (cons 
  409.           ;; Three elements: entry-proper, node-name, line-number
  410.           (list
  411.            (car (cdr (cdr parsed-args)))
  412.            latexinfo-last-node
  413.            ;; Region formatting may not provide last node position.
  414.            (if latexinfo-last-node-pos
  415.                (1+ (count-lines latexinfo-last-node-pos (point)))
  416.              1))
  417.           (symbol-value index-list)))))
  418.  
  419. (put 'defmethod 'latexinfo-defun-indexing-property 'latexinfo-index-defmethod)
  420. (defun latexinfo-index-defmethod (parsed-args)
  421.   ;; use 2nd on 1st parsed-arg  as entry-proper
  422.   ;; `index-list' will be latexinfo-findex or the like
  423.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  424.     (set index-list
  425.          (cons 
  426.           ;; Three elements: entry-proper, node-name, line-number
  427.           (list
  428.            (format "%s on %s"            
  429.                    (car (cdr parsed-args))
  430.                    (car parsed-args))
  431.            latexinfo-last-node
  432.            ;; Region formatting may not provide last node position.
  433.            (if latexinfo-last-node-pos
  434.                (1+ (count-lines latexinfo-last-node-pos (point)))
  435.              1))
  436.           (symbol-value index-list)))))
  437.  
  438. (put 'defop 'latexinfo-defun-indexing-property 'latexinfo-index-defop)
  439. (defun latexinfo-index-defop (parsed-args)
  440.   ;; use 3rd on 2nd parsed-arg  as entry-proper
  441.   ;; `index-list' will be latexinfo-findex or the like
  442.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  443.     (set index-list
  444.          (cons 
  445.           ;; Three elements: entry-proper, node-name, line-number
  446.           (list
  447.            (format "%s on %s"            
  448.                    (car (cdr (cdr parsed-args)))
  449.                    (car (cdr parsed-args)))
  450.            latexinfo-last-node
  451.            ;; Region formatting may not provide last node position.
  452.            (if latexinfo-last-node-pos
  453.                (1+ (count-lines latexinfo-last-node-pos (point)))
  454.              1))
  455.           (symbol-value index-list)))))
  456.  
  457. (put 'defivar 'latexinfo-defun-indexing-property 'latexinfo-index-defivar)
  458. (defun latexinfo-index-defivar (parsed-args)
  459.   ;; use 2nd of 1st parsed-arg  as entry-proper
  460.   ;; `index-list' will be latexinfo-findex or the like
  461.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  462.     (set index-list
  463.          (cons 
  464.           ;; Three elements: entry-proper, node-name, line-number
  465.           (list
  466.            (format "%s of %s"            
  467.                    (car (cdr parsed-args))
  468.                    (car parsed-args))
  469.            latexinfo-last-node
  470.            ;; Region formatting may not provide last node position.
  471.            (if latexinfo-last-node-pos
  472.                (1+ (count-lines latexinfo-last-node-pos (point)))
  473.              1))
  474.           (symbol-value index-list)))))
  475.  
  476. (put 'defcv 'latexinfo-defun-indexing-property 'latexinfo-index-defcv)
  477. (defun latexinfo-index-defcv (parsed-args)
  478.   ;; use 3rd of 2nd parsed-arg  as entry-proper
  479.   ;; `index-list' will be latexinfo-findex or the like
  480.   (let ((index-list (get latexinfo-command-name 'latexinfo-defun-index)))
  481.     (set index-list
  482.          (cons 
  483.           ;; Three elements: entry-proper, node-name, line-number
  484.           (list
  485.            (format "%s of %s"            
  486.                    (car (cdr (cdr parsed-args)))
  487.                    (car (cdr parsed-args)))
  488.            latexinfo-last-node
  489.            ;; Region formatting may not provide last node position.
  490.            (if latexinfo-last-node-pos
  491.                (1+ (count-lines latexinfo-last-node-pos (point)))
  492.              1))
  493.           (symbol-value index-list)))))
  494.  
  495.  
  496. ;;; Properties for definitions
  497.  
  498. ;; Each primary definition command has six properties:
  499. ;;
  500. ;; 1. latexinfo-deffn-formatting-property      to format definition line
  501. ;; 2. latexinfo-defun-indexing-property        to create index entry
  502. ;; 3. latexinfo-format                         formatting command
  503. ;; 4. latexinfo-end                            end formatting command
  504. ;; 5. latexinfo-defun-type                     type of deffn to format
  505. ;; 6. latexinfo-defun-index                    type of index to use
  506. ;;
  507. ;; In addition, the `x' forms of each definition command have three
  508. ;; properties.
  509.  
  510. ;; The latexinfo-deffn-formatting-property and latexinfo-defun-indexing-property
  511. ;; are listed just before the appropriate formatting and indexing commands.
  512.  
  513. (put 'deffn 'latexinfo-format 'latexinfo-format-defun)
  514. (put 'deffnx 'latexinfo-format 'latexinfo-format-defunx)
  515. (put 'deffn 'latexinfo-end 'latexinfo-end-defun)
  516. (put 'enddeffn 'latexinfo-format 'latexinfo-end-defun)
  517. (put 'deffn 'latexinfo-defun-type '('deffn-type nil))
  518. (put 'deffnx 'latexinfo-defun-type '('deffn-type nil))
  519. (put 'deffn 'latexinfo-defun-index 'latexinfo-findex)
  520. (put 'deffnx 'latexinfo-defun-index 'latexinfo-findex)
  521.  
  522. (put 'defun 'latexinfo-format 'latexinfo-format-defun)
  523. (put 'defunx 'latexinfo-format 'latexinfo-format-defunx)
  524. (put 'enddefun 'latexinfo-format 'latexinfo-end-defun)
  525. (put 'defun 'latexinfo-end 'latexinfo-end-defun)
  526. (put 'defun 'latexinfo-defun-type '('defun-type "Function"))
  527. (put 'defunx 'latexinfo-defun-type '('defun-type "Function"))
  528. (put 'defun 'latexinfo-defun-index 'latexinfo-findex)
  529. (put 'defunx 'latexinfo-defun-index 'latexinfo-findex)
  530.  
  531. (put 'defmac 'latexinfo-format 'latexinfo-format-defun)
  532. (put 'defmacx 'latexinfo-format 'latexinfo-format-defunx)
  533. (put 'defmac 'latexinfo-end 'latexinfo-end-defun)
  534. (put 'enddefmac 'latexinfo-format 'latexinfo-end-defun)
  535. (put 'defmac 'latexinfo-defun-type '('defun-type "Macro"))
  536. (put 'defmacx 'latexinfo-defun-type '('defun-type "Macro"))
  537. (put 'defmac 'latexinfo-defun-index 'latexinfo-findex)
  538. (put 'defmacx 'latexinfo-defun-index 'latexinfo-findex)
  539.  
  540. (put 'defspec 'latexinfo-format 'latexinfo-format-defun)
  541. (put 'defspecx 'latexinfo-format 'latexinfo-format-defunx)
  542. (put 'defspec 'latexinfo-end 'latexinfo-end-defun)
  543. (put 'enddefspec 'latexinfo-format 'latexinfo-end-defun)
  544. (put 'defspec 'latexinfo-defun-type '('defun-type "Special form"))
  545. (put 'defspecx 'latexinfo-defun-type '('defun-type "Special form"))
  546. (put 'defspec 'latexinfo-defun-index 'latexinfo-findex)
  547. (put 'defspecx 'latexinfo-defun-index 'latexinfo-findex)
  548.  
  549. (put 'defvr 'latexinfo-format 'latexinfo-format-defun)
  550. (put 'defvrx 'latexinfo-format 'latexinfo-format-defunx)
  551. (put 'defvr 'latexinfo-end 'latexinfo-end-defun)
  552. (put 'enddefvr 'latexinfo-format 'latexinfo-end-defun)
  553. (put 'defvr 'latexinfo-defun-type '('deffn-type nil))
  554. (put 'defvrx 'latexinfo-defun-type '('deffn-type nil))
  555. (put 'defvr 'latexinfo-defun-index 'latexinfo-vindex)
  556. (put 'defvrx 'latexinfo-defun-index 'latexinfo-vindex)
  557.  
  558. (put 'defvar 'latexinfo-format 'latexinfo-format-defun)
  559. (put 'defvarx 'latexinfo-format 'latexinfo-format-defunx)
  560. (put 'defvar 'latexinfo-end 'latexinfo-end-defun)
  561. (put 'enddefvar 'latexinfo-format 'latexinfo-end-defun)
  562. (put 'defvar 'latexinfo-defun-type '('defun-type "Variable"))
  563. (put 'defvarx 'latexinfo-defun-type '('defun-type "Variable"))
  564. (put 'defvar 'latexinfo-defun-index 'latexinfo-vindex)
  565. (put 'defvarx 'latexinfo-defun-index 'latexinfo-vindex)
  566.  
  567. (put 'defopt 'latexinfo-format 'latexinfo-format-defun)
  568. (put 'defoptx 'latexinfo-format 'latexinfo-format-defunx)
  569. (put 'defopt 'latexinfo-end 'latexinfo-end-defun)
  570. (put 'enddefopt 'latexinfo-format 'latexinfo-end-defun)
  571. (put 'defopt 'latexinfo-defun-type '('defun-type "User Option"))
  572. (put 'defoptx 'latexinfo-defun-type '('defun-type "User Option"))
  573. (put 'defopt 'latexinfo-defun-index 'latexinfo-vindex)
  574. (put 'defoptx 'latexinfo-defun-index 'latexinfo-vindex)
  575.  
  576. (put 'deftp 'latexinfo-format 'latexinfo-format-defun)
  577. (put 'deftpx 'latexinfo-format 'latexinfo-format-defunx)
  578. (put 'deftp 'latexinfo-end 'latexinfo-end-defun)
  579. (put 'enddeftp 'latexinfo-format 'latexinfo-end-defun)
  580. (put 'deftp 'latexinfo-defun-type '('deftp-type nil))
  581. (put 'deftpx 'latexinfo-defun-type '('deftp-type nil))
  582. (put 'deftp 'latexinfo-defun-index 'latexinfo-tindex)
  583. (put 'deftpx 'latexinfo-defun-index 'latexinfo-tindex)
  584.  
  585. ;;; Object-oriented stuff is a little hairier.
  586.  
  587. (put 'defop 'latexinfo-format 'latexinfo-format-defun)
  588. (put 'defopx 'latexinfo-format 'latexinfo-format-defunx)
  589. (put 'defop 'latexinfo-end 'latexinfo-end-defun)
  590. (put 'enddefop 'latexinfo-format 'latexinfo-end-defun)
  591. (put 'defop 'latexinfo-defun-type '('defop-type nil))
  592. (put 'defopx 'latexinfo-defun-type '('defop-type nil))
  593. (put 'defop 'latexinfo-defun-index 'latexinfo-findex)
  594. (put 'defopx 'latexinfo-defun-index 'latexinfo-findex)
  595.  
  596. (put 'defmethod 'latexinfo-format 'latexinfo-format-defun)
  597. (put 'defmethodx 'latexinfo-format 'latexinfo-format-defunx)
  598. (put 'defmethod 'latexinfo-end 'latexinfo-end-defun)
  599. (put 'enddefmethod 'latexinfo-format 'latexinfo-end-defun)
  600. (put 'defmethod 'latexinfo-defun-type '('defmethod-type "Method"))
  601. (put 'defmethodx 'latexinfo-defun-type '('defmethod-type "Method"))
  602. (put 'defmethod 'latexinfo-defun-index 'latexinfo-findex)
  603. (put 'defmethodx 'latexinfo-defun-index 'latexinfo-findex)
  604.  
  605. (put 'defcv 'latexinfo-format 'latexinfo-format-defun)
  606. (put 'defcvx 'latexinfo-format 'latexinfo-format-defunx)
  607. (put 'defcv 'latexinfo-end 'latexinfo-end-defun)
  608. (put 'enddefcv 'latexinfo-format 'latexinfo-end-defun)
  609. (put 'defcv 'latexinfo-defun-type '('defop-type nil))
  610. (put 'defcvx 'latexinfo-defun-type '('defop-type nil))
  611. (put 'defcv 'latexinfo-defun-index 'latexinfo-vindex)
  612. (put 'defcvx 'latexinfo-defun-index 'latexinfo-vindex)
  613.  
  614. (put 'defivar 'latexinfo-format 'latexinfo-format-defun)
  615. (put 'defivarx 'latexinfo-format 'latexinfo-format-defunx)
  616. (put 'defivar 'latexinfo-end 'latexinfo-end-defun)
  617. (put 'enddefivar 'latexinfo-format 'latexinfo-end-defun)
  618. (put 'defivar 'latexinfo-defun-type '('defmethod-type "Instance variable"))
  619. (put 'defivarx 'latexinfo-defun-type '('defmethod-type "Instance variable"))
  620. (put 'defivar 'latexinfo-defun-index 'latexinfo-vindex)
  621. (put 'defivarx 'latexinfo-defun-index 'latexinfo-vindex)
  622.  
  623. ;;; Typed functions and variables
  624.  
  625. (put 'deftypefn 'latexinfo-format 'latexinfo-format-defun)
  626. (put 'deftypefnx 'latexinfo-format 'latexinfo-format-defunx)
  627. (put 'deftypefn 'latexinfo-end 'latexinfo-end-defun)
  628. (put 'enddeftypefn 'latexinfo-format 'latexinfo-end-defun)
  629. (put 'deftypefn 'latexinfo-defun-type '('deftypefn-type nil))
  630. (put 'deftypefnx 'latexinfo-defun-type '('deftypefn-type nil))
  631. (put 'deftypefn 'latexinfo-defun-index 'latexinfo-findex)
  632. (put 'deftypefnx 'latexinfo-defun-index 'latexinfo-findex)
  633.  
  634. (put 'deftypefun 'latexinfo-format 'latexinfo-format-defun)
  635. (put 'deftypefunx 'latexinfo-format 'latexinfo-format-defunx)
  636. (put 'deftypefun 'latexinfo-end 'latexinfo-end-defun)
  637. (put 'enddeftypefun 'latexinfo-format 'latexinfo-end-defun)
  638. (put 'deftypefun 'latexinfo-defun-type '('deftypefun-type "Function"))
  639. (put 'deftypefunx 'latexinfo-defun-type '('deftypefun-type "Function"))
  640. (put 'deftypefun 'latexinfo-defun-index 'latexinfo-findex)
  641. (put 'deftypefunx 'latexinfo-defun-index 'latexinfo-findex)
  642.  
  643. (put 'deftypevr 'latexinfo-format 'latexinfo-format-defun)
  644. (put 'deftypevrx 'latexinfo-format 'latexinfo-format-defunx)
  645. (put 'deftypevr 'latexinfo-end 'latexinfo-end-defun)
  646. (put 'enddeftypevr 'latexinfo-format 'latexinfo-end-defun)
  647. (put 'deftypevr 'latexinfo-defun-type '('deftypefn-type nil))
  648. (put 'deftypevrx 'latexinfo-defun-type '('deftypefn-type nil))
  649. (put 'deftypevr 'latexinfo-defun-index 'latexinfo-vindex)
  650. (put 'deftypevrx 'latexinfo-defun-index 'latexinfo-vindex)
  651.  
  652. (put 'deftypevar 'latexinfo-format 'latexinfo-format-defun)
  653. (put 'deftypevarx 'latexinfo-format 'latexinfo-format-defunx)
  654. (put 'deftypevar 'latexinfo-end 'latexinfo-end-defun)
  655. (put 'enddeftypevar 'latexinfo-format 'latexinfo-end-defun)
  656. (put 'deftypevar 'latexinfo-defun-type '('deftypevar-type "Variable"))
  657. (put 'deftypevarx 'latexinfo-defun-type '('deftypevar-type "Variable"))
  658. (put 'deftypevar 'latexinfo-defun-index 'latexinfo-vindex)
  659. (put 'deftypevarx 'latexinfo-defun-index 'latexinfo-vindex)
  660.  
  661. (put 'defunx 'latexinfo-deffn-formatting-property
  662.      'latexinfo-format-specialized-defun)
  663. (put 'defmacx 'latexinfo-deffn-formatting-property
  664.      'latexinfo-format-specialized-defun)
  665. (put 'defspecx 'latexinfo-deffn-formatting-property
  666.      'latexinfo-format-specialized-defun)
  667. (put 'defvarx 'latexinfo-deffn-formatting-property
  668.      'latexinfo-format-specialized-defun)
  669. (put 'defoptx 'latexinfo-deffn-formatting-property
  670.      'latexinfo-format-specialized-defun)
  671.  
  672. (put 'defunx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  673. (put 'defmacx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  674. (put 'defspecx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  675. (put 'defvarx 'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  676. (put 'defoptx  'latexinfo-defun-indexing-property 'latexinfo-index-defun)
  677.  
  678. ;; Number of arguments
  679. (put 'deffn 'latexinfo-numargs 3)
  680. (put 'deffnx 'latexinfo-numargs 3)
  681. (put 'defun 'latexinfo-numargs 2)
  682. (put 'defunx 'latexinfo-numargs 2)
  683. (put 'defmac 'latexinfo-numargs 2)
  684. (put 'defmacx 'latexinfo-numargs 2)
  685. (put 'defspec 'latexinfo-numargs 2)
  686. (put 'defspecx 'latexinfo-numargs 2)
  687. (put 'defvr 'latexinfo-numargs 2)
  688. (put 'defvrx 'latexinfo-numargs 2)
  689. (put 'defvar 'latexinfo-numargs 1)
  690. (put 'defvarx 'latexinfo-numargs 1)
  691. (put 'defopt 'latexinfo-numargs 1)
  692. (put 'defoptx 'latexinfo-numargs 1)
  693. (put 'deftp 'latexinfo-numargs 3)
  694. (put 'deftpx 'latexinfo-numargs 3)
  695. (put 'defop 'latexinfo-numargs 4)
  696. (put 'defopx 'latexinfo-numargs 4)
  697. (put 'defmethod 'latexinfo-numargs 3)
  698. (put 'defmethodx 'latexinfo-numargs 3)
  699. (put 'defcv 'latexinfo-numargs 3)
  700. (put 'defcvx 'latexinfo-numargs 3)
  701. (put 'defivar 'latexinfo-numargs 2)
  702. (put 'defivarx 'latexinfo-numargs 2)
  703. (put 'deftypefn 'latexinfo-numargs 4)
  704. (put 'deftypefnx 'latexinfo-numargs 4)
  705. (put 'deftypefun 'latexinfo-numargs 3)
  706. (put 'deftypefunx 'latexinfo-numargs 3)
  707. (put 'deftypevr 'latexinfo-numargs 3)
  708. (put 'deftypevrx 'latexinfo-numargs 3)
  709. (put 'deftypevar 'latexinfo-numargs 2)
  710. (put 'deftypevarx 'latexinfo-numargs 2)
  711.  
  712. (provide 'elisp-fmt)
  713.