+(defun generate-texinfo-for-struct (class stream)
+ (when (symbolp class) (setf class (find-class class)))
+ (format stream "@node ~A~%" (string-downcase (symbol-name (class-name class))))
+ (format stream "@subsection ~A~%"(string-downcase (symbol-name (class-name class))))
+ (format stream "@Class ~A~%~%" (string-downcase (symbol-name (class-name class))))
+ (format stream "Superclasses: ~{~A~^, ~}~%~%" (mapcar #'texi-ref (class-direct-superclasses class)))
+ (format stream "Subclasses: ")
+ (if (class-direct-subclasses class)
+ (format stream "~{~A~^, ~}~%~%" (mapcar #'texi-ref (class-direct-subclasses class)))
+ (format stream "None~%~%"))
+ (format stream "Slots:~%")
+ (let ((slots (sort (copy-list (class-direct-slots class)) #'string< :key #'slot-definition-name)))
+ (if (null slots)
+ (format stream "None~%~%")
+ (progn
+ (format stream "@itemize~%")
+ (iter (for slot in slots)
+ (generate-texinfo-for-slot class slot stream))
+ (format stream "@end itemize~%")))))
+
+(defun generate-texinfo-for-opaque-boxed (class stream)
+ (when (symbolp class) (setf class (find-class class)))
+ (format stream "@node ~A~%" (string-downcase (symbol-name (class-name class))))
+ (format stream "@subsection ~A~%"(string-downcase (symbol-name (class-name class))))
+ (format stream "@Class ~A~%~%" (string-downcase (symbol-name (class-name class))))
+ (format stream "Superclasses: ~{~A~^, ~}~%~%" (mapcar #'texi-ref (class-direct-superclasses class)))
+ (format stream "Slots:~%")
+ (let ((slots (sort (copy-list (class-direct-slots class)) #'string< :key #'slot-definition-name)))
+ (if (null slots)
+ (format stream "None~%~%")
+ (progn
+ (format stream "@itemize~%")
+ (iter (for slot in slots)
+ (generate-texinfo-for-slot class slot stream))
+ (format stream "@end itemize~%")))))
+