* mixi-ja.texi: New file.
authorbg66 <bg66>
Sun, 21 Oct 2007 01:55:15 +0000 (01:55 +0000)
committerbg66 <bg66>
Sun, 21 Oct 2007 01:55:15 +0000 (01:55 +0000)
* infohack.el: Ditto.
* ptexinfmt.el: Ditto.
* Makefile.am (EXTRA_DIST): Add texinfo files.
(info_TEXINFOS): New variable.
(install): Depend install-info.
(install-package): Make info file.
(%.info): New rule.

.cvsignore
ChangeLog
Makefile.am
infohack.el [new file with mode: 0644]
mixi-ja.texi [new file with mode: 0755]
ptexinfmt.el [new file with mode: 0644]

index 4529f65..25e8a68 100644 (file)
@@ -12,3 +12,8 @@ config.cache
 COPYING
 INSTALL
 COMPILE
+texinfo.tex
+*.info*
+mdate-sh
+stamp-vti
+version.texi
index 425faad..71fc05a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2007-10-21  OHASHI Akira  <bg66@koka-in.org>
+
+       * mixi-ja.texi: New file.
+       * infohack.el: Ditto.
+       * ptexinfmt.el: Ditto.
+       * Makefile.am (EXTRA_DIST): Add texinfo files.
+       (info_TEXINFOS): New variable.
+       (install): Depend install-info.
+       (install-package): Make info file.
+       (%.info): New rule.
+
 2007-10-18  OHASHI Akira  <bg66@koka-in.org>
 
        * mixi-atom.el: Fix expressions of the copyright notices.
index 135a52a..999e190 100644 (file)
@@ -1,9 +1,12 @@
 CONTRIB = contrib/atom.cgi contrib/atom.sh
-EXTRA_DIST = INSTALL-CVS ChangeLog @MODULES_ALL@ $(CONTRIB)
+EXTRA_DIST = INSTALL-CVS ChangeLog @MODULES_ALL@ $(CONTRIB) \
+       infohack.el ptexinfmt.el texinfo.tex
 CLEANFILES = auto-autoloads.el custom-load.el *.elc
 DISTCLEANFILES = COMPILE
 AUTOMAKE_OPTIONS = no-dependencies
 
+info_TEXINFOS = mixi-ja.texi
+
 FLAGS ?= -batch -q -no-site-file
 
 all: elc
@@ -11,7 +14,7 @@ all: elc
 elc:
        $(EMACS) $(FLAGS) -l COMPILE -f mixi-compile
 
-install: elc
+install: elc install-info
        $(EMACS) $(FLAGS) -l COMPILE -f mixi-install $(lispdir)
 
 package:
@@ -19,6 +22,7 @@ package:
 
 install-package: package
        $(XEMACS) $(FLAGS) -l COMPILE -f mixi-install-package $(PACKAGEDIR)
+       $(MAKE) infodir=$(PACKAGEDIR)/info install
 
 compile-individually:
        @for i in `$(EMACS) $(FLAGS) -l COMPILE -f mixi-examine`; do \
@@ -27,3 +31,6 @@ compile-individually:
                $(EMACS) $(FLAGS) -l COMPILE \
                        -f mixi-compile-module $$i; \
        done
+
+%.info: %.texi
+       $(EMACS) $(FLAGS) -l ./infohack.el -f batch-makeinfo $<
diff --git a/infohack.el b/infohack.el
new file mode 100644 (file)
index 0000000..9b4af97
--- /dev/null
@@ -0,0 +1,177 @@
+;;; infohack.el --- a hack to format info file.
+;; Copyright (C)  2001  Free Software Foundation, Inc.
+
+;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
+;; Keywords: info
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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, or (at your option)
+;; any later version.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+;(let ((default-directory (expand-file-name "../lisp/"))
+;      (features (cons 'w3-forms (copy-sequence features))))
+;  ;; Adjust `load-path' for APEL.
+;  (load-file "dgnushack.el"))
+(load-file (expand-file-name "ptexinfmt.el" "./"))
+
+(defun infohack-remove-unsupported ()
+  (goto-char (point-min))
+  (while (re-search-forward "@\\(end \\)?ifnottex" nil t)
+    (replace-match ""))
+  (goto-char (point-min))
+  (while (search-forward "\n@iflatex\n" nil t)
+    (delete-region (1+ (match-beginning 0))
+                  (search-forward "\n@end iflatex\n"))))
+
+(defun infohack (file)
+  (let ((dest-directory default-directory)
+       (max-lisp-eval-depth (max max-lisp-eval-depth 600))
+       coding-system)
+    (find-file file)
+    (setq buffer-read-only nil)
+    (setq coding-system (if (boundp 'buffer-file-coding-system)
+                           buffer-file-coding-system
+                         file-coding-system))
+    (infohack-remove-unsupported)
+    (texinfo-every-node-update)
+    (texinfo-format-buffer t) ;; Don't save any file.
+    (setq default-directory dest-directory)
+    (setq buffer-file-name
+         (expand-file-name (file-name-nondirectory buffer-file-name)
+                           default-directory))
+    (setq buffer-file-coding-system coding-system
+         file-coding-system coding-system)
+    (if (> (buffer-size) 100000)
+       (Info-split))
+    (save-buffer)))
+
+(eval-and-compile
+  (when (string-match "windows-nt\\|os/2\\|emx\\|cygwin"
+                      (symbol-name system-type))
+    (defun subst-char-in-region (START END FROMCHAR TOCHAR &optional NOUNDO)
+      "From START to END, replace FROMCHAR with TOCHAR each time it occurs.
+If optional arg NOUNDO is non-nil, don't record this change for undo
+and don't mark the buffer as really changed.
+Both characters must have the same length of multi-byte form."
+      (let ((original-buffer-undo-list buffer-undo-list)
+            (modified (buffer-modified-p)))
+        (if NOUNDO
+            (setq buffer-undo-list t))
+        (goto-char START)
+        (let ((from (char-to-string FROMCHAR))
+              (to (char-to-string TOCHAR)))
+          (while (search-forward from END t)
+            (replace-match to t t)))
+        (if NOUNDO
+            (progn (setq buffer-undo-list original-buffer-undo-list)
+                   (set-buffer-modidifed-p modified)))))))
+
+(defun batch-makeinfo ()
+  "Emacs makeinfo in batch mode."
+  (infohack-texi-format (car command-line-args-left)
+                       (car (cdr command-line-args-left)))
+  (setq command-line-args-left nil))
+
+\f
+(defun infohack-texi-format (file &optional addsuffix)
+  (let ((auto-save-default nil)
+       (find-file-run-dired nil)
+       coding-system-for-write
+       output-coding-system
+       (error 0))
+    (condition-case err
+       (progn
+         (find-file file)
+         (setq buffer-read-only nil)
+         (buffer-disable-undo (current-buffer))
+         (if (boundp 'MULE)
+             (setq output-coding-system file-coding-system)
+           (setq coding-system-for-write buffer-file-coding-system))
+         ;; Remove ignored areas first.
+         (while (re-search-forward "^@ignore[\t\r ]*$" nil t)
+           (delete-region (match-beginning 0)
+                          (if (re-search-forward
+                               "^@end[\t ]+ignore[\t\r ]*$" nil t)
+                              (1+ (match-end 0))
+                            (point-max))))
+         (infohack-remove-unsupported)
+         (goto-char (point-min))
+         ;; Add suffix if it is needed.
+         (when (and addsuffix
+                    (re-search-forward "^@setfilename[\t ]+\\([^\t\n ]+\\)"
+                                       nil t)
+                    (not (string-match "\\.info$" (match-string 1))))
+           (insert ".info")
+           (goto-char (point-min)))
+         ;; process @include before updating node
+         ;; This might produce some problem if we use @lowersection or
+         ;; such.
+         (let ((input-directory default-directory)
+               (texinfo-command-end))
+           (while (re-search-forward "^@include" nil t)
+             (setq texinfo-command-end (point))
+             (let ((filename (concat input-directory
+                                     (texinfo-parse-line-arg))))
+               (re-search-backward "^@include")
+               (delete-region (point) (save-excursion
+                                        (forward-line 1)
+                                        (point)))
+               (message "Reading included file: %s" filename)
+               (save-excursion
+                 (save-restriction
+                   (narrow-to-region
+                    (point) (+ (point)
+                               (car (cdr (insert-file-contents filename)))))
+                   (goto-char (point-min))
+                   ;; Remove `@setfilename' line from included file,
+                   ;; if any, so @setfilename command not duplicated.
+                   (if (re-search-forward "^@setfilename"
+                                          (save-excursion
+                                            (forward-line 100)
+                                            (point))
+                                          t)
+                       (progn
+                         (beginning-of-line)
+                         (delete-region (point) (save-excursion
+                                                  (forward-line 1)
+                                                  (point))))))))))
+         (texinfo-mode)
+         (texinfo-every-node-update)
+         (set-buffer-modified-p nil)
+         (message "texinfo formatting %s..." file)
+         (texinfo-format-buffer nil)
+         (if (buffer-modified-p)
+             (progn (message "Saving modified %s" (buffer-file-name))
+                    (save-buffer))))
+      (error
+       (message ">> Error: %s" (prin1-to-string err))
+       (message ">>  point at")
+       (let ((s (buffer-substring (point) (min (+ (point) 100) (point-max))))
+            (tem 0))
+        (while (setq tem (string-match "\n+" s tem))
+          (setq s (concat (substring s 0 (match-beginning 0))
+                          "\n>>  "
+                          (substring s (match-end 0)))
+                tem (1+ tem)))
+        (message ">>  %s" s))
+       (setq error 1)))
+    (kill-emacs error)))
+
+;;; infohack.el ends here
diff --git a/mixi-ja.texi b/mixi-ja.texi
new file mode 100755 (executable)
index 0000000..4de4e4f
--- /dev/null
@@ -0,0 +1,1377 @@
+\input texinfo @c -*- mode: texinfo; coding: iso-2022-jp -*-
+@c %**start of header
+@setfilename mixi-ja.info
+@settitle mixi.el --- API libraries for accessing to mixi
+@c %**end of header
+@c @documentlanguage ja
+@include version.texi
+@c @syncodeindex pg cp
+@finalout
+
+@dircategory GNU Emacs Lisp
+@direntry
+* mixi-ja: (mixi-ja).  API libraries for accessing to mixi
+@end direntry
+
+@copying
+Copyright @copyright{} 2007 @w{OHASHI Akira}.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+@end quotation
+@end copying
+
+@ifinfo
+\e$B$3$N%U%!%$%k$O\e(B Emacs \e$B$G\e(B mixi \e$B$K%"%/%;%9$9$k$?$a$N\e(B Emacs Lisp \e$B%i%$%V%i%j\e(B
+mixi.el \e$B$K4X$9$k%^%K%e%"%k$G$9!#\e(B
+
+@insertcopying
+@end ifinfo
+
+@titlepage
+@title mixi.el \e$B%f!<%6%^%K%e%"%k\e(B
+@subtitle for version @value{VERSION}, @value{UPDATED}
+
+@author by OHASHI Akira
+@page
+
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@summarycontents
+
+@ifnottex
+@node Top
+@top mixi.el \e$B%f!<%6%^%K%e%"%k\e(B
+
+\e$B$3$N%^%K%e%"%k$G$O\e(B mixi.el \e$B%P!<%8%g%s\e(B @value{VERSION} \e$B$K$D$$$F2r@b$7$^$9!#\e(B
+@end ifnottex
+
+@menu
+* \e$B35MW\e(B::
+* \e$BI,MW$JJ*\e(B::
+* \e$B%$%s%9%H!<%k\e(B::
+* \e$BF1:-$5$l$F$$$k%"%W%j%1!<%7%g%s\e(B::
+* mixi.el API::
+* \e$B%+%9%?%^%$%:\e(B::
+* \e$BNI$/$"$k<ALd$HEz$(\e(B::
+* \e$B%P%0%l%]!<%H\e(B::
+* \e$B35G0:w0z\e(B::
+* \e$B4X?t:w0z\e(B::
+* \e$BJQ?t:w0z\e(B::
+@end menu
+
+@node \e$B35MW\e(B
+@chapter \e$B35MW\e(B
+
+mixi.el \e$B$H$O\e(B Emacs \e$B>e$G\e(B mixi \e$B$N3F<o>pJs$r1\Mw!"$^$?$OF|5-$J$I$NEj9F$r9T\e(B
+\e$B$J$($k$h$&$K$9$k$?$a$N\e(B Emacs Lisp \e$B%i%$%V%i%j$G$9!#\e(B
+
+\e$B1\Mw5!G=$N4pK\E*$JF0:n86M}$O0J2<$N$h$&$K$J$C$F$$$^$9!#\e(B
+
+@enumerate
+@item
+mixi \e$B$X\e(B HTTP \e$B%"%/%;%9$9$k\e(B (\e$BI,MW$J$i%m%0%$%s$r<B9T$9$k\e(B)
+@item
+\e$BI,MW$H$9$k%Z!<%8$r<hF@$9$k\e(B
+@item
+\e$B<hF@$5$l$?%Z!<%8$r2r@O$9$k\e(B
+@item
+\e$B2r@O7k2L$r\e(B @ref{mixi \e$B%*%V%8%'%/%H\e(B} \e$B$K3JG<$7$FJV5Q$9$k\e(B
+@end enumerate
+
+@noindent
+\e$B<hF@$5$l$?%Z!<%8$r2r@O$9$k:]!"@55,I=8=$rMQ$$$FF|IU$dK\J8$J$I$NI,MW$JMWAG\e(B
+\e$B$N$_$r@Z$j=P$7$^$9!#\e(B
+\e$B$3$N:n6H$O\e(B mixi \e$B$N=PNO$9$k\e(B HTML \e$B%Z!<%8$N9=B$$K6/$/0MB8$7$F$$$k$?$a!"\e(Bmixi
+\e$BB&$,%l%$%"%&%H$d%G%6%$%s$NJQ99$r<B;\$7$?>l9g$O@5>o$KF0:n$7$J$/$J$k$3$H$,\e(B
+\e$B$"$j$^$9!#\e(B
+
+@node \e$BI,MW$JJ*\e(B
+@chapter \e$BI,MW$JJ*\e(B
+@cindex backend
+@cindex \e$B%P%C%/%(%s%I\e(B
+
+mixi.el \e$B$O\e(B mixi \e$B$X%"%/%;%9$9$k$?$a$K0J2<$N%i%$%V%i%j!"$^$?$O30It%"%W%j%1!<\e(B
+\e$B%7%g%s$r;HMQ$7$^$9!#\e(B
+\e$BI,$:0J2<$N$&$A$N$I$l$+0l$D$O%$%s%9%H!<%k$7$F$*$+$J$1$l$P$$$1$^$;$s!#\e(B
+
+@itemize @bullet
+@item @uref{http://emacs-w3m.namazu.org/, emacs-w3m}
+@item @file{url.el} (Emacs 22 \e$B0J9_$KIUB0$NJ*$G$J$$$H@5>o$KF0$+$J$$$+$b$7\e(B
+\e$B$l$^$;$s\e(B)
+@item @uref{http://curl.haxx.se/, cURL}
+@end itemize
+
+\e$B;HMQ$9$k%i%$%V%i%j$^$?$O30It%"%W%j%1!<%7%g%s$N$3$H$r\e(B@dfn{\e$B%P%C%/%(%s%I\e(B}\e$B$H\e(B
+\e$B8F$S$^$9!#$I$N%P%C%/%(%s%I$r;HMQ$9$k$+$O4D6-$rD4::$7$F<+F0E*$K7hDj$5$l$^\e(B
+\e$B$9$,!"\e(B@ref{mixi-backend} \e$B$GJQ99$9$k$3$H$b$G$-$^$9!#\e(B
+
+@node \e$B%$%s%9%H!<%k\e(B
+@chapter \e$B%$%s%9%H!<%k\e(B
+
+\e$B:G=i$K!"G[I[$5$l$?\e(B mixi.el \e$B$N\e(B tarball \e$B$r0J2<$N$h$&$KE,Ev$J>l=j$GE83+$7!"\e(B
+\e$B:n@.$5$l$?\e(B @file{mixi} \e$B%G%#%l%/%H%j$X0\F0$7$F$/$@$5$$!#\e(B
+
+@cartouche
+@example
+% tar zxf mixi-el-1.0.0.tar.gz
+% cd mixi-el-1.0.0
+@end example
+@end cartouche
+
+@noindent
+\e$B$b$7$"$J$?$,\e(B mixi.el \e$B$r\e(B CVS \e$B$+$i<hF@$7$?$N$G$"$l$P!"\e(B@code{configure}
+\e$B%9%/%j%W%H$r@8@.$9$k$?$a$K0J2<$r<B9T$9$kI,MW$,$"$j$^$9!#\e(B
+
+@cartouche
+@example
+% autoreconf -f -i
+@end example
+@end cartouche
+
+@noindent
+\e$B8e$O0J2<$r<B9T$9$k$3$H$K$h$j%$%s%9%H!<%k$,40N;$7$^$9!#\e(B
+
+@cartouche
+@example
+% ./configure
+% make
+% make install (root\e$B8"8B$,I,MW$K$J$k$+$b$7$l$^$;$s\e(B)
+@end example
+@end cartouche
+
+@noindent
+\e$B$9$Y$F$N\e(B Emacs Lisp \e$B%U%!%$%k$H\e(B info \e$B%U%!%$%k$,E,@Z$J%G%#%l%/%H%j$K%$%s\e(B
+\e$B%9%H!<%k$5$l$F$$$k$O$:$G$9!#\e(B
+
+mixi.el \e$B$K$O\e(B mixi.el \e$B$GMQ0U$5$l$F$$$k\e(B API \e$B$r;HMQ$7$F<BAu$7$?$$$/$D$+$N\e(B
+\e$B%"%W%j%1!<%7%g%s$,F1:-$5$l$F$$$^$9!#\e(B
+\e$B$3$l$i$N%"%W%j%1!<%7%g%s$NCf$K$O$"$J$?$,I,MW$H$7$J$$J*$b4^$^$l$F$$$k$+\e(B
+\e$B$b$7$l$^$;$s!#\e(B
+\e$B$^$?!";HMQ$7$F$$$k4D6-$K$h$C$F$O<+F0$G7hDj$5$l$k%$%s%9%H!<%k@h$,ITET9g\e(B
+\e$B$J>l9g$,$"$k$+$b$7$l$^$;$s!#\e(B
+\e$B$3$l$i$NLdBj$r2r>C$9$k$?$a$K$"$J$?$O\e(B @code{configure} \e$B%9%/%j%W%H$K0z?t\e(B
+\e$B$rM?$($k$3$H$,$G$-$^$9!#\e(B
+\e$B;HMQ2DG=$J0z?t$K$D$$$F$O0J2<$r<B9T$7$F%X%k%W$G3NG'$7$F$/$@$5$$!#\e(B
+
+@cartouche
+@example
+% ./configure --help
+@end example
+@end cartouche
+
+@node \e$BF1:-$5$l$F$$$k%"%W%j%1!<%7%g%s\e(B
+@chapter \e$BF1:-$5$l$F$$$k%"%W%j%1!<%7%g%s\e(B
+
+mixi.el \e$B$K$O\e(B mixi.el \e$B$GMQ0U$5$l$F$$$k\e(B API \e$B$r;HMQ$7$F<BAu$7$?$$$/$D$+$N\e(B
+\e$B%"%W%j%1!<%7%g%s$,F1:-$5$l$F$$$^$9!#$3$N>O$G$=$l$i$r4JC1$K>R2p$7$^$9!#\e(B
+
+@table @code
+@item sb-mixi.el
+@uref{http://gnus.org/, Gnus}\e$B!"\e(B@uref{http://www.gohome.org/wl/,
+Wanderlust}\e$B!"\e(B@uref{http://www.mew.org/, Mew} \e$B$N$h$&$J\e(B Shimbun \e$BBP1~$N%a!<\e(B
+\e$B%i$G\e(B mixi \e$B$N5-;v$r8+$k$3$H$,$G$-$k$h$&$K$J$j$^$9!#\e(B
+
+@item mixi-gnus.el
+@itemx mixi-wl.el
+Gnus \e$B$H\e(B Wanderlust \e$B$+$i$=$l$>$l\e(B mixi \e$B$KEj9F$G$-$k$h$&$K$J$j$^$9!#\e(B
+
+@item riece-mixi.el
+@uref{http://www.nongnu.org/riece/, Riece} \e$B$K\e(B mixi \e$B$N?7Ce5-;v%A%'%C%/\e(B
+\e$B5!G=$J$I$rDI2C$7$^$9!#\e(B
+
+@item mixi-atom.el
+RSS \e$B%j!<%@$GFI$_9~$a$k\e(B Atom Syndication Format \e$B$G\e(B mixi \e$B$N5-;v$r=PNO$7\e(B
+\e$B$^$9!#\e(B
+
+@item mixi-ticker.el
+mixi \e$B$N?7Ce5-;v$r%_%K%P%C%U%!$K%F%#%C%+!<I=<($7$^$9!#\e(B
+@end table
+
+@node mixi.el API
+@chapter mixi.el API
+
+\e$B$3$N>O$G$O\e(B mixi.el \e$B$G07$&%G!<%?7A<0$H\e(B API \e$B$K$D$$$F2r@b$7$^$9!#\e(B
+
+@menu
+* mixi \e$B%*%V%8%'%/%H\e(B::
+* \e$B0lMw<hF@4X?t\e(B::
+* \e$BEj9FMQ4X?t\e(B::
+* \e$B$=$NB>$N4X?t\e(B::
+@end menu
+
+@node mixi \e$B%*%V%8%'%/%H\e(B
+@section mixi \e$B%*%V%8%'%/%H\e(B
+@cindex mixi \e$B%*%V%8%'%/%H\e(B
+@cindex \e$B%*%V%8%'%/%H\e(B
+
+mixi.el \e$B$G$O%^%$%_%/%7%#$dF|5-!"%3%_%e%K%F%#!"%H%T%C%/$J$I$r\e(B @dfn{mixi
+\e$B%*%V%8%'%/%H\e(B}\e$B$H$$$&FH<+$N%G!<%?7A<0$G4IM}$7$F$$$^$9!#\e(Bmixi.el API \e$B$N3F<o\e(B
+\e$B<hF@4X?t$G$O$3$N\e(B mixi \e$B%*%V%8%'%/%H7A<0$N%j%9%H$,JV5Q$5$l!"F|5-<hF@4X?t$J\e(B
+\e$B$I0z?t$r<h$k4X?t$r;HMQ$9$k:]$K$b$^$?\e(B mixi \e$B%*%V%8%'%/%H7A<0$G0z?t$rM?$($J\e(B
+\e$B$1$l$P$$$1$^$;$s!#\e(B
+
+mixi \e$B%*%V%8%'%/%H$O@53N$K$O%^%$%_%/%7%#$dF|5-$J$I$G$=$l$>$l%G!<%?7A<0$,\e(B
+\e$B0[$J$j$^$9!#$=$l$O3F%*%V%8%'%/%H$,;}$C$F$$$k>pJs\e(B (\e$B%^%$%_%/%7%#$J$iL>A0$d\e(B
+\e$B%K%C%/%M!<%`!"F|5-$J$i%?%$%H%k$dK\J8$J$I\e(B) \e$B$,0[$J$k$?$a$G$9!#\e(B
+mixi \e$B%*%V%8%'%/%H$O%*%V%8%'%/%H;X8~%W%m%0%i%`$G$$$&$H$3$m$N%$%s%9%?%s%9\e(B
+\e$B$N$h$&$K07$&$h$&$K<BAu$5$l$F$*$j!"$=$N%*%V%8%'%/%H$,;}$D>pJs$r<hF@$"$k$$\e(B
+\e$B$O@_Dj$9$k$?$a$K%"%/%;%5%a%=%C%I$N$h$&$K;H$&$3$H$,$G$-$k4X?t$,MQ0U$5$l$F\e(B
+\e$B$$$^$9!#\e(B
+
+mixi \e$B%*%V%8%'%/%H$O3F%*%V%8%'%/%H@lMQ$N%*%V%8%'%/%H@8@.4X?t$r;HMQ$7$F@8\e(B
+\e$B@.$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$?$@$7!"%*%V%8%'%/%H$r@8@.$7$?$@$1$G$O$^$@\e(B mixi \e$B$N%5%$%H$X$N%"%/%;%9$OH/\e(B
+\e$B@8$7$^$;$s!#$3$l$O!"0lMw<hF@4X?t$r<B9T$7$?$H$-$J$I$KBgNL$N%5%$%H%"%/%;%9\e(B
+\e$B$,H/@8$7$F;~4V$,3]$+$C$F$7$^$&$N$rKI$0$?$a$G$9!#\e(B
+\e$B$3$N;EAH$_$O\e(B GoF \e$B$N%G%6%$%s%Q%?!<%s$N$&$A$N\e(B Proxy \e$B%Q%?!<%s\e(B (\e$BI,MW$K$J$C$F\e(B
+\e$B$+$i:n$k\e(B) \e$B$+$iH/A[$rF@$^$7$?!#\e(B
+
+@cartouche
+@example
+(setq my-friend (mixi-make-friend "XXXXX"))
+    @result{} friend \e$B%*%V%8%'%/%H\e(B (\e$B$3$N;~E@$G$O$^$@%5%$%H$K$O%"%/%;%9$7\e(B
+    \e$B$F$$$^$;$s\e(B)
+
+(mixi-friend-nick my-friend)
+    @result{} \e$B%K%C%/%M!<%`\e(B (\e$B$3$N$H$-=i$a$F%5%$%H%"%/%;%9$,H/@8$7$^$9\e(B)
+
+(mixi-friend-name my-friend)
+    @result{} \e$BL>A0\e(B (\e$B>e5-$N%5%$%H%"%/%;%9$GA4>pJs$r<hF@$7$F$$$k$N$G!"$b$&\e(B
+    \e$B%5%$%H$K$O%"%/%;%9$7$^$;$s\e(B)
+@end example
+@end cartouche
+
+\e$B0J9_$N>.@a$G3F\e(B mixi \e$B%*%V%8%'%/%H$K$D$$$F2r@b$7$^$9!#\e(B
+
+@subsection friend \e$B%*%V%8%'%/%H\e(B
+@cindex friend \e$B%*%V%8%'%/%H\e(B
+
+\e$B%^%$%_%/%7%#$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B0J2<$N4X?t$r;HMQ$9$k$3$H$K$h$j\e(B friend \e$B%*%V%8%'%/%H$r@8@.$9$k$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
+
+@defun mixi-make-friend id
+friend \e$B%*%V%8%'%/%H$r@8@.$7$^$9!#\e(B
+\e$B0z?t$K$O%^%$%_%/%7%#$N\e(B ID \e$B$rJ8;zNs$G;XDj$7$F$/$@$5$$!#\e(B
+@end defun
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+friend \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J\e(B
+\e$B2<$K2r@b$7$^$9!#\e(B
+
+@defun mixi-friend-id friend
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-nick friend
+\e$B%K%C%/%M!<%`$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-name friend
+\e$BL>A0$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-sex friend
+\e$B@-JL$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-address friend
+\e$B8==;=j$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-age friend
+\e$BG/Np$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-birthday friend
+\e$BCB@8F|$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-blood-type friend
+\e$B7l1U7?$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-birthplace friend
+\e$B=P?HCO$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-hobby friend
+\e$B<qL#$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-job friend
+\e$B?&6H$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-organization friend
+\e$B=jB0$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-friend-profile friend
+\e$B<+8J>R2p$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@subsection log \e$B%*%V%8%'%/%H\e(B
+@cindex log \e$B%*%V%8%'%/%H\e(B
+
+\e$BB-$"$H$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B$3$N%*%V%8%'%/%H$rD>@\@8@.$9$k$3$H$OL5$$$H;W$$$^$9!#\e(B
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+log \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J2<$K\e(B
+\e$B2r@b$7$^$9!#\e(B
+
+@defun mixi-log-friend log
+\e$BB-$"$H$N%^%$%_%/%7%#$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-log-time log
+\e$BB-$"$H$NF|;~$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@subsection diary \e$B%*%V%8%'%/%H\e(B
+@cindex diary \e$B%*%V%8%'%/%H\e(B
+
+\e$BF|5-$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B0J2<$N4X?t$r;HMQ$9$k$3$H$K$h$j\e(B diary \e$B%*%V%8%'%/%H$r@8@.$9$k$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
+
+@defun mixi-make-diary owner id
+diary \e$B%*%V%8%'%/%H$r@8@.$7$^$9!#\e(B
+\e$B0z?t$K$O:n@.<T$rI=$9\e(B friend \e$B%*%V%8%'%/%H$HF|5-$N\e(B ID \e$B$rJ8;zNs$G;XDj$7$F$/\e(B
+\e$B$@$5$$!#\e(B
+@end defun
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+diary \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J2<\e(B
+\e$B$K2r@b$7$^$9!#\e(B
+
+@defun mixi-diary-owner diary
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-diary-id diary
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-diary-comment-count diary
+\e$B%3%a%s%H?t$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-diary-time diary
+\e$B;~9o$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-diary-title diary
+\e$B%?%$%H%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-diary-content diary
+\e$BK\J8$rJV5Q$7$^$9!#\e(B
+\e$BK\J8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection community \e$B%*%V%8%'%/%H\e(B
+@cindex community \e$B%*%V%8%'%/%H\e(B
+
+\e$B%3%_%e%K%F%#$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B0J2<$N4X?t$r;HMQ$9$k$3$H$K$h$j\e(B community \e$B%*%V%8%'%/%H$r@8@.$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
+
+@defun mixi-make-community id
+community \e$B%*%V%8%'%/%H$r@8@.$7$^$9!#\e(B
+\e$B0z?t$K$O%3%_%e%K%F%#$N\e(B ID \e$B$rJ8;zNs$G;XDj$7$F$/$@$5$$!#\e(B
+@end defun
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+community \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r\e(B
+\e$B0J2<$K2r@b$7$^$9!#\e(B
+
+@defun mixi-community-id community
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-name community
+\e$BL>A0$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-birthday community
+\e$B3+@_F|$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-owner community
+\e$B4IM}?M$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-category community
+\e$B%+%F%4%j$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-members community
+\e$B?M?t$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-open-level community
+\e$B;22C>r7o$H8x3+%l%Y%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-authority community
+\e$B%H%T%C%/:n@.$N8"8B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-community-description community
+\e$B@bL@$rJV5Q$7$^$9!#\e(B
+\e$B@bL@$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection topic \e$B%*%V%8%'%/%H\e(B
+@cindex topic \e$B%*%V%8%'%/%H\e(B
+
+\e$B%H%T%C%/$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B0J2<$N4X?t$r;HMQ$9$k$3$H$K$h$j\e(B topic \e$B%*%V%8%'%/%H$r@8@.$9$k$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
+
+@defun mixi-make-topic community id
+topic \e$B%*%V%8%'%/%H$r@8@.$7$^$9!#\e(B
+\e$B0z?t$K$O%H%T%C%/$,B0$9$k%3%_%e%K%F%#$rI=$9\e(B community \e$B%*%V%8%'%/%H$H%H%T%C\e(B
+\e$B%/$N\e(B ID \e$B$rJ8;zNs$G;XDj$7$F$/$@$5$$!#\e(B
+@end defun
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+topic \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J2<\e(B
+\e$B$K2r@b$7$^$9!#\e(B
+
+@defun mixi-topic-community topic
+\e$BB0$9$k%3%_%e%K%F%#$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-id topic
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-comment-count topic
+\e$B%3%a%s%H?t$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-time topic
+\e$B;~9o$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-title topic
+\e$B%?%$%H%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-owner topic
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-topic-content topic
+\e$BK\J8$rJV5Q$7$^$9!#\e(B
+\e$BK\J8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection event \e$B%*%V%8%'%/%H\e(B
+@cindex event \e$B%*%V%8%'%/%H\e(B
+
+\e$B%$%Y%s%H$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B0J2<$N4X?t$r;HMQ$9$k$3$H$K$h$j\e(B event \e$B%*%V%8%'%/%H$r@8@.$9$k$3$H$,$G$-$^\e(B
+\e$B$9!#\e(B
+
+@defun mixi-make-event community id
+event \e$B%*%V%8%'%/%H$r@8@.$7$^$9!#\e(B
+\e$B0z?t$K$OB0$9$k%3%_%e%K%F%#$rI=$9\e(B community \e$B%*%V%8%'%/%H$H\e(B ID \e$B$rJ8;zNs7A\e(B
+\e$B<0$G;XDj$7$F$/$@$5$$!#\e(B
+@end defun
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+event \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J2<\e(B
+\e$B$K2r@b$7$^$9!#\e(B
+
+@defun mixi-event-community event
+\e$BB0$9$k%3%_%e%K%F%#$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-id event
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-comment-count event
+\e$B%3%a%s%H?t$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-time event
+\e$B;~9o$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-title event
+\e$B%?%$%H%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-owner event
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-date event
+\e$B3+:EF|;~$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-place event
+\e$B3+:E>l=j$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-detail event
+\e$B>\:Y$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-limit event
+\e$BJg=84|8B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-event-members event
+\e$B;22C<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@subsection comment \e$B%*%V%8%'%/%H\e(B
+@cindex comment \e$B%*%V%8%'%/%H\e(B
+
+\e$B%3%a%s%H$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B$3$N%*%V%8%'%/%H$rD>@\@8@.$9$k$3$H$OL5$$$H;W$$$^$9!#\e(B
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+comment \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J\e(B
+\e$B2<$K2r@b$7$^$9!#\e(B
+
+@defun mixi-comment-parent comment
+\e$BB0$9$k?F%*%V%8%'%/%H\e(B (\e$BF|5-\e(B/\e$B%H%T%C%/\e(B/\e$B%$%Y%s%H\e(B) \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-comment-owner comment
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-comment-time comment
+\e$B;~9o$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-comment-content comment
+\e$BK\J8$rJV5Q$7$^$9!#\e(B
+\e$BK\J8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection message \e$B%*%V%8%'%/%H\e(B
+@cindex message \e$B%*%V%8%'%/%H\e(B
+
+\e$B%a%C%;!<%8$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B$3$N%*%V%8%'%/%H$rD>@\@8@.$9$k$3$H$OL5$$$H;W$$$^$9!#\e(B
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+message \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J\e(B
+\e$B2<$K2r@b$7$^$9!#\e(B
+
+@defun mixi-message-id message
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-message-box message
+\e$B<oN`$rJV5Q$7$^$9!#\e(B
+@table @asis
+@item inbox
+\e$B<u?.H"\e(B
+@item outbox
+\e$BAw?.:Q$_\e(B
+@item savebox
+\e$B2<=q$-J]B8H"\e(B
+@item thrash
+\e$B$4$_H"\e(B
+@end table
+@end defun
+
+@defun mixi-message-owner message
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-message-title message
+\e$B%?%$%H%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-message-time message
+\e$B;~9o$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-message-content message
+\e$BK\J8$rJV5Q$7$^$9!#\e(B
+\e$BK\J8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection introduction \e$B%*%V%8%'%/%H\e(B
+@cindex introduction \e$B%*%V%8%'%/%H\e(B
+
+\e$B>R2pJ8$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B$3$N%*%V%8%'%/%H$rD>@\@8@.$9$k$3$H$OL5$$$H;W$$$^$9!#\e(B
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+introduction \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0l\e(B
+\e$BMw$r0J2<$K2r@b$7$^$9!#\e(B
+
+@defun mixi-introduction-parent introduction
+\e$B>R2p$5$l$F$$$k?M$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-introduction-owner introduction
+\e$B:n@.<T$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-introduction-content introduction
+\e$B>R2pJ8$rJV5Q$7$^$9!#\e(B
+\e$B>R2pJ8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a\e(B
+\e$B$K\e(B @ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@subsection news \e$B%*%V%8%'%/%H\e(B
+@cindex news \e$B%*%V%8%'%/%H\e(B
+
+\e$B%K%e!<%9$rI=$9%*%V%8%'%/%H$G$9!#\e(B
+\e$B$3$N%*%V%8%'%/%H$rD>@\@8@.$9$k$3$H$OL5$$$H;W$$$^$9!#\e(B
+
+@subsubsection \e$B%"%/%;%5%a%=%C%I\e(B
+
+news \e$B%*%V%8%'%/%H$N3F<o>pJs$r<hF@$9$k$?$a$N%"%/%;%5%a%=%C%I$N0lMw$r0J2<\e(B
+\e$B$K2r@b$7$^$9!#\e(B
+
+@defun mixi-news-media-id news
+\e$B%a%G%#%"\e(B ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-news-id news
+ID \e$B$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-news-media news
+\e$B%a%G%#%"$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-news-time news
+\e$BF|;~$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-news-title news
+\e$B%?%$%H%k$rJV5Q$7$^$9!#\e(B
+@end defun
+
+@defun mixi-news-content news
+\e$BK\J8$rJV5Q$7$^$9!#\e(B
+\e$BK\J8$K$O\e(B HTML \e$B%?%0$,4^$^$l$F$$$k2DG=@-$,$"$j$^$9!#$=$l$i$r<h$j=|$/$?$a$K\e(B
+@ref{mixi-remove-markup} \e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+@end defun
+
+@node \e$B0lMw<hF@4X?t\e(B
+@section \e$B0lMw<hF@4X?t\e(B
+
+\e$B0lMw<hF@4X?t$G$O\e(B mixi \e$B$N$5$^$6$^$J>pJs$r\e(B mixi \e$B%*%V%8%'%/%H$N%j%9%H7A<0$G\e(B
+\e$B<hF@$9$k$3$H$,$G$-$^$9!#\e(B
+
+@defun mixi-get-friends &rest friend-or-range
+\e$B%^%$%_%/%7%#0lMw$r<hF@$7$^$9!#\e(B
+@var{friend-or-range} \e$B$O\e(B friend \e$B%*%V%8%'%/%H$^$?$O?tCM$r;XDj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$r;XDj$7$?>l9g$O$=$N%*%V%8%'%/%H$G;XDj$7$??M$N%^%$%_\e(B
+\e$B%/%7%#0lMw$r<hF@$7$^$9!#\e(Bfriend \e$B%*%V%8%'%/%H$r;XDj$7$J$+$C$?>l9g$O\e(B
+@emph{\e$B<+J,\e(B}\e$B$N%^%$%_%/%7%#0lMw$r<hF@$7$^$9!#\e(B
+\e$B?tCM$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%^%$%_%/%7%#$N$_$r<hF@$7$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$H?tCM$OF1;~$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-friends)
+    @result{} \e$B<+J,$N%^%$%_%/%7%#$9$Y$F\e(B
+
+(mixi-get-friends 5)
+    @result{} \e$B<+J,$N%^%$%_%/%7%#:GBg$G\e(B 5 \e$B?MJ,$N$_\e(B
+
+(mixi-get-friends friend)
+    @result{} friend \e$B$5$s$N%^%$%_%/%7%#$9$Y$F\e(B
+
+(mixi-get-friends friend 10)
+    @result{} friend \e$B$5$s$N%^%$%_%/%7%#:GBg$G\e(B 10 \e$B?MJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-favorites &optional range
+\e$B$*5$$KF~$j0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N$*5$$KF~$j$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-favorites)
+    @result{} \e$B$*5$$KF~$j$9$Y$F\e(B
+
+(mixi-get-favorites 5)
+    @result{} \e$B$*5$$KF~$j:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-logs &optional range
+\e$BB-$"$H0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$NB-$"$H$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-logs)
+    @result{} \e$BB-$"$H$9$Y$F\e(B
+
+(mixi-get-logs 5)
+    @result{} \e$BB-$"$H:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-diaries &rest friend-or-range
+\e$BF|5-0lMw$r<hF@$7$^$9!#\e(B
+@var{friend-or-range} \e$B$O\e(B friend \e$B%*%V%8%'%/%H$^$?$O?tCM$r;XDj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$r;XDj$7$?>l9g$O$=$N%*%V%8%'%/%H$G;XDj$7$??M$NF|5-0l\e(B
+\e$BMw$r<hF@$7$^$9!#\e(Bfriend \e$B%*%V%8%'%/%H$r;XDj$7$J$+$C$?>l9g$O\e(B@emph{\e$B<+J,\e(B}\e$B$NF|\e(B
+\e$B5-0lMw$r<hF@$7$^$9!#\e(B
+\e$B?tCM$r;XDj$7$?>l9g$O:GBg$G$3$N?t$NF|5-$N$_$r<hF@$7$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$H?tCM$OF1;~$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-diaries)
+    @result{} \e$B<+J,$NF|5-$9$Y$F\e(B
+
+(mixi-get-diaries 5)
+    @result{} \e$B<+J,$NF|5-:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+
+(mixi-get-diaries friend)
+    @result{} friend \e$B$5$s$NF|5-$9$Y$F\e(B
+
+(mixi-get-diaries friend 10)
+    @result{} friend \e$B$5$s$NF|5-:GBg$G\e(B 10 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-new-diaries &optional range
+\e$B%^%$%_%/%7%#:G?7F|5-0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%^%$%_%/%7%#:G?7F|5-$N$_$r<hF@\e(B
+\e$B$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-new-diaries)
+    @result{} \e$B%^%$%_%/%7%#:G?7F|5-$9$Y$F\e(B
+
+(mixi-get-new-diaries 5)
+    @result{} \e$B%^%$%_%/%7%#:G?7F|5-:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-search-diaries keyword &optional range
+\e$B?7CeF|5-8!:w7k2L0lMw$r<hF@$7$^$9!#\e(B
+@var{keyword} \e$B$O8!:w$7$?$$%-!<%o!<%I$r;XDj$7$F$/$@$5$$!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N8!:w7k2L$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-search-diaries "mixi.el")
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$??7CeF|5-$9$Y$F\e(B
+
+(mixi-search-diaries "mixi.el" 5)
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$??7CeF|5-:GBg$G\e(B 5 \e$B7oJ,\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-communities &rest friend-or-range
+\e$B%3%_%e%K%F%#0lMw$r<hF@$7$^$9!#\e(B
+@var{friend-or-range} \e$B$O\e(B friend \e$B%*%V%8%'%/%H$^$?$O?tCM$r;XDj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$r;XDj$7$?>l9g$O$=$N%*%V%8%'%/%H$G;XDj$7$??M$N%3%_%e\e(B
+\e$B%K%F%#0lMw$r<hF@$7$^$9!#\e(Bfriend \e$B%*%V%8%'%/%H$r;XDj$7$J$+$C$?>l9g$O\e(B
+@emph{\e$B<+J,\e(B}\e$B$N%3%_%e%K%F%#0lMw$r<hF@$7$^$9!#\e(B
+\e$B?tCM$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%3%_%e%K%F%#$N$_$r<hF@$7$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$H?tCM$OF1;~$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-communities)
+    @result{} \e$B<+J,$N%3%_%e%K%F%#$9$Y$F\e(B
+
+(mixi-get-communities 5)
+    @result{} \e$B<+J,$N%3%_%e%K%F%#:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+
+(mixi-get-communities friend)
+    @result{} friend \e$B$5$s$N%3%_%e%K%F%#$9$Y$F\e(B
+
+(mixi-get-communities friend 10)
+    @result{} friend \e$B$5$s$N%3%_%e%K%F%#:GBg$G\e(B 10 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-search-communities keyword &optional range
+\e$B%3%_%e%K%F%#8!:w7k2L0lMw$r<hF@$7$^$9!#\e(B
+@var{keyword} \e$B$O8!:w$7$?$$%-!<%o!<%I$r;XDj$7$F$/$@$5$$!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N8!:w7k2L$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-search-communities "mixi.el")
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$?%3%_%e%K%F%#$9$Y$F\e(B
+
+(mixi-search-communities "mixi.el" 5)
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$?%3%_%e%K%F%#:GBg$G\e(B 5 \e$B7oJ,\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-bbses community &optional range
+\e$B7G<(HD\e(B (\e$B%H%T%C%/\e(B/\e$B%$%Y%s%H\e(B) \e$B0lMw$r<hF@$7$^$9!#\e(B
+@var{community} \e$B$O\e(B community \e$B%*%V%8%'%/%H$r;XDj$7$F$/$@$5$$!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N7G<(HD$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-bbses community)
+    @result{} community \e$B$N7G<(HD$9$Y$F\e(B
+
+(mixi-get-bbses community 5)
+    @result{} community \e$B$N7G<(HD:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-new-bbses &optional range
+\e$B%3%_%e%K%F%#:G?7=q$-9~$_0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N=q$-9~$_$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-new-bbses)
+    @result{} \e$B%3%_%e%K%F%#:G?7=q$-9~$_$9$Y$F\e(B
+
+(mixi-get-new-bbses 5)
+    @result{} \e$B%3%_%e%K%F%#:G?7=q$-9~$_:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-search-bbses keyword &optional range
+\e$B7G<(HD8!:w7k2L0lMw$r<hF@$7$^$9!#\e(B
+@var{keyword} \e$B$O8!:w$7$?$$%-!<%o!<%I$r;XDj$7$F$/$@$5$$!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N8!:w7k2L$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-search-bbses "mixi.el")
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$?7G<(HD$9$Y$F\e(B
+
+(mixi-search-bbses "mixi.el" 5)
+    @result{} @samp{mixi.el} \e$B$G8!:w$7$?7G<(HD:GBg$G\e(B 5 \e$B7oJ,\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-comments parent &optional range
+\e$B%3%a%s%H0lMw$r<hF@$7$^$9!#\e(B
+@var{parent} \e$B$O0J2<$N$$$:$l$+$r;XDj$7$F$/$@$5$$!#\e(B
+@itemize @bullet
+@item diary \e$B%*%V%8%'%/%H\e(B
+@item topic \e$B%*%V%8%'%/%H\e(B
+@item event \e$B%*%V%8%'%/%H\e(B
+@end itemize
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%3%a%s%H$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-comments diary)
+    @result{} diary \e$B$N%3%a%s%HF|5-$9$Y$F\e(B
+
+(mixi-get-comments topic)
+    @result{} topic \e$B$N%3%a%s%H:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-new-comments &optional range
+\e$BF|5-%3%a%s%H5-F~MzNr0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$NF|5-$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-new-comments)
+    @result{} \e$BF|5-%3%a%s%H5-F~MzNr$9$Y$F\e(B
+
+(mixi-get-new-comments 5)
+    @result{} \e$BF|5-%3%a%s%H5-F~MzNr:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-new-bbs-comments &optional range
+\e$B%3%_%e%K%F%#%3%a%s%H5-F~MzNr0lMw$r<hF@$7$^$9!#\e(B
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N=q$-9~$_$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-new-bbs-comments)
+    @result{} \e$B%3%_%e%K%F%#%3%a%s%H5-F~MzNr$9$Y$F\e(B
+
+(mixi-get-new-bbs-comments 5)
+    @result{} \e$B%3%_%e%K%F%#%3%a%s%H5-F~MzNr:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-messages &rest box-or-range
+\e$B%a%C%;!<%80lMw$r<hF@$7$^$9!#\e(B
+@var{box-or-range} \e$B$O%a%C%;!<%8$N<oN`$rI=$90J2<$N$$$:$l$+$^$?$O?tCM$r;X\e(B
+\e$BDj$9$k$3$H$,$G$-$^$9!#\e(B
+@table @asis
+@item inbox
+\e$B<u?.H"\e(B
+@item outbox
+\e$BAw?.:Q$_\e(B
+@item savebox
+\e$B2<=q$-J]B8H"\e(B
+@item thrash
+\e$B$4$_H"\e(B
+@end table
+\e$B%a%C%;!<%8$N<oN`$r;XDj$7$?>l9g$O;XDj$7$?%a%C%;!<%80lMw$r<hF@$7$^$9!#%a%C\e(B
+\e$B%;!<%8$N<oN`$r;XDj$7$J$+$C$?>l9g$O\e(B@emph{\e$B<u?.H"\e(B}\e$B$N%a%C%;!<%80lMw$r<hF@$7\e(B
+\e$B$^$9!#\e(B
+\e$B?tCM$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%a%C%;!<%8$N$_$r<hF@$7$^$9!#\e(B
+\e$B%a%C%;!<%8$N<oN`$H?tCM$OF1;~$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-messages)
+    @result{} \e$B<u?.H"$N%a%C%;!<%8$9$Y$F\e(B
+
+(mixi-get-messages 'outbox)
+    @result{} \e$BAw?.:Q$_$N%a%C%;!<%8$9$Y$F\e(B
+
+(mixi-get-messages 'savebox 5)
+    @result{} \e$B2<=q$-J]B8H"$N%a%C%;!<%8:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-introductions &rest friend-or-range
+\e$B>R2pJ80lMw$r<hF@$7$^$9!#\e(B
+@var{friend-or-range} \e$B$O\e(B friend \e$B%*%V%8%'%/%H$^$?$O?tCM$r;XDj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$r;XDj$7$?>l9g$O$=$N%*%V%8%'%/%H$G;XDj$7$?%^%$%_%/%7%#\e(B
+\e$B$N>R2pJ80lMw$r<hF@$7$^$9!#\e(Bfriend \e$B%*%V%8%'%/%H$r;XDj$7$J$+$C$?>l9g$O\e(B
+@emph{\e$B<+J,\e(B}\e$B$N>R2pJ80lMw$r<hF@$7$^$9!#\e(B
+\e$B?tCM$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N>R2pJ8$N$_$r<hF@$7$^$9!#\e(B
+friend \e$B%*%V%8%'%/%H$H?tCM$OF1;~$K;XDj$9$k$3$H$b$G$-$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-introductions)
+    @result{} \e$B<+J,$N>R2pJ8$9$Y$F\e(B
+
+(mixi-get-introductions 5)
+    @result{} \e$B<+J,$N>R2pJ8:GBg$G\e(B 5 \e$B?MJ,$N$_\e(B
+
+(mixi-get-introductions friend)
+    @result{} friend \e$B$5$s$N>R2pJ8$9$Y$F\e(B
+
+(mixi-get-introductions friend 10)
+    @result{} friend \e$B$5$s$N>R2pJ8:GBg$G\e(B 10 \e$B?MJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-get-news category sort &optional range
+\e$B%K%e!<%90lMw$r<hF@$7$^$9!#\e(B
+@var{category} \e$B$O%+%F%4%j$rI=$90J2<$N$$$:$l$+$r;XDj$7$F$/$@$5$$!#\e(B
+@table @asis
+@item domestic
+\e$B9qFb\e(B
+@item politics
+\e$B@/<#\e(B
+@item economy
+\e$B7P:Q\e(B
+@item area
+\e$BCO0h\e(B
+@item abroad
+\e$B3$30\e(B
+@item sports
+\e$B%9%]!<%D\e(B
+@item entertainment
+\e$B%(%s%?!<%F%$%s%a%s%H\e(B
+@item IT
+IT\e$B!&%F%/%N%m%8!<\e(B
+@end table
+@var{sort} \e$B$O<oN`$rI=$90J2<$N$$$:$l$+$r;XDj$7$F$/$@$5$$!#\e(B
+@table @asis
+@item newest
+\e$B:G?7$N%K%e!<%9\e(B
+@item pickup
+\e$BCmL\$N%K%e!<%9\e(B
+@end table
+@var{range} \e$B$O?tCM$r;XDj$9$k$3$H$,$G$-$^$9!#\e(B
+@var{range} \e$B$r;XDj$7$?>l9g$O:GBg$G$3$N?t$N%K%e!<%9$N$_$r<hF@$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-get-news 'domestic 'newest)
+    @result{} \e$B9qFb$N:G?7%K%e!<%9$9$Y$F\e(B
+
+(mixi-get-introductions 'politics 'pickup 5)
+    @result{} \e$B@/<#$NCmL\%K%e!<%9:GBg$G\e(B 5 \e$B7oJ,$N$_\e(B
+@end example
+@end cartouche
+@end defun
+
+@node \e$BEj9FMQ4X?t\e(B
+@section \e$BEj9FMQ4X?t\e(B
+
+\e$BEj9FMQ4X?t$r;HMQ$9$k$3$H$K$h$jF|5-$N:n@.$d%3%a%s%H$NEj9F$J$I$,9T$J$($^$9!#\e(B
+
+@defun mixi-post-diary title content
+\e$BF|5-$rEj9F$7$^$9!#\e(B
+\e$B0z?t$K$O%?%$%H%k$HK\J8$r;XDj$7$F$/$@$5$$!#\e(B
+
+@cartouche
+@example
+(mixi-post-diary "\e$B%?%$%H%k\e(B" "\e$BK\J8\e(B")
+    @result{} \e$BITDj\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-post-topic community title content
+\e$B%H%T%C%/$rEj9F$7$^$9!#\e(B
+\e$B0z?t$K$OEj9F$9$k%3%_%e%K%F%#$rI=$9\e(B community \e$B%*%V%8%'%/%H$H%?%$%H%k!"K\\e(B
+\e$BJ8$r;XDj$7$F$/$@$5$$!#\e(B
+
+@cartouche
+@example
+(mixi-post-topic community "\e$B%?%$%H%k\e(B" "\e$BK\J8\e(B")
+    @result{} \e$BITDj\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-post-comment parent content
+\e$B%3%a%s%H$rEj9F$7$^$9!#\e(B
+\e$B0z?t$K$OEj9F$9$k?F%*%V%8%'%/%H\e(B (\e$BF|5-\e(B/\e$B%H%T%C%/\e(B/\e$B%$%Y%s%H\e(B) \e$B$HK\J8$r;XDj$7$F\e(B
+\e$B$/$@$5$$!#\e(B
+
+@cartouche
+@example
+(mixi-post-comment diary "\e$BK\J8\e(B")
+    @result{} \e$BITDj\e(B
+@end example
+@end cartouche
+@end defun
+
+@defun mixi-post-message friend title content
+\e$B%a%C%;!<%8$rAw?.$7$^$9!#\e(B
+\e$B0z?t$K$OAw?.Aj<j$rI=$9\e(B friend \e$B%*%V%8%'%/%H$H%?%$%H%k!"K\J8$r;XDj$7$F$/$@\e(B
+\e$B$5$$!#\e(B
+
+@cartouche
+@example
+(mixi-post-message friend "\e$B%?%$%H%k\e(B" "\e$BK\J8\e(B")
+    @result{} \e$BITDj\e(B
+@end example
+@end cartouche
+@end defun
+
+@node \e$B$=$NB>$N4X?t\e(B
+@section \e$B$=$NB>$N4X?t\e(B
+
+@defun mixi-login &optional email password
+mixi \e$B$K%m%0%$%s$7$^$9!#\e(B
+@var{email} \e$B$H\e(B @var{password} \e$B$,;XDj$5$l$F$$$?>l9g$O$=$l$i$NCM$r%m%0%$%s\e(B
+\e$B;~$N\e(B E-mail \e$B$H%Q%9%o!<%I$H$7$F;HMQ$7$^$9!#\e(B
+\e$B;XDj$5$l$F$$$J$+$C$?>l9g$O\e(B @ref{mixi-default-email} \e$B$H\e(B
+@ref{mixi-default-password} \e$B$NCM$r;HMQ$7$^$9!#\e(B
+\e$B$3$l$i$NCM$b;XDj$5$l$F$$$J$+$C$?>l9g$O!"BPOCE*$KF~NO$,5a$a$i$l$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-login)
+    @result{} \e$B<+J,$rI=$9\e(B friend \e$B%*%V%8%'%/%H\e(B
+@end example
+@end cartouche
+
+\e$B3F<o>pJs<hF@4X?t$r<B9T$7$?:]!"$b$7\e(B mixi \e$B$K%m%0%$%s$7$F$$$J$+$C$?>l9g$O<+\e(B
+\e$BF0E*$K\e(B @code{mixi-login} \e$B$,<B9T$5$l$k$N$G!"L@<(E*$K%m%0%$%s4X?t$r<B9T$9\e(B
+\e$B$kI,MW$O$"$j$^$;$s!#\e(B
+@end defun
+
+@defun mixi-logout
+mixi \e$B$+$i%m%0%"%&%H$7$^$9!#\e(B
+
+@cartouche
+@example
+(mixi-logout)
+    @result{} \e$BITDj\e(B
+@end example
+@end cartouche
+@end defun
+
+@anchor{mixi-remove-markup}
+@defun mixi-remove-markup string
+
+diary \e$B%*%V%8%'%/%H$NK\J8$J$I$O\e(B HTML \e$B%?%0$,4^$^$l$?$^$^$N>uBV$G<hF@$5$l$^\e(B
+\e$B$9!#$3$N4X?t$r;HMQ$9$k$3$H$K$h$j!"$=$l$i$NJ8;zNs$+$i\e(B HTML \e$B%?%0$r<h$j=|$/\e(B
+\e$B$3$H$,$G$-$^$9!#\e(B@footnote{\e$B$?$@$7!"8=:_$3$N4X?t$O@5>o$K$9$Y$F$N%?%0$r<h$j\e(B
+\e$B=|$/$3$H$,$G$-$^$;$s!#\e(B}
+
+@cartouche
+@example
+(mixi-remove-markup (mixi-diary-content diary))
+    @result{} \e$B%?%0<h$j=|$-:Q$_J8;zNs\e(B
+@end example
+@end cartouche
+@end defun
+
+@node \e$B%+%9%?%^%$%:\e(B
+@chapter \e$B%+%9%?%^%$%:\e(B
+@cindex \e$B%f!<%6%*%W%7%g%s\e(B
+
+mixi.el \e$B$K$O%f!<%6$,F0:n$r%+%9%?%^%$%:$9$k$?$a$N$$$/$D$+$NJQ?t$,MQ0U$5$l\e(B
+\e$B$F$$$^$9!#C10l$N%*%W%7%g%s$r;XDj$7$F%+%9%?%^%$%:$9$k$?$a$K$O\e(B @kbd{M-x
+customize-option} \e$B$r!"%0%k!<%W\e(B (mixi.el \e$B$N>l9g$N%0%k!<%W$O\e(B @code{mixi})
+\e$B$KB0$9$k$9$Y$F$N%*%W%7%g%s$rJQ99$9$k$?$a$K$O\e(B @kbd{M-x customize-group}
+\e$B$r;HMQ$9$k$3$H$,$G$-$^$9!#\e(B
+
+@section \e$B%f!<%6%*%W%7%g%s0lMw\e(B
+
+@defopt mixi-url
+mixi \e$B$N%5%$%H$N\e(B URL \e$B$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@defopt mixi-directory
+\e$B%-%c%C%7%e%U%!%$%k$d%/%C%-!<$J$I$r3JG<$9$k$?$a$N%G%#%l%/%H%j$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@defopt mixi-coding-system
+mixi \e$B$N\e(B web \e$B%Z!<%8$G;HMQ$5$l$F$$$k%3!<%G%#%s%0%7%9%F%`$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@defopt mixi-curl-program
+\e$B%P%C%/%(%s%I$H$7$F\e(B @code{curl} \e$B$r;H$&>l9g$N5/F0$9$k%W%m%0%i%`L>$r;XDj$7\e(B
+\e$B$^$9!#\e(B
+@end defopt
+
+@defopt mixi-curl-cookie-file
+\e$B%P%C%/%(%s%I$H$7$F\e(B @code{curl} \e$B$r;H$&>l9g$N%/%C%-!<%U%!%$%k$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@anchor{mixi-backend}
+@defopt mixi-backend
+\e$B;HMQ$9$k%P%C%/%(%s%I$r;XDj$7$^$9!#\e(B
+
+@table @asis
+@item w3m
+Emacs Lisp \e$B%W%m%0%i%`\e(B @code{emacs-w3m} \e$B$r;HMQ$7$^$9!#\e(B
+@item url
+Emacs \e$B$KF1:-$5$l$F$$$k\e(B @file{url.el} \e$B$r;HMQ$7$^$9!#\e(B
+@item curl
+\e$B30It%W%m%0%i%`\e(B @code{curl} \e$B$r;HMQ$7$^$9!#\e(B
+@end table
+
+\e$B%P%C%/%(%s%I$rL@<(E*$K;XDj$7$J$+$C$?>l9g$O>e5-I=$N>e$+$i=gHV$K<+F0E*$K7h\e(B
+\e$BDj$5$l$^$9!#\e(B
+@end defopt
+
+@anchor{mixi-login-use-ssl}
+@defopt mixi-login-use-ssl
+mixi \e$B$K%m%0%$%s$9$k:]$K\e(B SSL \e$B$r;HMQ$9$k$+$I$&$+$r;XDj$7$^$9!#\e(B
+SSL \e$B$r;HMQ$9$k>l9g$O!"%P%C%/%(%s%I$,\e(B @code{url} \e$B$N$H$-$O30It%W%m%0%i%`$H\e(B
+\e$B$7$F\e(B @code{gnutls-cli} \e$B$"$k$$$O\e(B @code{openssl} \e$B%3%^%s%I$,I,MW$K$J$j!"%P%C\e(B
+\e$B%/%(%s%I$,\e(B @code{w3m} \e$B$N$H$-$O\e(B @option{-with-ssl} \e$B$G%3%s%Q%$%k$5$l$?\e(B
+@code{w3m} \e$B%3%^%s%I$,I,MW$K$J$j$^$9!#\e(B
+@end defopt
+
+@anchor{mixi-default-email}
+@defopt mixi-default-email
+mixi \e$B$K%m%0%$%s$9$kI,MW$,=P$?>l9g$K;HMQ$9$k%a!<%k%"%I%l%9$r;XDj$7$^$9!#\e(B
+\e$B$3$NCM$r;XDj$7$F$$$J$$>l9g$O!"BPOCE*$KF~NO$,5a$a$i$l$^$9!#\e(B
+@end defopt
+
+@anchor{mixi-default-password}
+@defopt mixi-default-password
+mixi \e$B$K%m%0%$%s$9$kI,MW$,=P$?>l9g$K;HMQ$9$k%Q%9%o!<%I$r;XDj$7$^$9!#\e(B
+\e$B$3$NCM$r;XDj$7$F$$$J$$>l9g$O!"BPOCE*$KF~NO$,5a$a$i$l$^$9!#\e(B
+@end defopt
+
+@defopt mixi-accept-adult-contents
+\e$B%"%@%k%H%+%F%4%j$N%3%_%e%K%F%#$r1\Mw$7$F$bLdBj$J$$$+$I$&$+$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@defopt mixi-continuously-access-interval
+mixi \e$B$N%5%$%H$O<+F0%D!<%k$J$I$GC;;~4V$KO"B3$7$F%"%/%;%9$7$?>l9g!"$=$N@\\e(B
+\e$BB3$r5qH]$9$k;]$N%a%C%;!<%8$rI=<($7$^$9!#\e(B
+\e$B@\B3$r5qH]$5$l$?>l9g$KBT5!$9$k\e(B@emph{\e$BIC?t\e(B}\e$B$r;XDj$7$^$9!#\e(B
+@end defopt
+
+@defopt mixi-cache-expires
+mixi \e$B%*%V%8%'%/%H$N%-%c%C%7%e$NM-8z4|8B$r;XDj$7$^$9!#\e(B
+
+@table @asis
+@item \e$B?tCM\e(B
+\e$BM-8z4|8B$r;XDj$7$??tCMIC$K@_Dj$7$^$9!#\e(B
+@item t
+\e$B>o$K4|8B@Z$l$H$7$F07$$$^$9!#\e(B
+@item nil
+\e$B>o$K4|8B$,@Z$l$F$$$J$$J*$H$7$F07$$$^$9!#\e(B
+@end table
+@end defopt
+
+@defopt mixi-cache-use-file
+mixi \e$B%*%V%8%'%/%H$N%-%c%C%7%e$r%U%!%$%k$H$7$FJ]B8$9$k$+$I$&$+$r;XDj$7$^\e(B
+\e$B$9!#\e(B@footnote{\e$B$?$@$7!"8=:_$3$N5!G=$O<BAu$5$l$F$$$^$;$s!#\e(B}
+@end defopt
+
+@node \e$BNI$/$"$k<ALd$HEz$(\e(B
+@chapter \e$BNI$/$"$k<ALd$HEz$(\e(B
+@cindex FAQ
+@cindex Tips
+
+\e$B$3$N>O$G$O$h$/J9$+$l$k<ALd$KBP$9$kEz$($HJXMx$J@_DjNc$r>R2p$7$^$9!#\e(B
+
+@section Cannot retrieve \e$B$H$$$&%(%i!<$,=P$^$9\e(B
+
+\e$B$J$s$i$+$N860x$K$h$j\e(B mixi \e$B$N%5%$%H$K@\B3$G$-$J$+$C$?>l9g!"0J2<$N$h$&$J%(\e(B
+\e$B%i!<$,H/@8$9$k$3$H$,$"$k$+$b$7$l$^$;$s!#\e(B
+
+@example
+mixi-url-retrieve: [mixi] Cannot retrieve: http://@dots{}
+@end example
+
+@noindent
+\e$B$=$N$h$&$J>l9g$O0J2<$r3NG'$7$F$_$F$/$@$5$$!#\e(B
+
+@itemize
+@item \e$BDL?.2s@~$K0[>o$,$J$$$+$I$&$+\e(B
+@item mixi \e$B$N%5%$%H$,%a%s%FCf$"$k$$$O%@%&%s$7$F$$$J$$$+$I$&$+\e(B
+@item \e$B;HMQ$7$F$$$k%P%C%/%(%s%I$G%(%i!<$G<($5$l$?%Z!<%8$K%"%/%;%9$G$-$k$+\e(B
+\e$B$I$&$+\e(B
+@end itemize
+
+@section \e$B%;%-%e%j%F%#$,?4G[$J$N$G\e(B SSL \e$B$G%m%0%$%s$7$?$$$N$G$9$,\e(B
+
+@ref{mixi-login-use-ssl} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$G\e(B SSL \e$B$G%m%0%$%s$9$k\e(B
+\e$B$h$&$K@_Dj$G$-$^$9!#\e(B
+
+@node \e$B%P%0%l%]!<%H\e(B
+@chapter \e$B%P%0%l%]!<%H\e(B
+
+mixi.el \e$B$r;HMQ$7$F$$$k$HM=4|$;$L%(%i!<$,I=<($5$l$?$j!"$"$k$$$O$"$J$?$N4|\e(B
+\e$BBT$7$?F0:n$r$7$J$$$3$H$,$"$k$+$b$7$l$^$;$s!#\e(Bmixi.el \e$B$r:G?7HG$K$7$F$b$J$*\e(B
+\e$BLdBj$,2r>C$5$l$J$$>l9g!"$=$l$O\e(B mixi.el \e$B$NIT6q9g$N2DG=@-$,$"$j$^$9!#\e(B
+
+@section \e$B%(%i!<$,I=<($5$l$k>l9g\e(B
+
+\e$B%(%i!<$,I=<($5$l$k>l9g$O%P%C%/%H%l!<%9$r<hF@$7$F%G%P%C%0$K$46(NO$/$@$5$$!#\e(B
+\e$B%P%C%/%H%l!<%9$N<hF@J}K!$O0J2<$N\e(B URL \e$B$,;29M$K$J$j$^$9!#\e(B
+
+@uref{http://www.jpl.org/elips/BUGS-ja.html,
+\e$B%W%m%0%i%`$N:n<T$K%P%0$rCN$i$;$kJ}K!\e(B (\e$B=i?4<T8~$1\e(B)}
+
+\e$B%P%C%/%H%l!<%9$,<hF@$G$-$?$i$=$l$r$J$s$i$+$NJ}K!$G:n<T$KFO$1$kI,MW$,$"$j\e(B
+\e$B$^$9$,!";DG0$J$3$H$K\e(B mixi \e$B$N%a%C%;!<%8$O%U%!%$%k$NE:IU$,$G$-$^$;$s!#\e(B
+\e$B%a!<%k!"$I$3$+$N%"%C%W%m!<%@!"\e(BWeb \e$B%5%$%H!"\e(BFTP \e$B%5%$%H!"<jCJ$O$J$s$G$b9=$$\e(B
+\e$B$^$;$s$N$G!"$J$s$i$+$NJ}K!$G:n<T$^$G$=$l$rFO$1$F$/$@$5$$!#\e(B
+\e$B$5$i$K!"F1$8IT6q9g$G:$$C$F$$$k?M$,B>$K$b$$$k$+$b$7$l$^$;$s$N$G!"%(%i!<$N\e(B
+\e$BFbMF$r\e(B 
+@uref{http://mixi.jp/view_community.pl?id=1596390, mixi.el \e$B%3%_%e%K%F%#\e(B}
+\e$BFb$N\e(B@emph{\e$BIT6q9gJs9p\e(B}\e$B%H%T%C%/$X$bEj9F$7$F$/$@$5$$!#\e(B
+
+\e$B$J$*!"%P%C%/%H%l!<%9Fb$K$OI=<($7$h$&$H$7$F$$$?\e(B mixi \e$B%Z!<%8$NFbMF$,4^$^$l\e(B
+\e$B$F$$$^$9!#$G$-$k$@$1%W%i%$%P%7!<>eLdBj$J$$$HH=CG$5$l$k:F8=<j=g$G$N%P%C%/\e(B
+\e$B%H%l!<%9<hF@$r$*4j$$$7$^$9!#2<<j$KFbMF$r2~$6$s$5$l$^$9$H%G%P%C%0$K;Y>c$rMh\e(B
+\e$B$?$92DG=@-$,$"$j$^$9$N$G$4Cm0U$/$@$5$$!#\e(B
+
+@section \e$B4|BT$7$?F0:n$r$7$J$$>l9g\e(B
+
+\e$B;EMM$+IT6q9g$+$OJ,$+$i$J$$$1$l$I4|BT$7$?F0:n$r$7$J$$>l9g!":GDc8B0J2<$NFb\e(B
+\e$BMF$r$G$-$k$@$1>\:Y$G6qBNE*$K\e(B 
+@uref{http://mixi.jp/view_community.pl?id=1596390, mixi.el \e$B%3%_%e%K%F%#\e(B}
+\e$BFb$N\e(B@emph{\e$BIT6q9gJs9p\e(B}\e$B%H%T%C%/$XEj9F$7$F$/$@$5$$!#\e(B
+
+@itemize @bullet
+@item \e$B$I$&$$$&F0:n$r4|BT$7$F\e(B
+@item \e$B$I$&$$$&A`:n$r9T$J$C$?$,\e(B
+@item \e$B$I$&$$$&7k2L$,F@$i$l$?\e(B
+@end itemize
+
+@section \e$BIT6q9gBP1~$K$*$1$k$*4j$$\e(B
+
+\e$BIT6q9g$NJs9p$r<u$1$?$i$G$-$k$@$1Aa5^$K3NG'$7$?$$$H$O;W$$$^$9$,!"J?F|Ck4V\e(B
+\e$B$N;E;v$r$7$F$$$k4V$d!"5YF|M7$S$K9T$C$F$$$k4V$J$I$OBP1~$,CY$l$k$3$H$,$"$j\e(B
+\e$B$^$9!#$5$i$K!"\e(B24 \e$B;~4V<+J,$N<+M3$K?($l$k\e(B PC \e$B$NA0$K$$$k$o$1$G$b$"$j$^$;$s!#\e(B
+\e$B$G$9$N$G!VIT6q9gJs9p%H%T%C%/$KEj9F$7$?$N$K$^$C$?$/H?1~$,L5$$!W$J$I$H8@$C\e(B
+\e$B$?M}M3$GB-$"$H$r$D$1$^$/$C$FG4Ce$7$?$j!"%a%C%;!<%8$rAw$C$F$-$?$j$7$J$$$G\e(B
+\e$B$/$@$5$$!#\e(B
+
+\e$B$5$i$K!";d$O\e(B mixi.el \e$B$H\e(B Gnus \e$B$r>o;~5/F0$7$?$^$^$K$7$F\e(B mixi \e$B$K<+F0$G%"%/\e(B
+\e$B%;%9$7$F$$$^$9!#\e(B
+\e$B:G=*%m%0%$%s$,\e(B 5 \e$BJ,0JFb$J$I$H$J$C$F$$$F$b\e(B PC \e$B$NA0$K$$$k$H$O8B$j$^$;$s$N\e(B
+\e$B$G!V\e(Bmixi \e$B8+$F$k$N$K$^$C$?$/H?1~$,L5$$!W$J$I$H8@$C$?M}M3$GB-$"$H$r$D$1$^\e(B
+\e$B$/$C$FG4Ce$7$?$j!"%a%C%;!<%8$rAw$C$F$-$?$j$7$J$$$G$/$@$5$$!#\e(B
+
+@node \e$B35G0:w0z\e(B
+@unnumbered \e$B35G0:w0z\e(B
+@printindex cp
+
+@node \e$B4X?t:w0z\e(B
+@unnumbered \e$B4X?t:w0z\e(B
+@printindex fn
+
+@node \e$BJQ?t:w0z\e(B
+@unnumbered \e$BJQ?t:w0z\e(B
+@printindex vr
+
+@contents
+
+@bye
+
+@c Local Variables:
+@c fill-column: 72
+@c End:
diff --git a/ptexinfmt.el b/ptexinfmt.el
new file mode 100644 (file)
index 0000000..4904f03
--- /dev/null
@@ -0,0 +1,1025 @@
+;;; ptexinfmt.el -- portable Texinfo formatter.
+
+;; Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993,
+;;               1994, 1995, 1996, 1997 Free Software Foundation, Inc.
+;; Copyright (C) 1999 Yoshiki Hayashi <yoshiki@xemacs.org>
+;; Copyright (C) 2000, 2001, 2002 TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+;; Author: TAKAHASHI Kaoru <kaoru@kaisei.org>
+;;     Yoshiki Hayashi <yoshiki@xemacs.org>
+;;     Katsumi Yamaoka <yamaoka@jpl.org>
+;; Maintainer: TAKAHASHI Kaoru <kaoru@kaisei.org>
+;; Created: 7 Jul 2000
+;; Keywords: maint, tex, docs, emulation, compatibility
+
+;; This program 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, 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 GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; Original code: Yoshiki Hayashi <yoshiki@xemacs.org>
+;;     makeinfo.el (gnujdoc project)
+
+;; Support texinfmt.el 2.32 or later.
+
+;; Modified by Yamaoka not to use APEL functions.
+
+;; Unimplemented command:
+;;  @abbr
+;;  @float, @caption, @shortcaption, @listoffloats
+;;  @deftypecv[x]
+;;  @headitem
+;;  @comma{}
+;;  @quotation (optional arguments)
+;;  @acronym (optional argument)
+;;  @dofirstparagraphindent
+;;  @indent
+;;  @verbatiminclude
+;;  @\
+;;  @definfoenclose
+;;  @deftypeivar
+;;  @deftypeop
+;;  @allowcodebreaks
+
+;;; Code:
+
+(require 'texinfmt)
+
+;;; Broken
+(defvar ptexinfmt-disable-broken-notice-flag t
+  "If non-nil disable notice, when call `ptexinfmt-broken-facility'.
+This is last argument in `ptexinfmt-broken-facility'.")
+
+(put 'ptexinfmt-broken-facility 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-broken-facility (facility docstring assertion
+                                             &optional dummy)
+  "Declare a symbol FACILITY is broken if ASSERTION is nil.
+DOCSTRING will be printed if ASSERTION is nil and
+`ptexinfmt-disable-broken-notice-flag' is nil."
+  `(let ((facility ',facility)
+        (docstring ,docstring)
+        (assertion (eval ',assertion)))
+     (put facility 'broken (not assertion))
+     (if assertion
+        nil
+       (put facility 'broken-docstring docstring)
+       (if ptexinfmt-disable-broken-notice-flag
+          nil
+        (message "BROKEN FACILITY DETECTED: %s" docstring)))))
+
+(put 'ptexinfmt-defun-if-broken 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defun-if-broken (&rest args)
+  "Redefine a function just like `defun' if it is considered broken."
+  (let ((name (list 'quote (car args))))
+    (setq args (cdr args))
+    `(prog1
+        ,name
+       (if (get ,name 'broken)
+          (defalias ,name
+            (function (lambda ,@args)))))))
+
+(put 'ptexinfmt-defun-if-void 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defun-if-void (&rest args)
+  "Define a function just like `defun' unless it is already defined."
+  (let ((name (list 'quote (car args))))
+    (setq args (cdr args))
+    `(prog1
+        ,name
+       (if (fboundp ,name)
+          nil
+        (defalias ,name
+          (function (lambda ,@args)))))))
+
+(put 'ptexinfmt-defvar-if-void 'lisp-indent-function 'defun)
+(defmacro ptexinfmt-defvar-if-void (&rest args)
+  "Define a variable just like `defvar' unless it is already defined."
+  (let ((name (car args)))
+    (setq args (cdr args))
+    `(prog1
+        (defvar ,name)
+       (if (boundp ',name)
+          nil
+        (defvar ,name ,@args)))))
+
+;; sort -fd
+(ptexinfmt-broken-facility texinfo-format-printindex
+  "Can't sort on Mule for Windows."
+  (if (and (memq system-type '(windows-nt ms-dos))
+;;; I don't know version threshold.
+;;;       (string< texinfmt-version "2.37 of 24 May 1997")
+          (boundp 'MULE) (not (featurep 'meadow))) ; Mule for Windows
+      nil
+    t))
+
+;; @var
+(ptexinfmt-broken-facility texinfo-format-var
+  "Don't perse @var argument."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@var{@asis{foo}}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil)))
+
+;; @xref
+(ptexinfmt-broken-facility texinfo-format-xref
+  "Can't format @xref, 1st argument is empty."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@xref{, xref, , file}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil)))
+
+;; @uref
+(ptexinfmt-broken-facility texinfo-format-uref
+  "Parse twice @uref argument."
+  (condition-case nil
+      (with-temp-buffer
+       (let (texinfo-enclosure-list texinfo-alias-list)
+         (texinfo-mode)
+         (insert "@uref{mailto:foo@@noncommand.example.com}\n")
+         (texinfo-format-expand-region (point-min) (point-max))
+         t))
+    (error nil)))
+
+;; @multitable
+(ptexinfmt-broken-facility texinfo-multitable-widths
+  "`texinfo-multitable-widths' unsupport wide-char."
+  (if (fboundp 'texinfo-multitable-widths)
+      (with-temp-buffer
+       (let ((str "\e$BI}9-J8;z\e(B"))
+         (texinfo-mode)
+         (insert (format " {%s}\n" str))
+         (goto-char (point-min))
+         (if (= (car (texinfo-multitable-widths)) (length str))
+             t
+           nil)))
+    ;; function definition is void
+    nil))
+
+(ptexinfmt-broken-facility texinfo-multitable-item
+  "`texinfo-multitable-item' unsupport wide-char."
+  (not (get 'texinfo-multitable-widths 'broken)))
+
+
+;;; Hardcopy and HTML (discard)
+;; html
+(put 'documentlanguage 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'documentencoding 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'documentdescription 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; size
+(put 'smallbook 'texinfo-format 'texinfo-discard-line)
+(put 'letterpaper 'texinfo-format 'texinfo-discard-line)
+(put 'afourpaper 'texinfo-format 'texinfo-discard-line)
+(put 'afourlatex 'texinfo-format 'texinfo-discard-line)
+(put 'afourwide 'texinfo-format 'texinfo-discard-line)
+(put 'afivepaper 'texinfo-format 'texinfo-discard-line)
+(put 'pagesizes 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; style
+(put 'setchapternewpage 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'kbdinputstyle 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; flags
+(put 'setcontentsaftertitlepage 'texinfo-format 'texinfo-discard-line)
+(put 'setshortcontentsaftertitlepage 'texinfo-format 'texinfo-discard-line)
+(put 'novalidate 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'frenchspacing 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; head & foot
+(put 'headings 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'evenfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'evenheading 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'oddfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'oddheading 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'everyfooting 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'everyheading 'texinfo-format 'texinfo-discard-line-with-args)
+
+;; misc
+(put 'page 'texinfo-format 'texinfo-discard-line)
+(put 'hyphenation 'texinfo-format 'texinfo-discard-command-and-arg)
+
+;; @slanted{} (makeinfo 4.8 or later)
+(put 'slanted 'texinfo-format 'texinfo-format-noop)
+
+;; @sansserif{} (makeinfo 4.8 or later)
+(put 'sansserif 'texinfo-format 'texinfo-format-noop)
+
+;; @tie{} (makeinfo 4.3 or later)
+(put 'tie 'texinfo-format 'texinfo-format-tie)
+(ptexinfmt-defun-if-void texinfo-format-tie ()
+  (texinfo-parse-arg-discard)
+  (insert " "))
+
+\f
+;;; Directory File
+;; @direcategory
+(put 'dircategory 'texinfo-format 'texinfo-format-dircategory)
+(ptexinfmt-defun-if-void texinfo-format-dircategory ()
+  (let ((str (texinfo-parse-arg-discard)))
+    (delete-region (point)
+                  (progn
+                    (skip-chars-forward " ")
+                    (point)))
+    (insert "INFO-DIR-SECTION " str "\n")))
+
+;; @direntry
+(put 'direntry 'texinfo-format 'texinfo-format-direntry)
+(ptexinfmt-defun-if-void texinfo-format-direntry ()
+  (texinfo-push-stack 'direntry nil)
+  (texinfo-discard-line)
+  (insert "START-INFO-DIR-ENTRY\n"))
+
+(put 'direntry 'texinfo-end 'texinfo-end-direntry)
+(ptexinfmt-defun-if-void texinfo-end-direntry ()
+  (texinfo-discard-command)
+  (insert "END-INFO-DIR-ENTRY\n\n")
+  (texinfo-pop-stack 'direntry))
+
+
+;;; Block Enclosing
+;; @detailmenu ... @end detailmenu
+(put 'detailmenu 'texinfo-format 'texinfo-discard-line)
+(put 'detailmenu 'texinfo-end 'texinfo-discard-command)
+
+;; @smalldisplay ... @end smalldisplay
+(put 'smalldisplay 'texinfo-format 'texinfo-format-example)
+(put 'smalldisplay 'texinfo-end 'texinfo-end-example)
+
+;; @smallformat ... @end smallformat
+(put 'smallformat 'texinfo-format 'texinfo-format-flushleft)
+(put 'smallformat 'texinfo-end 'texinfo-end-flushleft)
+
+;; @cartouche  ... @end cartouche
+(put 'cartouche 'texinfo-format 'texinfo-discard-line)
+(put 'cartouche 'texinfo-end 'texinfo-discard-command)
+
+
+;;; Conditional
+;; @ifnottex ... @end ifnottex (makeinfo 3.11 or later)
+(put 'ifnottex 'texinfo-format 'texinfo-discard-line)
+(put 'ifnottex 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnothtml ... @end ifnothtml (makeinfo 3.11 or later)
+(put 'ifnothtml 'texinfo-format 'texinfo-discard-line)
+(put 'ifnothtml 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnotplaintext ... @end ifnotplaintext (makeinfo 4.2 or later)
+(put 'ifnotplaintext 'texinfo-format 'texinfo-discard-line)
+(put 'ifnotplaintext 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnotdocbook ... @end ifnotdocbook (makeinfo 4.7 or later)
+(put 'ifnotdocbook 'texinfo-format 'texinfo-discard-line)
+(put 'ifnotdocbook 'texinfo-end 'texinfo-discard-command)
+
+;; @ifnotinfo ... @end ifnotinfo (makeinfo 3.11 or later)
+(put 'ifnotinfo 'texinfo-format 'texinfo-format-ifnotinfo)
+(ptexinfmt-defun-if-void texinfo-format-ifnotinfo ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end ifnotinfo[ \t]*\n")
+                       (point))))
+
+;; @html ... @end html (makeinfo 3.11 or later)
+(put 'html 'texinfo-format 'texinfo-format-html)
+(ptexinfmt-defun-if-void texinfo-format-html ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end html[ \t]*\n")
+                       (point))))
+
+;; @docbook ... @end docbook (makeinfo 4.7 or later)
+(put 'docbook 'texinfo-format 'texinfo-format-docbook)
+(ptexinfmt-defun-if-void texinfo-format-docbook ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end docbook[ \t]*\n")
+                       (point))))
+
+;; @ifhtml ... @end ifhtml (makeinfo 3.8 or later)
+(put 'ifhtml 'texinfo-format 'texinfo-format-ifhtml)
+(defun texinfo-format-ifhtml ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end ifhtml[ \t]*\n")
+                       (point))))
+
+;; @ifplaintext ... @end ifplaintext (makeinfo 4.2 or later)
+(put 'ifplaintext 'texinfo-format 'texinfo-format-ifplaintext)
+(ptexinfmt-defun-if-void texinfo-format-ifplaintext ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end ifplaintext[ \t]*\n")
+                       (point))))
+
+;; @ifdocbook ... @end ifdocbook (makeinfo 4.7 or later)
+(put 'ifdocbook 'texinfo-format 'texinfo-format-ifdocbook)
+(ptexinfmt-defun-if-void texinfo-format-ifdocbook ()
+  (delete-region texinfo-command-start
+                (progn (re-search-forward "@end ifdocbook[ \t]*\n")
+                       (point))))
+
+\f
+;;; Marking
+;; @indicateurl, @url, @env, @command, 
+(put 'env 'texinfo-format 'texinfo-format-code)
+(put 'command 'texinfo-format 'texinfo-format-code)
+
+(put 'indicateurl 'texinfo-format 'texinfo-format-code)
+(put 'url 'texinfo-format 'texinfo-format-uref)        ; Texinfo 4.7
+
+;; @acronym
+(put 'acronym 'texinfo-format 'texinfo-format-var)
+
+(ptexinfmt-defun-if-broken texinfo-format-var ()
+  (let ((arg (texinfo-parse-expanded-arg)))
+    (texinfo-discard-command)
+    (insert (upcase arg))))
+
+;; @key
+(put 'key 'texinfo-format 'texinfo-format-key)
+(ptexinfmt-defun-if-void texinfo-format-key ()
+  (insert (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @email{EMAIL-ADDRESS[, DISPLAYED-TEXT]}
+(put 'email 'texinfo-format 'texinfo-format-email)
+(ptexinfmt-defun-if-void texinfo-format-email ()
+  "Format EMAIL-ADDRESS and optional DISPLAYED-TXT.
+Insert < ... > around EMAIL-ADDRESS."
+  (let ((args (texinfo-format-parse-args)))
+  (texinfo-discard-command)
+    ;; if displayed-text
+    (if (nth 1 args)
+       (insert (nth 1 args) " <" (nth 0 args) ">")
+      (insert "<" (nth 0 args) ">"))))
+
+;; @option
+(put 'option 'texinfo-format 'texinfo-format-option)
+(ptexinfmt-defun-if-void texinfo-format-option ()
+  "Insert ` ... ' around arg unless inside a table; in that case, no quotes."
+  ;; `looking-at-backward' not available in v. 18.57, 20.2
+  ;; searched-for character is a control-H
+  (if (not (search-backward "\010"
+                           (save-excursion (beginning-of-line) (point))
+                           t))
+      (insert "`" (texinfo-parse-arg-discard) "'")
+    (insert (texinfo-parse-arg-discard)))
+  (goto-char texinfo-command-start))
+
+;; @verb{<char>TEXT<char>}  (makeinfo 4.1 or later)
+(put 'verb 'texinfo-format 'texinfo-format-verb)
+(ptexinfmt-defun-if-void texinfo-format-verb ()
+  "Format text between non-quoted unique delimiter characters verbatim.
+Enclose the verbatim text, including the delimiters, in braces.  Print
+text exactly as written (but not the delimiters) in a fixed-width.
+
+For example, @verb\{|@|\} results in @ and
+@verb\{+@'e?`!`+} results in @'e?`!`."
+
+  (let ((delimiter (buffer-substring-no-properties
+                   (1+ texinfo-command-end) (+ 2 texinfo-command-end))))
+    (unless (looking-at "{")
+      (error "Not found: @verb start brace"))
+    (delete-region texinfo-command-start (+ 2 texinfo-command-end))
+    (search-forward  delimiter))
+  (delete-backward-char 1)
+  (unless (looking-at "}")
+    (error "Not found: @verb end brace"))
+  (delete-char 1))
+
+\f
+;;; @LaTeX, @registeredsymbol{}
+(put 'LaTeX 'texinfo-format 'texinfo-format-LaTeX)
+(ptexinfmt-defun-if-void texinfo-format-LaTeX ()
+  (texinfo-parse-arg-discard)
+  (insert "LaTeX"))
+
+(put 'registeredsymbol 'texinfo-format 'texinfo-format-registeredsymbol)
+(ptexinfmt-defun-if-void texinfo-format-registeredsymbol ()
+  (texinfo-parse-arg-discard)
+  (insert "(R)"))
+
+;;; Accents and Special characters
+;; @euro{}     ==>     Euro
+(put 'euro 'texinfo-format 'texinfo-format-euro)
+(ptexinfmt-defun-if-void texinfo-format-euro ()
+  (texinfo-parse-arg-discard)
+  (insert "Euro "))
+
+;; @pounds{}   ==>     #       Pounds Sterling
+(put 'pounds 'texinfo-format 'texinfo-format-pounds)
+(ptexinfmt-defun-if-void texinfo-format-pounds ()
+  (texinfo-parse-arg-discard)
+  (insert "#"))
+
+;; @ordf{}     ==>     a       Spanish feminine
+(put 'ordf 'texinfo-format 'texinfo-format-ordf)
+(ptexinfmt-defun-if-void texinfo-format-ordf ()
+  (texinfo-parse-arg-discard)
+  (insert "a"))
+
+;; @ordm{}     ==>     o       Spanish masculine
+(put 'ordm 'texinfo-format 'texinfo-format-ordm)
+(ptexinfmt-defun-if-void texinfo-format-ordm ()
+  (texinfo-parse-arg-discard)
+  (insert "o"))
+
+;; @OE{}       ==>     OE      French-OE-ligature
+(put 'OE 'texinfo-format 'texinfo-format-French-OE-ligature)
+(ptexinfmt-defun-if-void texinfo-format-French-OE-ligature ()
+  (insert "OE" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @oe{}       ==>     oe
+(put 'oe 'texinfo-format 'texinfo-format-French-oe-ligature)
+(ptexinfmt-defun-if-void texinfo-format-French-oe-ligature () ; lower case
+  (insert "oe" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @AA{}       ==>     AA      Scandinavian-A-with-circle
+(put 'AA 'texinfo-format 'texinfo-format-Scandinavian-A-with-circle)
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-A-with-circle ()
+  (insert "AA" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @aa{}       ==>     aa
+(put 'aa 'texinfo-format 'texinfo-format-Scandinavian-a-with-circle)
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-a-with-circle () ; lower case
+  (insert "aa" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @AE{}       ==>     AE      Latin-Scandinavian-AE
+(put 'AE 'texinfo-format 'texinfo-format-Latin-Scandinavian-AE)
+(ptexinfmt-defun-if-void texinfo-format-Latin-Scandinavian-AE ()
+  (insert "AE" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ae{}       ==>     ae
+(put 'ae 'texinfo-format 'texinfo-format-Latin-Scandinavian-ae)
+(ptexinfmt-defun-if-void texinfo-format-Latin-Scandinavian-ae () ; lower case
+  (insert "ae" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ss{}       ==>     ss      German-sharp-S
+(put 'ss 'texinfo-format 'texinfo-format-German-sharp-S)
+(ptexinfmt-defun-if-void texinfo-format-German-sharp-S ()
+  (insert "ss" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @questiondown{}     ==>     ?       upside-down-question-mark
+(put 'questiondown 'texinfo-format 'texinfo-format-upside-down-question-mark)
+(ptexinfmt-defun-if-void texinfo-format-upside-down-question-mark ()
+  (insert "?" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @exclamdown{}       ==>     !       upside-down-exclamation-mark
+(put 'exclamdown 'texinfo-format 'texinfo-format-upside-down-exclamation-mark)
+(ptexinfmt-defun-if-void texinfo-format-upside-down-exclamation-mark ()
+  (insert "!" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @L{}                ==>     L/      Polish suppressed-L (Lslash)
+(put 'L 'texinfo-format 'texinfo-format-Polish-suppressed-L)
+(ptexinfmt-defun-if-void texinfo-format-Polish-suppressed-L ()
+  (insert (texinfo-parse-arg-discard) "/L")
+  (goto-char texinfo-command-start))
+
+;; @l{}                ==>     l/      Polish suppressed-L (Lslash) (lower case)
+(put 'l 'texinfo-format 'texinfo-format-Polish-suppressed-l-lower-case)
+(ptexinfmt-defun-if-void texinfo-format-Polish-suppressed-l-lower-case ()
+  (insert (texinfo-parse-arg-discard) "/l")
+  (goto-char texinfo-command-start))
+
+;; @O{}                ==>     O/      Scandinavian O-with-slash
+(put 'O 'texinfo-format 'texinfo-format-Scandinavian-O-with-slash)
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-O-with-slash ()
+  (insert (texinfo-parse-arg-discard) "O/")
+  (goto-char texinfo-command-start))
+
+;; @o{}                ==>     o/      Scandinavian O-with-slash (lower case)
+(put 'o 'texinfo-format 'texinfo-format-Scandinavian-o-with-slash-lower-case)
+(ptexinfmt-defun-if-void texinfo-format-Scandinavian-o-with-slash-lower-case ()
+  (insert (texinfo-parse-arg-discard) "o/")
+  (goto-char texinfo-command-start))
+
+;; @,{c}       ==>     c,      cedilla accent
+(put '\, 'texinfo-format 'texinfo-format-cedilla-accent)
+(ptexinfmt-defun-if-void texinfo-format-cedilla-accent ()
+  (insert (texinfo-parse-arg-discard) ",")
+  (goto-char texinfo-command-start))
+
+
+;; @dotaccent{o}       ==>     .o      overdot-accent
+(put 'dotaccent 'texinfo-format 'texinfo-format-overdot-accent)
+(ptexinfmt-defun-if-void texinfo-format-overdot-accent ()
+  (insert "." (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ubaraccent{o}      ==>     _o      underbar-accent
+(put 'ubaraccent 'texinfo-format 'texinfo-format-underbar-accent)
+(ptexinfmt-defun-if-void texinfo-format-underbar-accent ()
+  (insert "_" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @udotaccent{o}      ==>     o-.     underdot-accent
+(put 'udotaccent 'texinfo-format 'texinfo-format-underdot-accent)
+(ptexinfmt-defun-if-void texinfo-format-underdot-accent ()
+  (insert (texinfo-parse-arg-discard) "-.")
+  (goto-char texinfo-command-start))
+
+;; @H{o}       ==>     ""o     long Hungarian umlaut
+(put 'H 'texinfo-format 'texinfo-format-long-Hungarian-umlaut)
+(ptexinfmt-defun-if-void texinfo-format-long-Hungarian-umlaut ()
+  (insert "\"\"" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @ringaccent{o}      ==>     *o      ring accent
+(put 'ringaccent 'texinfo-format 'texinfo-format-ring-accent)
+(ptexinfmt-defun-if-void texinfo-format-ring-accent ()
+  (insert "*" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @tieaccent{oo}      ==>     [oo     tie after accent
+(put 'tieaccent 'texinfo-format 'texinfo-format-tie-after-accent)
+(ptexinfmt-defun-if-void texinfo-format-tie-after-accent ()
+  (insert "[" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @u{o}       ==>     (o      breve accent
+(put 'u 'texinfo-format 'texinfo-format-breve-accent)
+(ptexinfmt-defun-if-void texinfo-format-breve-accent ()
+  (insert "(" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @v{o}       ==>     <o      hacek accent
+(put 'v 'texinfo-format 'texinfo-format-hacek-accent)
+(ptexinfmt-defun-if-void texinfo-format-hacek-accent ()
+  (insert "<" (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @dotless{i} ==>     i       dotless i and dotless j
+(put 'dotless 'texinfo-format 'texinfo-format-dotless)
+(ptexinfmt-defun-if-void texinfo-format-dotless ()
+  (insert (texinfo-parse-arg-discard))
+  (goto-char texinfo-command-start))
+
+;; @.
+(put '\. 'texinfo-format 'texinfo-format-\.)
+(ptexinfmt-defun-if-void texinfo-format-\. ()
+  (texinfo-discard-command)
+  (insert "."))
+
+;; @:
+(put '\: 'texinfo-format 'texinfo-format-\:)
+(ptexinfmt-defun-if-void texinfo-format-\: ()
+  (texinfo-discard-command))
+
+;; @-
+(put '\- 'texinfo-format 'texinfo-format-soft-hyphen)
+(ptexinfmt-defun-if-void texinfo-format-soft-hyphen ()
+  (texinfo-discard-command))
+
+;; @/
+(put '\/ 'texinfo-format 'texinfo-format-\/)
+(ptexinfmt-defun-if-void texinfo-format-\/ ()
+  (texinfo-discard-command))
+
+\f
+;;; Cross References
+;; @ref, @xref
+(put 'ref 'texinfo-format 'texinfo-format-xref)
+
+(ptexinfmt-defun-if-broken texinfo-format-xref ()
+  (let ((args (texinfo-format-parse-args)))
+    (texinfo-discard-command)
+    (insert "*Note ")
+    (let ((fname (or (nth 1 args) (nth 2 args))))
+      (if (null (or fname (nth 3 args)))
+         (insert (nth 0 args) "::")
+       (insert (or fname (nth 0 args)) ": ")
+       (if (nth 3 args)
+           (insert "(" (nth 3 args) ")"))
+       (unless (null (nth 0 args))
+         (insert (nth 0 args)))))))
+
+;; @uref{URL [,TEXT] [,REPLACEMENT]}
+(put 'uref 'texinfo-format 'texinfo-format-uref)
+(ptexinfmt-defun-if-broken texinfo-format-uref ()
+  "Format URL and optional URL-TITLE.
+Insert ` ... ' around URL if no URL-TITLE argument;
+otherwise, insert URL-TITLE followed by URL in parentheses."
+  (let ((args (texinfo-format-parse-args)))
+    (texinfo-discard-command)
+    ;; if url-title
+    (if (nth 1 args)
+       (insert  (nth 1 args) " (" (nth 0 args) ")")
+      (insert "`" (nth 0 args) "'"))))
+
+;; @inforef
+(put 'inforef 'texinfo-format 'texinfo-format-inforef)
+(ptexinfmt-defun-if-void texinfo-format-inforef ()
+  (let ((args (texinfo-format-parse-args)))
+    (texinfo-discard-command)
+    (if (nth 1 args)
+       (insert "*Note " (nth 1 args) ": (" (nth 2 args) ")" (car args))
+      (insert "*Note " "(" (nth 2 args) ")" (car args) "::"))))
+
+
+;; @anchor
+;; don't emulation
+;; If support @anchor for Mule 2.3, We must fix informat.el and info.el:
+;;  - Info-tagify suport @anthor-*-refill.
+;;  - info.el support Ref in Tag table.
+(unless (get 'anchor 'texinfo-format)
+  (put 'anchor 'texinfo-format 'texinfo-discard-command-and-arg))
+
+
+\f
+;;; New command definition
+;; @alias NEW=EXISTING
+(put 'alias 'texinfo-format 'texinfo-alias)
+(ptexinfmt-defun-if-void texinfo-alias ()
+  (let ((start (1- (point)))
+       args)
+    (skip-chars-forward " ")
+    (save-excursion (end-of-line) (setq texinfo-command-end (point)))
+    (if (not (looking-at "\\([^=]+\\)=\\(.*\\)"))
+       (error "Invalid alias command")
+      (setq texinfo-alias-list
+           (cons
+            (cons
+             (buffer-substring (match-beginning 1) (match-end 1))
+             (buffer-substring (match-beginning 2) (match-end 2)))
+            texinfo-alias-list))
+      (texinfo-discard-command))))
+
+\f
+;;; Indent
+;; @exampleindent INDENT  (makeinfo 4.0 or later)
+
+;; @paragraphindent INDENT  (makeinfo 4.0 or later)
+;; INDENT: asis, 0, n
+
+;; @firstparagraphindent WORD   (makeinfo 4.6 or later)
+;; WORD: none, insert
+
+
+\f
+;;; Special
+;; @image{FILENAME [, WIDTH] [, HEIGHT]}
+(put 'image 'texinfo-format 'texinfo-format-image)
+(ptexinfmt-defun-if-void texinfo-format-image ()
+  ;; I don't know makeinfo parse FILENAME.
+  (let ((args (texinfo-format-parse-args))
+       filename)
+    (when (null (nth 0 args))
+      (error "Invalid image command"))
+    (texinfo-discard-command)
+    ;; makeinfo uses FILENAME.txt
+    (setq filename (format "%s.txt" (nth 0 args)))
+    (message "Reading included file: %s" filename)
+    ;; verbatim for Info output
+    (goto-char (+ (point) (cadr (insert-file-contents filename))))
+    (message "Reading included file: %s...done" filename)))
+
+;; @hyphenation command discards an argument within braces
+(put 'hyphenation 'texinfo-format 'texinfo-discard-command-and-arg)
+(ptexinfmt-defun-if-void texinfo-discard-command-and-arg ()
+  "Discard both @-command and its argument in braces."
+  (goto-char texinfo-command-end)
+  (forward-list 1)
+  (setq texinfo-command-end (point))
+  (delete-region texinfo-command-start texinfo-command-end))
+
+\f
+;;; @multitable ... @end multitable
+(ptexinfmt-defvar-if-void texinfo-extra-inter-column-width 0
+  "*Number of extra spaces between entries (columns) in @multitable.")
+
+(ptexinfmt-defvar-if-void texinfo-multitable-buffer-name
+  "*multitable-temporary-buffer*")
+(ptexinfmt-defvar-if-void texinfo-multitable-rectangle-name
+  "texinfo-multitable-temp-")
+
+;; These commands are defined in texinfo.tex for printed output.
+(put 'multitableparskip 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitableparindent 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitablecolmargin 'texinfo-format 'texinfo-discard-line-with-args)
+(put 'multitablelinespace 'texinfo-format 'texinfo-discard-line-with-args)
+
+(put 'multitable 'texinfo-format 'texinfo-multitable)
+
+(ptexinfmt-defun-if-void texinfo-multitable ()
+  "Produce multi-column tables."
+
+;; This function pushes information onto the `texinfo-stack'.
+;; A stack element consists of:
+;;   - type-of-command, i.e., multitable
+;;   - the information about column widths, and
+;;   - the position of texinfo-command-start.
+;; e.g., ('multitable (1 2 3 4) 123)
+;; The command line is then deleted.
+  (texinfo-push-stack
+   'multitable
+   ;; push width information on stack
+   (texinfo-multitable-widths))
+  (texinfo-discard-line-with-args))
+
+(put 'multitable 'texinfo-end 'texinfo-end-multitable)
+(ptexinfmt-defun-if-void texinfo-end-multitable ()
+  "Discard the @end multitable line and pop the stack of multitable."
+  (texinfo-discard-command)
+  (texinfo-pop-stack 'multitable))
+
+(ptexinfmt-defun-if-broken texinfo-multitable-widths ()
+  "Return list of widths of each column in a multi-column table."
+  (let (texinfo-multitable-width-list)
+    ;; Fractions format:
+    ;;  @multitable @columnfractions .25 .3 .45
+    ;;
+    ;; Template format:
+    ;;  @multitable {Column 1 template} {Column 2} {Column 3 example}
+    ;; Place point before first argument
+    (skip-chars-forward " \t")
+    (cond
+     ;; Check for common misspelling
+     ((looking-at "@columnfraction ")
+      (error "In @multitable, @columnfractions misspelled"))
+     ;; Case 1: @columnfractions .25 .3 .45
+     ((looking-at "@columnfractions")
+      (forward-word 1)
+      (while (not (eolp))
+       (setq texinfo-multitable-width-list
+             (cons
+              (truncate
+               (1-
+                (* fill-column (read (get-buffer (current-buffer))))))
+              texinfo-multitable-width-list))))
+     ;;
+     ;; Case 2: {Column 1 template} {Column 2} {Column 3 example}
+     ((looking-at "{")
+      (let ((start-of-templates (point)))
+       (while (not (eolp))
+         (skip-chars-forward " \t")
+         (let* ((start-of-template (1+ (point)))
+                (end-of-template
+                 ;; forward-sexp works with braces in Texinfo mode
+                 (progn (forward-sexp 1) (1- (point)))))
+           (setq texinfo-multitable-width-list
+                 (cons (- (progn
+                            (goto-char end-of-template)
+                            (current-column))
+                          (progn
+                            (goto-char start-of-template)
+                            (current-column)))
+                       texinfo-multitable-width-list))
+           ;; Remove carriage return from within a template, if any.
+           ;; This helps those those who want to use more than
+           ;; one line's worth of words in @multitable line.
+           (narrow-to-region start-of-template end-of-template)
+           (goto-char (point-min))
+           (while (search-forward "\n" nil t)
+             (delete-char -1))
+           (goto-char (point-max))
+           (widen)
+           (forward-char 1)))))
+     ;;
+     ;; Case 3: Trouble
+     (t
+      (error "\
+You probably need to specify column widths for @multitable correctly")))
+    ;; Check whether columns fit on page.
+    (let ((desired-columns
+          (+
+           ;; between column spaces
+           (length texinfo-multitable-width-list)
+           ;; additional between column spaces, if any
+           texinfo-extra-inter-column-width
+           ;; sum of spaces for each entry
+           (apply '+ texinfo-multitable-width-list))))
+      (if (> desired-columns fill-column)
+         (error (format "\
+Multi-column table width, %d chars, is greater than page width, %d chars."
+                        desired-columns fill-column))))
+    texinfo-multitable-width-list))
+
+;; @item  A1  @tab  A2  @tab  A3
+(ptexinfmt-defun-if-void texinfo-multitable-extract-row ()
+  "Return multitable row, as a string.
+End of row is beginning of next @item or beginning of @end.
+Cells within rows are separated by @tab."
+  (skip-chars-forward " \t")
+  (let* ((start (point))
+        (end (progn
+               (re-search-forward "@item\\|@end")
+               (match-beginning 0)))
+        (row (progn (goto-char end)
+                    (skip-chars-backward " ")
+                    ;; remove whitespace at end of argument
+                    (delete-region (point) end)
+                    (buffer-substring start (point)))))
+    (delete-region texinfo-command-start end)
+    row))
+
+(put 'multitable 'texinfo-item 'texinfo-multitable-item)
+(ptexinfmt-defun-if-void texinfo-multitable-item ()
+  "Format a row within a multicolumn table.
+Cells in row are separated by @tab.
+Widths of cells are specified by the arguments in the @multitable line.
+All cells are made to be the same height.
+This command is executed when texinfmt sees @item inside @multitable."
+  (let ((original-buffer (current-buffer))
+       (table-widths (reverse (car (cdr (car texinfo-stack)))))
+       (existing-fill-column fill-column)
+       start
+       end
+       (table-column       0)
+       (table-entry-height 0)
+       ;; unformatted row looks like:  A1  @tab  A2  @tab  A3
+       ;; extract-row command deletes the source line in the table.
+       (unformated-row (texinfo-multitable-extract-row)))
+    ;; Use a temporary buffer
+    (set-buffer (get-buffer-create texinfo-multitable-buffer-name))
+    (delete-region (point-min) (point-max))
+    (insert unformated-row)
+    (goto-char (point-min))
+;; 1. Check for correct number of @tab in line.
+    (let ((tab-number 1)) ;; one @tab between two columns
+      (while (search-forward "@tab" nil t)
+       (setq tab-number (1+ tab-number)))
+      (if (/= tab-number (length table-widths))
+         (error "Wrong number of @tab's in a @multitable row")))
+    (goto-char (point-min))
+;; 2. Format each cell, and copy to a rectangle
+    ;; buffer looks like this:    A1  @tab  A2  @tab  A3
+    ;; Cell #1: format up to @tab
+    ;; Cell #2: format up to @tab
+    ;; Cell #3: format up to eob
+    (while (not (eobp))
+      (setq start (point))
+      (setq end (save-excursion
+                 (if (search-forward "@tab" nil 'move)
+                     ;; Delete the @tab command, including the @-sign
+                     (delete-region
+                      (point)
+                      (progn (forward-word -1) (1- (point)))))
+                 (point)))
+      ;; Set fill-column *wider* than needed to produce inter-column space
+      (setq fill-column (+ 1
+                          texinfo-extra-inter-column-width
+                          (nth table-column table-widths)))
+      (narrow-to-region start end)
+      ;; Remove whitespace before and after entry.
+      (skip-chars-forward " ")
+      (delete-region (point) (save-excursion (beginning-of-line) (point)))
+      (goto-char (point-max))
+      (skip-chars-backward " ")
+      (delete-region (point) (save-excursion (end-of-line) (point)))
+      ;; Temorarily set texinfo-stack to nil so texinfo-format-scan
+      ;; does not see an unterminated @multitable.
+      (let (texinfo-stack) ;; nil
+       (texinfo-format-scan))
+      (let (fill-prefix) ;; no fill prefix
+       (fill-region (point-min) (point-max)))
+      (setq table-entry-height
+           (max table-entry-height (count-lines (point-min) (point-max))))
+;; 3. Move point to end of bottom line, and pad that line to fill column.
+      (goto-char (point-min))
+      (forward-line (1- table-entry-height))
+      (let* ((beg (point)) ;; beginning of line
+            ;; add one more space for inter-column spacing
+            (needed-whitespace
+             (1+
+              (- fill-column
+                 (progn
+                   (end-of-line)
+                   (current-column)))))) ;; end of existing line
+       (insert (make-string
+                (if (> needed-whitespace 0) needed-whitespace 1)
+                ? )))
+      ;; now, put formatted cell into a rectangle
+      (set (intern (concat texinfo-multitable-rectangle-name
+                          (int-to-string table-column)))
+          (extract-rectangle (point-min) (point)))
+      (delete-region (point-min) (point))
+      (goto-char (point-max))
+      (setq table-column (1+ table-column))
+      (widen))
+;; 4. Add extra lines to rectangles so all are of same height
+    (let ((total-number-of-columns table-column)
+         (column-number 0)
+         here)
+      (while (> table-column 0)
+       (let ((this-rectangle (int-to-string table-column)))
+         (while (< (length this-rectangle) table-entry-height)
+           (setq this-rectangle (append this-rectangle '("")))))
+       (setq table-column (1- table-column)))
+;; 5. Insert formatted rectangles in original buffer
+      (switch-to-buffer original-buffer)
+      (open-line table-entry-height)
+      (while (< column-number total-number-of-columns)
+       (setq here (point))
+       (insert-rectangle
+        (eval (intern
+               (concat texinfo-multitable-rectangle-name
+                       (int-to-string column-number)))))
+       (goto-char here)
+       (end-of-line)
+       (setq column-number (1+ column-number))))
+    (kill-buffer texinfo-multitable-buffer-name)
+    (setq fill-column existing-fill-column)))
+
+\f
+(ptexinfmt-defun-if-broken texinfo-format-printindex ()
+  (let ((indexelts (symbol-value
+                   (cdr (assoc (texinfo-parse-arg-discard)
+                               texinfo-indexvar-alist))))
+       opoint)
+    (insert "\n* Menu:\n\n")
+    (setq opoint (point))
+    (texinfo-print-index nil indexelts)
+
+    (if (memq system-type '(vax-vms windows-nt ms-dos))
+       (texinfo-sort-region opoint (point))
+      (shell-command-on-region opoint (point) "sort -fd" 1))))
+
+(ptexinfmt-broken-facility texinfo-format-end-node ()
+  (with-temp-buffer
+    (insert (prin1-to-string (symbol-function 'texinfo-format-end-node)))
+    (goto-char (point-min))
+    (not (search-forward "fill-paragraph" nil t nil))))
+
+(ptexinfmt-defun-if-broken texinfo-format-end-node ()
+  (let (start
+       (arg (texinfo-parse-line-arg)))
+    (texinfo-discard-command) ; remove or insert whitespace, as needed
+    (delete-region (save-excursion (skip-chars-backward " \t\n") (point))
+                  (point))
+    (insert (format " (%d) " texinfo-footnote-number))
+    ;;(fill-paragraph nil)
+    (save-excursion
+      (if (search-forward "\n--------- Footnotes ---------\n" nil t)
+         (progn ; already have footnote, put new one before end of node
+           (if (re-search-forward "^@node" nil 'move)
+               (forward-line -1))
+           (setq start (point))
+           (insert (format "\n(%d)  %s\n" texinfo-footnote-number arg))
+           (fill-region start (point)))
+       ;; else no prior footnote
+       (if (re-search-forward "^@node" nil 'move)
+           (forward-line -1))
+       (insert "\n--------- Footnotes ---------\n")
+       (setq start (point))
+       (insert (format "\n(%d)  %s\n" texinfo-footnote-number arg))))))
+
+\f
+;; @copying ... @end copying
+;; that Emacs 21.4 and lesser and XEmacs don't support.
+(if (fboundp 'texinfo-copying)
+    nil
+  (defvar texinfo-copying-text ""
+    "Text of the copyright notice and copying permissions.")
+
+  (defun texinfo-copying ()
+    "Copy the copyright notice and copying permissions from the Texinfo file,
+as indicated by the @copying ... @end copying command;
+insert the text with the @insertcopying command."
+    (let ((beg (progn (beginning-of-line) (point)))
+         (end  (progn (re-search-forward "^@end copying[ \t]*\n") (point))))
+      (setq texinfo-copying-text
+           (buffer-substring-no-properties
+            (save-excursion (goto-char beg) (forward-line 1) (point))
+            (save-excursion (goto-char end) (forward-line -1) (point))))
+      (delete-region beg end)))
+
+  (defun texinfo-insertcopying ()
+    "Insert the copyright notice and copying permissions from the Texinfo file,
+which are indicated by the @copying ... @end copying command."
+    (insert (concat "\n" texinfo-copying-text)))
+
+  (defadvice texinfo-format-scan (before expand-@copying-section activate)
+    "Extract @copying and replace @insertcopying with it."
+    (goto-char (point-min))
+    (when (search-forward "@copying" nil t)
+      (texinfo-copying))
+    (while (search-forward "@insertcopying" nil t)
+      (delete-region (match-beginning 0) (match-end 0))
+      (texinfo-insertcopying))))
+
+(provide 'ptexinfmt)
+
+;;; ptexinfmt.el ends here