diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/Makefile ../rdoc-f95-20070309/Makefile
--- ruby-1.8.5-p12/lib/rdoc/Makefile	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/Makefile	2007-02-27 15:49:10.000000000 +0900
@@ -0,0 +1,63 @@
+RUBY=ruby
+DOCTMP=doc-tmp
+
+all:
+
+doc: doc-stamp
+	test -d $(DOCTMP) || mkdir $(DOCTMP)
+	ln -s ../ $(DOCTMP)/rdoc
+	RUBYLIB=./$(DOCTMP) \
+	    $(RUBY) ./rdoc -U --op doc --title "RDoc-F95 Documentations" \
+	    --charset euc-jp --inline-source --line-numbers \
+	    --main README.ja \
+	    README README.ja README.org *.rb */*.rb */*/*.rb || eval "rm $< $(DOCTMP)/rdoc ; rmdir $(DOCTMP) ; false"
+	if [ -f doc/rdoc-style.css ] ; then \
+	    echo '' >> doc/rdoc-style.css ;\
+	    echo 'img{vertical-align: middle;}' >> doc/rdoc-style.css ;\
+	    echo '' >> doc/rdoc-style.css ;\
+	fi
+	rm $< $(DOCTMP)/rdoc
+	rmdir $(DOCTMP)
+
+doc-stamp:
+	touch $@
+
+clean:
+	test "`find . -name '*~'`" = "" || rm `find . -name '*~'`
+	test -f doc-stamp || rm doc-stamp
+
+clean-doc:
+	test ! -d doc || rm -rf -v doc
+
+patch:
+	if [ ! -d patch_dir ] ; then \
+	    mkdir patch_dir ;\
+	    cd patch_dir ;\
+	    cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login ;\
+	    cvs -z4 -d :pserver:anonymous@cvs.ruby-lang.org:/src co ruby ;\
+	fi
+	cd patch_dir/ruby ; cvs update
+	test -L patch_dir/ruby/lib/rdoc-f95 || \
+		eval "cd patch_dir/ruby/lib ; ln -s ../../../ rdoc-f95"
+	cd patch_dir/ruby ; \
+	diff \
+		--exclude=rdoc \
+		--exclude=parse_c.rb \
+		--exclude=parse_rb.rb \
+		--exclude=install.rb \
+		--exclude=README* \
+		--exclude=Makefile \
+		--exclude=*~ \
+		--exclude=CVS \
+		--exclude=patch_dir \
+		--exclude=rdoc-cvs.patch \
+		--exclude=rdoc-cvs.patch.tmp \
+		-Nur lib/rdoc/ lib/rdoc-f95/ > ../../rdoc-cvs.patch.tmp \
+		|| true
+	sed "s|^diff.*$$|diff -Nur lib/rdoc/ lib/rdoc-`date +%Y-%m-%d`/|" rdoc-cvs.patch.tmp > rdoc-cvs.patch
+	rm rdoc-cvs.patch.tmp
+
+clean-patch:
+	-rm -v rdoc-cvs.patch.tmp rdoc-cvs.patch
+	-rm -v -rf patch_dir/ruby
+	-rmdir patch_dir
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/README ../rdoc-f95-20070309/README
--- ruby-1.8.5-p12/lib/rdoc/README	2006-08-05 07:00:25.000000000 +0900
+++ ../rdoc-f95-20070309/README	2007-03-10 13:46:51.000000000 +0900
@@ -1,489 +1,398 @@
-= RDOC - Ruby Documentation System
+({Japanese}[link:files/README_ja.html] | English)
 
-This package contains Rdoc and SimpleMarkup. Rdoc is an application
-that produces documentation for one or more Ruby source files. We work
-similarly to JavaDoc, parsing the source, and extracting the
-definition for classes, modules, and methods (along with includes and
-requires).  We associate with these optional documentation contained
-in the immediately preceding comment block, and then render the result
-using a pluggable output formatter. (Currently, HTML is the only
-supported format. Markup is a library that converts plain text into
-various output formats. The Markup library is used to interpret the
-comment blocks that Rdoc uses to document methods, classes, and so on.
-
-This library contains two packages, rdoc itself and a text markup
-library, 'markup'. 
-
-== Roadmap
-
-* If you want to use Rdoc to create documentation for your Ruby source
-  files, read on.
-* If you want to include extensions written in C, see rdoc/parsers/parse_c.rb.
-* For information on the various markups available in comment
-  blocks, see markup/simple_markup.rb.
-* If you want to drive Rdoc programatically, see RDoc::RDoc.
-* If you want to use the library to format text blocks into HTML,
-  have a look at SM::SimpleMarkup.
-* If you want to try writing your own HTML output template, see
-  RDoc::Page.
-
-== Summary
-
-Once installed, you can create documentation using the 'rdoc' command
-(the command is 'rdoc.bat' under Windows)
-
-  % rdoc [options]  [names...]
-
-Type "rdoc --help" for an up-to-date option summary.
-
-A typical use might be to generate documentation for a package of Ruby
-source (such as rdoc itself). 
-
-  % rdoc
-
-This command generates documentation for all the Ruby and C source
-files in and below the current directory. These will be stored in a
-documentation tree starting in the subdirectory 'doc'.
-
-You can make this slightly more useful for your readers by having the
-index page contain the documentation for the primary file. In our
-case, we could type
-
-  % rdoc --main rdoc/rdoc.rb
-
-You'll find information on the various formatting tricks you can use
-in comment blocks in the documentation this generates.
-
-RDoc uses file extensions to determine how to process each file. File
-names ending <tt>.rb</tt> and <tt>.rbw</tt> are assumed to be Ruby
-source. Files ending <tt>.c</tt> are parsed as C files. All other
-files are assumed to contain just SimpleMarkup-style markup (with or
-without leading '#' comment markers). If directory names are passed to
-RDoc, they are scanned recursively for C and Ruby source files only.
-
-== Credits
-
-* The Ruby parser in rdoc/parse.rb is based heavily on the outstanding
-  work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby
-  parser for irb and the rtags package.
-
-* Code to diagram classes and modules was written by Sergey A Yanovitsky
-  (Jah) of Enticla. 
-
-* Charset patch from MoonWolf.
-
-* Rich Kilmer wrote the kilmer.rb output template.
-
-* Dan Brickley led the design of the RDF format.
-
-== License
-
-RDoc is Copyright (c) 2001-2003 Dave Thomas, The Pragmatic Programmers.  It
-is free software, and may be redistributed under the terms specified
-in the README file of the Ruby distribution.
-
-= Usage
-
-RDoc is invoked from the command line using:
-
-   % rdoc <options> [name...]
-
-Files are parsed, and the information they contain collected, before
-any output is produced. This allows cross references between all files
-to be resolved. If a name is a directory, it is traversed. If no
-names are specified, all Ruby files in the current directory (and
-subdirectories) are processed.
-
-Options are:
-
-[<tt>--accessor</tt> <i>name[,name...]</i>]
-    specifies the name(s) of additional methods that should be treated
-    as if they were <tt>attr_</tt><i>xxx</i> methods. Specifying
-    "--accessor db_opt" means lines such as
-
-         db_opt :name, :age
-  
-    will get parsed and displayed in the documentation. Each name may have an
-    optional "=flagtext" appended, in which case the given flagtext will appear
-    where (for example) the 'rw' appears for attr_accessor.
-
-[<tt>--all</tt>]
-    include protected and private methods in the output (by default
-    only public methods are included)
-
-[<tt>--charset</tt> _charset_]
-    Set the character set for the generated HTML.
-
-[<tt>--diagram</tt>]
-    include diagrams showing modules and classes.  This is currently
-    an experimental feature, and may not be supported by all output
-    templates. You need dot V1.8.6 or later to use the --diagram
-    option correctly (http://www.research.att.com/sw/tools/graphviz/).
-
-[<tt>--exclude</tt> <i>pattern</i>]
-    exclude files and directories matching this pattern from processing
-
-[<tt>--extension</tt> <i>new=old</i>]
-    treat files ending <i>.new</i> as if they ended
-    <i>.old</i>. Saying '--extension cgi=rb' causes RDoc to treat .cgi
-    files as Ruby source.
-
-[<tt>fileboxes</tt>]
-    Classes are put in boxes which represents files, where these
-    classes reside. Classes shared between more than one file are
-    shown with list of files that sharing them.  Silently discarded if
-    --diagram is not given Experimental.
-
-[<tt>--fmt</tt> _fmt_]
-    generate output in a particular format.
-
-[<tt>--help</tt>]
-    generate a usage summary.
-
-[<tt>--help-output</tt>]
-    explain the various output options.
-
-[<tt>--image-format</tt> <i>gif/png/jpg/jpeg</i>]
-    sets output image format for diagrams. Can be png, gif, jpeg,
-    jpg. If this option is omitted, png is used. Requires --diagram.
-
-[<tt>--include</tt> <i>dir,...</i>]
-    specify one or more directories to be searched when satisfying
-    :+include+: directives. Multiple <tt>--include</tt> options may be
-    given. The directory containing the file currently being processed
-    is always searched.
-
-[<tt>--inline-source</tt>]
-    By default, the source code of methods is shown in a popup. With
-    this option, it's displayed inline.
-
-[<tt>line-numbers</tt>]
-    include line numbers in the source code
-
-[<tt>--main</tt> _name_]
-    the class of module _name_ will appear on the index page. If you
-    want to set a particular file as a main page (a README, for
-    example) simply specifiy its name as the first on the command
-    line.
-
-[<tt>--merge</tt>]
-    when generating _ri_ output, if classes being processed already
-    exist in the destination directory, merge in the current details
-    rather than overwrite them.
-
-[<tt>--one-file</tt>]
-    place all the output into a single file
-
-[<tt>--op</tt> _dir_]
-    set the output directory to _dir_ (the default is the directory
-    "doc")
-
-[<tt>--op-name</tt> _name_]
-    set the name of the output. Has no effect for HTML.
-    "doc")
-
-[<tt>--opname</tt> _name_]
-    set the output name (has no effect for HTML).
-
-[<tt>--promiscuous</tt>]
-    If a module or class is defined in more than one source file, and
-    you click on a particular file's name in the top navigation pane,
-    RDoc will normally only show you the inner classes and modules of
-    that class that are defined in the particular file. Using this
-    option makes it show all classes and modules defined in the class,
-    regardless of the file they were defined in.
-
-[<tt>--quiet</tt>]
-    do not display progress messages
-
-[<tt>--ri</tt>, <tt>--ri-site</tt>, _and_ <tt>--ri-system</tt>]
-    generate output than can be read by the _ri_ command-line tool.
-    By default --ri places its output in ~/.rdoc, --ri-site in
-    $datadir/ri/<ver>/site, and --ri-system in
-    $datadir/ri/<ver>/system. All can be overridden with a subsequent
-    --op option. All default directories are in ri's default search
-    path.
-
-[<tt>--show-hash</tt>]
-    A name of the form #name in a comment is a possible hyperlink to
-    an instance method name. When displayed, the '#' is removed unless
-    this option is specified
-
-[<tt>--style</tt> <i>stylesheet url</i>]
-    specifies the URL of an external stylesheet to use (rather than
-    generating one of our own)
-
-[<tt>tab-width</tt> _n_]
-    set the width of tab characters (default 8)
-
-[<tt>--template</tt> <i>name</i>]
-    specify an alternate template to use when generating output (the
-    default is 'standard'). This template should be in a directory
-    accessible via $: as rdoc/generators/xxxx_template, where 'xxxx'
-    depends on the output formatter.
-
-[<tt>--version</tt>]
-   display  RDoc's version
-
-[<tt>--webcvs</tt> _url_]
-    Specify a URL for linking to a web frontend to CVS. If the URL
-    contains a '\%s', the name of the current file will be
-    substituted; if the URL doesn't contain a '\%s', the filename will
-    be appended to it.
-
-= Example
-
-A typical small Ruby program commented using RDoc might be as follows. You
-can see the formatted result in EXAMPLE.rb and Anagram.
-
-      :include: EXAMPLE.rb
-
-= Markup
-
-Comment blocks can be written fairly naturally, either using '#' on
-successive lines of the comment, or by including the comment in 
-an =begin/=end block. If you use the latter form, the =begin line
-must be flagged with an RDoc tag:
-
-  =begin rdoc
-  Documentation to 
-  be processed by RDoc.
-  =end
-
-Paragraphs are lines that share the left margin. Text indented past
-this margin are formatted verbatim.
-
-1. Lists are typed as indented paragraphs with:
-   * a '*' or '-' (for bullet lists)
-   * a digit followed by a period for 
-     numbered lists
-   * an upper or lower case letter followed
-     by a period for alpha lists.
-
-   For example, the input that produced the above paragraph looked like
-       1. Lists are typed as indented 
-          paragraphs with:
-          * a '*' or '-' (for bullet lists)
-          * a digit followed by a period for 
-            numbered lists
-          * an upper or lower case letter followed
-            by a period for alpha lists.
-
-2. Labeled lists (sometimes called description
-   lists) are typed using square brackets for the label.
-      [cat]   small domestic animal
-      [+cat+] command to copy standard input
-
-3. Labeled lists may also be produced by putting a double colon
-   after the label. This sets the result in tabular form, so the
-   descriptions all line up. This was used to create the 'author'
-   block at the bottom of this description.
-      cat::   small domestic animal
-      +cat+:: command to copy standard input
-
-   For both kinds of labeled lists, if the body text starts on the same
-   line as the label, then the start of that text determines the block
-   indent for the rest of the body. The text may also start on the line
-   following the label, indented from the start of the label. This is
-   often preferable if the label is long. Both the following are
-   valid labeled list entries:
-
-      <tt>--output</tt> <i>name [, name]</i>::
-          specify the name of one or more output files. If multiple
-          files are present, the first is used as the index.
-
-      <tt>--quiet:</tt>:: do not output the names, sizes, byte counts,
-                          index areas, or bit ratios of units as
-                          they are processed.
-
-4. Headings are entered using equals signs
-
-      = Level One Heading
-      == Level Two Heading
-   and so on
-
-5. Rules (horizontal lines) are entered using three or
-   more hyphens.
-
-6. Non-verbatim text can be marked up:
-
-   _italic_::     \_word_ or \<em>text</em>
-   *bold*::       \*word* or \<b>text</b>
-   +typewriter+:: \+word+ or \<tt>text</tt>
-
-   The first form only works around 'words', where a word is a
-   sequence of upper and lower case letters and underscores. Putting a
-   backslash before inline markup stops it being interpreted, which is
-   how I created the table above:
-
-     _italic_::     \_word_ or \<em>text</em>
-     *bold*::       \*word* or \<b>text</b>
-     +typewriter+:: \+word+ or \<tt>text</tt>
-
-7. Names of classes, source files, and any method names
-   containing an underscore or preceded by a hash
-   character are automatically hyperlinked from
-   comment text to their description. 
-
-8. Hyperlinks to the web starting http:, mailto:, ftp:, or www. are
-   recognized. An HTTP url that references an external image file is
-   converted into an inline <IMG..>.  Hyperlinks starting 'link:' are
-   assumed to refer to local files whose path is relative to the --op
-   directory.
-
-   Hyperlinks can also be of the form <tt>label</tt>[url], in which
-   case the label is used in the displayed text, and <tt>url</tt> is
-   used as the target. If <tt>label</tt> contains multiple words,
-   put it in braces: <em>{multi word label}[</em>url<em>]</em>.
-       
-9. Method parameter lists are extracted and displayed with
-   the method description. If a method calls +yield+, then
-   the parameters passed to yield will also be displayed:
-
-      def fred
-        ...
-        yield line, address
-
-   This will get documented as
-
-      fred() { |line, address| ... }
-
-   You can override this using a comment containing 
-   ':yields: ...' immediately after the method definition
-
-      def fred      # :yields: index, position
-        ...
-        yield line, address
-
-   which will get documented as
-
-       fred() { |index, position| ... }
-
-
-10. ':yields:' is an example of a documentation modifier. These appear
-    immediately after the start of the document element they are modifying.
-    Other modifiers include
-
-    [<tt>:nodoc:</tt><i>[all]</i>]
-         don't include this element in the documentation.  For classes
-         and modules, the methods, aliases, constants, and attributes
-         directly within the affected class or module will also be
-         omitted.  By default, though, modules and classes within that
-         class of module _will_ be documented. This is turned off by
-         adding the +all+ modifier.
-
-              module SM  #:nodoc:
-                class Input
-                end
-              end
-              module Markup #:nodoc: all
-                class Output
-                end
-              end
-
-         In the above code, only class <tt>SM::Input</tt> will be
-         documented.
-
-    [<tt>:doc:</tt>]
-         force a method or attribute to be documented even if it
-         wouldn't otherwise be. Useful if, for example, you want to
-         include documentation of a particular private method.
-
-    [<tt>:notnew:</tt>]
-         only applicable to the +initialize+ instance method. Normally
-         RDoc assumes that the documentation and parameters for
-         #initialize are actually for the ::new method, and so fakes
-         out a ::new for the class. THe :notnew: modifier stops
-         this. Remember that #initialize is protected, so you won't
-         see the documentation unless you use the -a command line
-         option.
-
-
-11. RDoc stops processing comments if it finds a comment
-    line containing '<tt>#--</tt>'. This can be used to 
-    separate external from internal comments, or 
-    to stop a comment being associated with a method, 
-    class, or module. Commenting can be turned back on with
-    a line that starts '<tt>#++</tt>'.
-
-        # Extract the age and calculate the
-        # date-of-birth.
-        #--
-        # FIXME: fails if the birthday falls on
-        # February 29th
-        #++
-        # The DOB is returned as a Time object.
-
-        def get_dob(person)
-           ...
-
-12. Comment blocks can contain other directives:
-
-    [<tt>:section: title</tt>]
-        Starts a new section in the output. The title following
-	<tt>:section:</tt> is used as the section heading, and the
-	remainder of the comment containing the section is used as
-	introductory text. Subsequent methods, aliases, attributes,
-	and classes will be documented in this section. A :section:
-	comment block may have one or more lines before the :section:
-	directive. These will be removed, and any identical lines at
-	the end of the block are also removed. This allows you to add
-	visual cues such as
-
-           # ----------------------------------------
-	   # :section: My Section
-	   # This is the section that I wrote.
-	   # See it glisten in the noon-day sun.
-           # ----------------------------------------
-
-    [<tt>call-seq:</tt>]
-        lines up to the next blank line in the comment are treated as
-        the method's calling sequence, overriding the
-        default parsing of method parameters and yield arguments.
-
-    [<tt>:include:</tt><i>filename</i>] 
-         include the contents of the named file at this point. The
-         file will be searched for in the directories listed by
-         the <tt>--include</tt> option, or in the current
-         directory by default.  The contents of the file will be
-         shifted to have the same indentation as the ':' at the
-         start of the :include: directive.
-
-    [<tt>:title:</tt><i>text</i>]
-         Sets the title for the document. Equivalent to the --title command
-         line parameter. (The command line parameter overrides any :title:
-         directive in the source).
-
-    [<tt>:enddoc:</tt>]
-         Document nothing further at the current level.
-
-    [<tt>:main:</tt><i>name</i>]
-         Equivalent to the --main command line parameter.
-
-    [<tt>:stopdoc: / :startdoc:</tt>]
-         Stop and start adding new documentation elements to the
-         current container. For example, if a class has a number of
-         constants that you don't want to document, put a
-         <tt>:stopdoc:</tt> before the first, and a
-         <tt>:startdoc:</tt> after the last. If you don't specifiy a
-         <tt>:startdoc:</tt> by the end of the container, disables
-         documentation for the entire class or module.
-
-
----
-
-See also markup/simple_markup.rb.
-
-= Other stuff
-
-Author::   Dave Thomas <dave@pragmaticprogrammer.com>
-Requires:: Ruby 1.8.1 or later
-License::  Copyright (c) 2001-2003 Dave Thomas.
-           Released under the same license as Ruby.
-
-== Warranty
-
-This software is provided "as is" and without any express or
-implied warranties, including, without limitation, the implied
-warranties of merchantibility and fitness for a particular
-purpose.
+= Enhanced version of RDoc Fortran 90/95 parser
+
+Here is a patch file to improve
+the RDoc[http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html]
+analysis feature 
+for Fortran 90/95 source codes.
+A patched package of RDoc source is also available. 
+
+== Operation verification 
+
+Operation of the package has been verified with Ruby 1.8.2.
+
+== Download
+
+The latest version (Version $Name: rdoc-f95-20070309 $)
+
+* {Patch for Ruby 1.8.5-p12}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/rdoc-f95_ruby1.8.5-p12.patch]
+
+* {TGZ file of patched RDoc resources}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/rdoc-f95.tgz]
+
+Archives of old versions
+
+* {Patch files, TGZ packages, source code trees (only JAPANESE)}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/arch/SIGEN.htm]
+
+* {Binary packages for Debian GNU/Linux}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/debian]
+
+
+== Installation
+
+You have the following three ways for installation.
+
+=== Installation by applying the patch to original Ruby package
+
+To use the patch file, follow the steps described below:
+
+* Download
+  ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.5-p12.tar.gz
+  from {Ruby Home Page}[http://www.ruby-lang.org/].
+
+* Unpack the archive file as
+
+    % tar -zxvf ruby-1.8.5-p12.tar.gz
+
+* Put the patch file (rdoc-f95_ruby1.8.5-p12.patch)
+  in the directory where you executed the tar command 
+  and apply the patch; 
+
+    % patch -p0 < rdoc-f95_ruby1.8.5-p12.patch
+
+* Install RDoc package as written in 
+  {Site of the Ruby}[http://www.ruby-lang.org/].
+
+
+=== Installation by using patched RDoc package
+
+To install the patched RDoc package, 
+follow the steps described below: 
+
+* Download archive file rdoc-f95.tgz
+
+* Unpack:
+
+    % tar -zxvf rdoc-f95.tgz
+
+* Go into the Ruby source directory:
+
+    % cd rdoc-f95
+
+* Install the package:
+
+    % ruby install.rb
+
+<b>If rdoc is already installed, the original rdoc will be overritten</b>.
+
+Use --help option to show options and the directory to which
+rdoc is installed:
+
+  % ruby install.rb --help
+
+=== Installation by using binary packages for Debian GNU/Linux
+
+Add following URL to sources.list of APT (/etc/apt/sources.list).
+You can use "ftp" protocol instead of "http".
+
+  deb http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou stable/
+
+Install by APT commands.
+
+  % apt-get update
+  % apt-get install rdoc-f95
+
+This "rdoc-f95" package disables original "rdoc" package
+because "rdoc-f95" moves files of "rdoc" to diverted location.
+If you want to use original "rdoc" package, please remove "rdoc-f95".
+Then files of original "rdoc" package will be returned to proper location.
+
+Following suggested packages enable you to use "diagram" and
+"mathml" options (see below).
+
+  % apt-get install graphviz libmathml-ruby
+
+
+== Usage
+
+Set the environment variable *PATH* to include
+the directory where the execution program is installed, 
+and *RUBYLIB* to include the directory 
+where the libraries are installed.
+
+Move to a directory where your Fortran 90/95 files exist, 
+and execute the following command.  HTML documents will be generated in
+*doc* directory.
+
+  % rdoc -U --ignore-case --inline-source
+
+Files ending <tt>.f90</tt>, <tt>.F90</tt>, <tt>.f95</tt>, <tt>.F95</tt>
+are parsed as Fortran 90/95 programs.
+All Fortran 90/95 programs in subdirectories are parsed recursively.
+
+Just as in the original RDoc, files ending with <tt>.rb</tt> and <tt>.rbw</tt>
+are parsed as Ruby programs and files ending with <tt>.c</tt>, <tt>.cc</tt>,
+<tt>.cpp</tt>, <tt>.CC</tt>, <tt>.cxx</tt> are parsed as C programs.
+
+With the option <tt>--op</tt>,  
+the directory where HTML documents are generated can be changed.
+<tt>--title</tt> option sets title of HTML documents.
+When <tt>--all</tt> option is used, 
+private subroutines, functions etc. in
+Fortran 90/95 programs are shown in HTML documents (for developers).
+If files or directories are specified as arguments (for example,
+"<tt>src/*.f90</tt>" or "<tt>test/</tt>"), the particular files
+are parsed.
+In the following example, files with suffix "<tt>.f90</tt>" in a
+directory "<tt>src/</tt>" and files in a directory "<tt>test/</tt>"
+are parsed.
+
+  % rdoc -U --ignore-case --inline-source  \
+         --op rdoc --title "RDoc documentations" src/*.f90 test/
+
+Alternatively, you can parse only a part of files by creating a
+"<tt>.document</tt>" file and writing names of the files and the
+directories to the file.
+
+For more information, 
+see {README of original RDoc}[link:files/README_org.html].
+
+
+== Rules for RDoc Document
+
+Refer to <b>parsers/parse_f95.rb</b> which
+explains parsed information, way of looking at documents,
+the format of comment blocks in Fortran 90/95 source code.
+If you use "--mathml" option (see below),
+refer to <b>Generators::TexParser</b>, too.
+For general information, see
+{README of original RDoc}[link:files/README_org.html] .
+
+== Samples
+
+* {Code reference of data I/O library gt4f90io (only JAPANESE)}[http://www.gfd-dennou.org/library/gtool4/gt4f90io/gt4f90io_current/doc/develop_reference/]
+
+* {Code reference of planetary atmospheric general circulation model DCPAM (only JAPANESE)}[http://www.gfd-dennou.org/library/dcpam/dcpam3/dcpam3_current/doc/code_reference/htm]
+
+== Differences from original RDoc
+
+This patch has been created for enhancing the Fortran 90/95 parser of RDoc .
+{The Fortran 90/95 parse script parse_f95.rb}[http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/parsers/parse_f95.rb] 
+is mainly modified, and other programs are also improved.
+
+
+The original RDoc has been developed by Dave Thomas and is now
+maintained by Ryan Davis.
+The RDoc is available from the Ruby source code repository.
+See {Ruby Repository Guide}[http://www.ruby-lang.org/en/news/2006/12/22/cvs-repository-moved-to-svn/].
+For more information about RDoc, see
+{README of original RDoc}[link:files/README_org.html] .
+
+Differences to the original one are given below.
+Note that some differences were lost because
+this patch (2005/12/17 version) has been already included into
+the original RDoc package.
+
+--
+#<b>Enhancement of an analytical performance of Fortran 90/95 source codes</b> ::
+#    See parsers/parse_f95.rb for details.
+
+#<b>Modification of format of comment blocks</b> ::
+#    See parsers/parse_f95.rb for details.
+++
+
+<b>Addition of <tt>--ignore-case</tt> option </b> ::
+    In the Fortran 90/95 Standard,  
+    upper case letters are not distinguished from lower case letters, 
+    although original RDoc produces case-dependently 
+    cross-references of Class and  Methods.
+    When this options is specified, 
+    upper cases are not distinguished from lower cases.
+
+<b>Cross-reference of file names</b> ::
+    Cross-reference of file names is available as well as
+    modules, subroutines, and so on.
+
+<b>Modification of <tt>--style</tt> option</b> ::
+    Original RDoc can not treat relative path stylesheet.
+    Application of this patch modifies this function.
+
+<b>Conversion of TeX formula into MathML</b>::
+    TeX formula can be converted into MathML format
+    with --mathml option, 
+    if <b>MathML library for Ruby version 0.6b</b> is installed.
+    This library is available from {Bottega of Hiraku (JAPANESE only)}[http://www.hinet.mydns.jp/~hiraku/].
+    See <b>Generators::TexParser</b> about format.
+
+    <b>*** Caution ***</b>
+    Documents generated with "--mathml" option are not displayed correctly
+    according to browser and/or its setting.
+    We have been confirmed that 
+    documents generated with "--mathml" option are displayed correctly
+    with {Mozilla Firefox}[http://www.mozilla.or.jp/products/firefox/]
+    and Internet Explorer
+    (+ {MathPlayer}[http://www.dessci.com/en/products/mathplayer/]).
+    See {MathML Software - Browsers}[http://www.w3.org/Math/Software/mathml_software_cat_browsers.html]
+    for other browsers.
+
+Some formats of comments in HTML document are changed
+to improve the analysis features.
+See <b>parsers/parse_f95.rb</b> for details.
+
+
+== Remarks on usage
+
+The enhanced version of the RDoc Fortran 90/95 parser
+has been constructed on the premise of
+educational and academic usages only. 
+For these uses, usage and modification of the resources
+withiout notification to the authors is permitted.
+Licence of the enhanced version of RDoc Fortran 90/95 parser 
+conforms to that of original RDoc.
+See {README of original RDoc}[link:files/README_org.html] .
+
+When you publish your scientific/technological works
+using the enhanced version of RDoc Fortran 90/95 parser, 
+we will be very glad if you cite our resources 
+in the following way:
+
+  Morikawa,Y., Ishiwatari,M., Horinouchi,T., Odaka,M., Hayashi,Y.-Y.,
+  dcmodel: Numerical Model Project, 2007:
+  Enhanced version of RDoc Fortran 90/95 parser,
+  http://www.gfd-dennou.org/library/dcmodel/, GFD Dennou Club.
+
+== Contact
+
+To contact us, please send an email to link:../rdoc-f95-mailto.png .
+
+== History
+
+==== 2007/03/09
+
+* A bug that RiWriter can not operate in Ruby 1.8 is fixed.
+
+==== 2007/02/27
+
+* README and README.ja are modified due to movement of Ruby source code
+  Repository from CVS to SVN.
+
+==== 2007/01/12
+
+* A bug that Fortran 90/95 source code like
+  "FUNCTION Get_Platform() RESULT(platform)" is converted to
+  "Get_Platform( platform ) result(platform)" is fixed.
+  (by the advice from Hani Andreas Ibrahim).
+
+==== 2007/01/09
+
+* <b>Generators::TexParser</b> is modified.
+
+==== 2007/01/05
+
+* Contact address is changed.
+* Ruby version of a patch file is updated to 1.8.5-p12.
+* Document "Usage of \newcommand and \newenvironment" is added in
+  <b>Generators::TexParser</b>.
+* Document "Cross-reference of defined operators and defined
+  assignments" is added in <b>parsers/parse_f95.rb</b>.
+* Document "The sequence of displayed entities" in
+  <b>parsers/parse_f95.rb</b> is modified.
+* A bug that '--ignore-case' option is invalid partly is fixed.
+
+==== 2006/12/15
+
+* Ruby version of a patch file is updated to 1.8.5-p2
+
+==== 2006/12/13
+
+* The sequence of displayed entities can be ordered manually by
+  the comment like "!:doc-priority 100:".
+
+==== 2006/11/20
+
+* Description about ".docuemnt" file is added.
+* Some subprograms which have different names in one interface block
+  are parsed correctly.
+* Import updates of RDoc in original Ruby CVS.
+
+==== 2006/11/16
+
+* Generators::TexParser is modified/
+  * A way to write equations across multiple lines is described in document.
+  * The format of CVS keywords, that is "$ID: ... $" or
+    "$LOG: ... $ etc. is ignored.
+* All methods added to "code_object.rb" for "parse_f95.rb" are moved
+  to "parse_f95.rb". Therefore "parse_f95.rb" works alone in Ruby
+  1.8.5 .
+
+==== 2006/11/14
+
+* Ruby version of a patch file is updated to 1.8.5
+* Patch filename is changed.
+* Debian GNU/Linux binary packages are modified.
+* XHTML version of documents is changed from "XHTML 1.0 Transitional"
+  to "XHTML 1.1 plus MathML 2.0".
+* Interpreter of continuous lines is modified.
+* Import updates of RDoc in original Ruby CVS.
+* English is corrected with comments of Dr. Geiger (Institute for
+  Plasma Physics)
+* File names beginning "../" are parsed correctly.
+* A version of MathML library for Ruby is changed from 0.5 to 0.6b.
+* Syntax error with MathML library for Ruby is avoided.
+
+==== 2006/08/15
+
+* Description about installation with binary packages for Debian GNU/Linux
+  is modified.
+* Bugs about parsing comments of NAMELIST is modified.
+
+==== 2006/08/14
+
+* Package name is changed as "rdoc-f95" from "rdoc-dennou".
+* Address is changed as
+  http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/
+* README and README.ja are modified.
+* Conversion of TeX formula into MathML is enable.
+* Modification of --style option.
+* Main programs are added to 'Methods' too.
+* The NAMELIST group names scattered in each file are collected on one page.
+* Names of modules provided by F90 files are added to documents of the files
+  automatically.
+
+
+==== 2006/02/24
+
+* English version of README is created.
+
+==== 2006/01/18
+* Comment formats for arguments of subroutines and functions 
+  are slightly modified.
+
+  * A space is inserted below the argument described in HTML document.
+
+* Patched package is rebulid with
+  updated Ruby resources in CVS repository.
+
+==== 2005/12/28
+* Patch file for ruby 1.8.4 is released.
+
+==== 2005/12/17
+
+* Some bugs are fixed.
+* Parsing external subroutines specified interface are improved.
+* Handling of Continuation lines are improved.
+
+==== 2005/12/13
+
+* Remarks and Todo are added in parsers/parse_f95.rb 
+* Sample is added in README
+* Parsing part of  public, private statements
+  are improved. 
+
+==== 2005/12/08
+
+* "Remarks in use" and "Contact" are added in README .
+* Address is changed as 
+  http://www.gfd-dennou.org/library/dcmodel/rdoc-dennou/
+
+==== 2005/11/28
+
+* ":nodoc:" tag are available.
+* Parsing "contains" in subroutines and functions are improved.
+* Title is changed.
+* Old version of the patches are placed in web page.
+
+==== 2005/11/17
+
+* Improvement of analysis features, checking HTML documents 
+  which are produced by RDoc.
+  release of preliminary version.
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/README.ja ../rdoc-f95-20070309/README.ja
--- ruby-1.8.5-p12/lib/rdoc/README.ja	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/README.ja	2007-03-10 13:46:51.000000000 +0900
@@ -0,0 +1,444 @@
+(Japanese | {English}[link:files/README.html])
+
+= RDoc Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É²òÀÏµ¡Ç½¶¯²½ÈÇ
+
+{RDoc - Ruby Documentation System}[http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html]
+¤Î Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É²òÀÏµ¡Ç½¤ò¶¯²½¤¹¤ë¤¿¤á¤Î¥Ñ¥Ã¥Á¤ò
+ÇÛÉÛ¤·¤Æ¤¤¤Þ¤¹. ¥Ñ¥Ã¥Á¤òÅ¬ÍÑ¤·¤¿¥Ñ¥Ã¥±¡¼¥¸¤âÇÛÉÛ¤·¤Æ¤¤¤Þ¤¹.
+
+== Æ°ºî³ÎÇ§
+
+¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ï Ruby 1.8.2 ¤Ç¤ÎÆ°ºî¤ò³ÎÇ§¤·¤Æ¤¤¤Þ¤¹.
+
+== ¥À¥¦¥ó¥í¡¼¥É
+
+ºÇ¿·ÈÇ (¥Ð¡¼¥¸¥ç¥ó $Name: rdoc-f95-20070309 $)
+
+* {Ruby 1.8.5-p12 ÍÑ¤Î¥Ñ¥Ã¥Á}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/rdoc-f95_ruby1.8.5-p12.patch]
+
+* {rdoc-f95 tar.gz ¥Ñ¥Ã¥±¡¼¥¸ (Ruby 1.8.5-p12 ¤Î rdoc ¤ÎÉôÊ¬¤ò¼è¤ê½Ð¤·, ¾åµ­¥Ñ¥Ã¥Á¤òÅ¬ÍÑ¤·¤Æ tar ¥Ü¡¼¥ë¤Ë¤·¤¿¤â¤Î)}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/rdoc-f95.tgz]
+
+²áµî¤Î¥¢¡¼¥«¥¤¥Ö
+
+* {¥Ñ¥Ã¥Á ¡¦ TGZ ¥Ñ¥Ã¥±¡¼¥¸ ¡¦ ¥½¡¼¥¹¥Ä¥ê¡¼¤Î¥ê¥¹¥È}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/arch/SIGEN.htm]
+
+* {Debian GNU/Linux ÍÑ¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸}[http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/debian]
+
+== ¥¤¥ó¥¹¥È¡¼¥ë
+
+¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ï°Ê²¼¤Î 3 ¤Ä¤ÎÊýË¡¤¬¤¢¤ê¤Þ¤¹.
+
+=== ¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë¤òÍøÍÑ¤¹¤ëÊýË¡
+
+¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë¤ò Ruby ¤Î¥ª¥ê¥¸¥Ê¥ë»ñ¸»¤ËÅ¬ÍÑ¤¹¤ë¼ê½ç¤Ï
+°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹.
+
+* ¤Þ¤º, {Ruby ¤Î¥Û¡¼¥à¥Ú¡¼¥¸}[http://www.ruby-lang.org/] ¤«¤é
+  ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.5-p12.tar.gz
+  ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤
+
+* ¾åµ­ TGZ ¥Õ¥¡¥¤¥ë¤òÅ¸³«¤·¤Æ¤¯¤À¤µ¤¤.
+
+    % tar xvfz ruby-1.8.5-p12.tar.gz
+
+* ¤³¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Ë¾åµ­¤Î¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë
+  rdoc-f95_ruby1.8.5-p12.patch ¤òÃÖ¤­, °Ê²¼¤Î¥³¥Þ¥ó¥É¤Ç¥Ñ¥Ã¥Á¤ò
+  Å¬ÍÑ¤·¤Æ¤¯¤À¤µ¤¤.
+
+    % patch -p0 < rdoc-f95_ruby1.8.5-p12.patch
+
+* ¥Ñ¥Ã¥Á¤òÅ¬ÍÑ¤·¤¿¸å¤Ë, Ruby ¤Î¥¤¥ó¥¹¥È¡¼¥ëºî¶È¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤.
+  Ruby ¤Î¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ï
+  {¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥¹¥¯¥ê¥×¥È¸À¸ì Ruby ¤Î¥Û¡¼¥à¥Ú¡¼¥¸}[http://www.ruby-lang.org/]
+  ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+
+=== ¥Ñ¥Ã¥Á¤¬Å¬ÍÑ¤µ¤ì¤¿¥Ñ¥Ã¥±¡¼¥¸¤òÍøÍÑ¤¹¤ëÊýË¡
+
+¥Ñ¥Ã¥Á¤¬Å¬ÍÑ¤µ¤ì¤¿ rdoc-f95.tgz ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍÑ¤¹¤ë¤Ë¤Ï
+°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹.
+
+¥¢¡¼¥«¥¤¥Ö¥Õ¥¡¥¤¥ë rdoc-f95.tgz ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤¿¸å¤Ë, 
+°Ê²¼¤Î¤è¤¦¤Ë tar ¥³¥Þ¥ó¥É¤ÇÅ¸³«¸å,
+install.rb ¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤.
+<b>´û¤Ë rdoc ¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç, ¾å½ñ¤­¤¹¤ë²ÄÇ½À­¤¬¤¢¤ê¤Þ¤¹</b>.
+
+  % tar xvfz rdoc-f95.tgz
+  % cd rdoc-f95
+  % ruby install.rb
+
+¥¤¥ó¥¹¥È¡¼¥ëÀè¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ä, ÊÑ¹¹¤Î¤¿¤á¤Î¥ª¥×¥·¥ç¥ó¤Ë´Ø¤·¤Æ¤Ï,
+°Ê²¼¤Î¥³¥Þ¥ó¥É¤ÇÃÎ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹.
+
+  % ruby install.rb --help
+
+=== Debian GNU/Linux ÍÑ¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤òÍøÍÑ¤¹¤ëÊýË¡
+
+°Ê²¼¤Î URL ¤ò APT ¤Î¥½¡¼¥¹¥ê¥¹¥È (/etc/apt/sources.list) ¤Ë²Ã¤¨¤Þ¤¹.
+¥×¥í¥È¥³¥ë¤È¤·¤Æ http ¤ÎÂå¤ï¤ê¤Ë ftp ¤òÍÑ¤¤¤ë¤³¤È¤â²ÄÇ½¤Ç¤¹.
+
+  deb http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou stable/
+
+APT ¤Î¥³¥Þ¥ó¥É¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤Ê¤¤¤Þ¤¹.
+
+  % apt-get update
+  % apt-get install rdoc-f95
+
+¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ï¥ª¥ê¥¸¥Ê¥ë¤Î rdoc ¥Ñ¥Ã¥±¡¼¥¸¤Î¥Õ¥¡¥¤¥ë·²¤òÂàÈò¤·¤¿¾ì½ê
+¤Ø°ÜÆ°¤µ¤»¤ë¤¿¤á, ¥ª¥ê¥¸¥Ê¥ë¤Î rdoc ¥Ñ¥Ã¥±¡¼¥¸¤¬»ÈÍÑ¤Ç¤­¤Ê¤¯¤Ê¤ê¤Þ¤¹.
+¥ª¥ê¥¸¥Ê¥ë¤Î rdoc ¥Ñ¥Ã¥±¡¼¥¸¤ò»ÈÍÑ¤¹¤ë¾ì¹ç¤Ï rdoc-f95
+¥Ñ¥Ã¥±¡¼¥¸¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤. ÂàÈò¤µ¤ì¤¿¥ª¥ê¥¸¥Ê¥ë¤Î rdoc ¥Ñ¥Ã¥±¡¼¥¸¤Î
+¥Õ¥¡¥¤¥ë·²¤¬ËÜÍè¤Î¾ì½ê¤ËÉüµ¢¤·¤Þ¤¹.
+
+°Ê²¼¤ÎÄó°Æ¥Ñ¥Ã¥±¡¼¥¸¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤ª¤¯¤È,
+diagram ¥ª¥×¥·¥ç¥ó¤ä mathml ¥ª¥×¥·¥ç¥ó (²¼µ­»²¾È) ¤¬»ÈÍÑ²ÄÇ½¤Ë¤Ê¤ê¤Þ¤¹.
+
+  % apt-get install graphviz libmathml-ruby
+
+
+== RDoc ¤Î»ÈÍÑÊýË¡
+
+¼Â¹Ô¥×¥í¥°¥é¥à¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¾ì½ê¤ò´Ä¶­ÊÑ¿ô *PATH*
+¤ËÀßÄê¤·, ¥é¥¤¥Ö¥é¥ê¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¾ì½ê¤ò´Ä¶­ÊÑ¿ô *RUBYLIB*
+¤ËÀßÄê¤·¤Æ¤¯¤À¤µ¤¤.
+
+Fortran 90/95 ¥Õ¥¡¥¤¥ë¤¬ÃÖ¤¤¤Æ¤¢¤ë¥Ç¥£¥ì¥¯¥È¥ê¤Þ¤Ç°ÜÆ°¤·, °Ê²¼¤Î¥³¥Þ¥ó¥É¤ò
+¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤. *doc* ¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë¥É¥­¥å¥á¥ó¥È¤¬ºîÀ®¤µ¤ì¤Þ¤¹.
+
+  % rdoc -U --ignore-case --charset euc-jp --inline-source
+
+³ÈÄ¥»Ò¤¬ <tt>.f90</tt>, <tt>.F90</tt>, <tt>.f95</tt>, <tt>.F95</tt>
+¤Ç¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï Fortran 90/95 ¥×¥í¥°¥é¥à¤È¤·¤Æ²òÀÏ¤µ¤ì¤Þ¤¹.
+¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤ÎÁ´¤Æ¤Î Fortran 90/95 ¥×¥í¥°¥é¥à¤â²òÀÏ¤µ¤ì¤Þ¤¹.
+
+¤Ê¤ª, ¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤ÈÆ±ÍÍ, ³ÈÄ¥»Ò¤¬ <tt>.rb</tt>,
+<tt>.rbw</tt> ¤Ç¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï Ruby ¥×¥í¥°¥é¥à¤È¤·¤Æ, ³ÈÄ¥»Ò¤¬ 
+<tt>.c</tt>, <tt>.cc</tt>, <tt>.cpp</tt>, <tt>.CC</tt>, <tt>.cxx</tt> 
+¤Ç¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï C ¥×¥í¥°¥é¥à¤È¤·¤Æ²òÀÏ¤µ¤ì¤Þ¤¹.
+
+*doc* ¥Ç¥£¥ì¥¯¥È¥ê°Ê³°¤Ë½ÐÎÏ¤·¤¿¤¤¾ì¹ç¤Ï, 
+<tt>--op</tt> ¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤. 
+¥¿¥¤¥È¥ë¤Ï
+<tt>--title</tt> ¥ª¥×¥·¥ç¥ó¤ÇÊÑ¹¹¤Ç¤­¤Þ¤¹.
+¤Þ¤¿, ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï Fortran 90/95 ¤Î private Â°À­¤Î¥µ¥Ö¥ë¡¼¥Á¥ó¤ä´Ø¿ô
+¤Ê¤É¤Ï¥É¥­¥å¥á¥ó¥È¤Ë½ÐÎÏ¤µ¤ì¤Þ¤»¤ó¤¬, <tt>--all</tt> ¥ª¥×¥·¥ç¥ó¤ò
+¤Ä¤±¤ë¤³¤È¤Ç, Á´¤Æ¤¬¥É¥­¥å¥á¥ó¥È¤Ë½ÐÎÏ¤µ¤ì¤Þ¤¹.
+<tt>--charset</tt>¥ª¥×¥·¥ç¥ó¤Ï, ¥É¥­¥å¥á¥ó¥È¤ËÈ¿±Ç¤µ¤ì¤ë¥³¥á¥ó¥È¤Ë
+ÆüËÜ¸ì¤Ê¤É 2 ¥Ð¥¤¥ÈÊ¸»ú¤¬´Þ¤Þ¤ì¤ë¾ì¹ç¤ËÍÑ¤¤¤Þ¤¹.
+¥³¥á¥ó¥È¤ÎÊ¸»ú¥³¡¼¥É¤Ë¹ç¤ï¤», <tt>euc-jp</tt>, <tt>Shift_JIS</tt>,
+<tt>iso-2022-jp</tt> ¤Ê¤É¤ò»ØÄê¤·¤Æ¤¯¤À¤µ¤¤.
+
+°ìÉô¤Î¥Õ¥¡¥¤¥ë¤Î¤ß¤ò
+¥É¥­¥å¥á¥ó¥È²½¤·¤¿¤¤¾ì¹ç¤Ï, °ú¿ô¤Ë <tt>src/*.f90</tt> ¤Ê¤É¤È
+¥Õ¥¡¥¤¥ëÌ¾¤ä¥Ç¥£¥ì¥¯¥È¥êÌ¾¤òÌÀ¼¨Åª¤Ë»ØÄê¤·¤Æ¤¯¤À¤µ¤¤.
+°Ê²¼¤ÎÎã¤Ç¤Ï, "<tt>src/</tt>" °Ê²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¤ËÂ¸ºß¤¹¤ë
+³ÈÄ¥»Ò "<tt>.f90</tt>" ¤Î¥Õ¥¡¥¤¥ë¤È,
+"<tt>test</tt>" ¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Î¥Õ¥¡¥¤¥ë¤¬¥É¥­¥å¥á¥ó¥È²½¤µ¤ì¤Þ¤¹.
+
+  % rdoc -U --ignore-case --charset euc-jp --inline-source  \
+         --op rdoc --title "RDoc documentations" src/*.f90 test/
+
+¤³¤ÎÊýË¡°Ê³°¤Ë¤â, "<tt>.document</tt>" ¥Õ¥¡¥¤¥ë¤òºîÀ®¤·, ¤½¤ÎÃæ¤Ë
+¥Õ¥¡¥¤¥ëÌ¾¤ä¥Ç¥£¥ì¥¯¥È¥êÌ¾¤òµ­½Ò¤·¤Æ¤ª¤¯¤³¤È¤Ç¥É¥­¥å¥á¥ó¥È²½¤¹¤ë
+¥Õ¥¡¥¤¥ë¤ò¸ÂÄê¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹.
+
+¾Ü¤·¤¤¤³¤È¤Ï
+{RDoc ¥ª¥ê¥¸¥Ê¥ë¤Î README}[link:files/README_org.html] 
+¤ò»²¾È¤¯¤À¤µ¤¤.
+
+
+== ½ñË¡
+
+²òÀÏ¤µ¤ì¤ë¾ðÊó¤ä¥É¥­¥å¥á¥ó¥È¤Î¸«Êý, ¥³¥á¥ó¥ÈÉô¤Î½ñ¤­Êý¤Ë´Ø¤·¤Æ¤Ï,
+<b>parsers/parse_f95.rb</b> ¤ò»²¾È¤¯¤À¤µ¤¤. --mathml ¥ª¥×¥·¥ç¥ó (²¼µ­»²¾È)
+¤ò»ÈÍÑ¤¹¤ë¾ì¹ç¤Ë¤Ï, <b>Generators::TexParser</b> ¤â»²¾È¤¯¤À¤µ¤¤.
+¤¿¤À¤·, ¤³¤ì¤é¤Ëµ­½Ò¤µ¤ì¤ë¤Î¤Ï Fortran 90/95 ¤Ê¤É¤ËÆÃÍ­¤ÊÉôÊ¬¤Ê¤Î¤Ç,
+°ìÈÌÅª¤ÊÉôÊ¬¤Ë´Ø¤·¤Æ¤Ï
+{RDoc ¥ª¥ê¥¸¥Ê¥ë¤Î README}[link:files/README_org.html] 
+¤ò»²¾È¤¯¤À¤µ¤¤.
+ÂçÎÓ¤µ¤ó¤Ë¤è¤ëÆüËÜ¸ìÌõ¤¬ http://www.kmc.gr.jp/~ohai/rdoc.ja.html ¤Ë¤¢¤ê¤Þ¤¹.
+
+== ¥µ¥ó¥×¥ë
+
+* {¥Ç¡¼¥¿ I/O ¥é¥¤¥Ö¥é¥ê gt4f90io ¤Î¥³¡¼¥É¥ê¥Õ¥¡¥ì¥ó¥¹}[http://www.gfd-dennou.org/library/gtool4/gt4f90io/gt4f90io_current/doc/develop_reference/]
+
+* {ÏÇÀ±Âçµ¤¥â¥Ç¥ë DCPAM ¤Î¥³¡¼¥É¥ê¥Õ¥¡¥ì¥ó¥¹ (À½ºîÃæ)}[http://www.gfd-dennou.org/library/dcpam/dcpam3/dcpam3_current/doc/code_reference/htm]
+
+
+== ¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤È¤Î°ã¤¤
+
+¤³¤³¤ÇÇÛÉÛ¤¹¤ë¥Ñ¥Ã¥Á¤Ï, RDoc ¤Î Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É¤Î
+²òÀÏÇ½ÎÏ¤òÂçÉý¤Ë¸þ¾å¤µ¤», Fortran 90/95 ¥×¥í¥°¥é¥à¤«¤é
+¼«Æ°À¸À®¤µ¤ì¤ë¥É¥­¥å¥á¥ó¥È¤Î¾ðÊóÎÌ¤ò½¼¼Â¤µ¤»¤Þ¤¹.
+¼ç¤Ë²þÎÉ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ï, ¸µ¡¹¤Î RDoc ¤ËÉÕÂ°¤µ¤ì¤ë
+{Fortran 90/95 ²òÀÏ¥×¥í¥°¥é¥à parse_f95.rb}[http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rdoc/parsers/parse_f95.rb]
+¤Ç¤¹¤¬, Â¾¤Î¤¤¤¯¤Ä¤«¤Î¥×¥í¥°¥é¥à¤Ë¤â²þÎÉ¤ò»Ü¤·¤Æ¤¤¤Þ¤¹.
+
+¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤Ï Dave Thomas ¤µ¤ó¤Ë¤è¤Ã¤Æ³«È¯¤µ¤ì, 
+¸½ºß¤Ç¤Ï Ryan Davis ¤µ¤ó¤Ë¤è¤Ã¤Æ¥á¥ó¥Æ¥Ê¥ó¥¹¤µ¤ì¤Æ¤¤¤Þ¤¹.
+¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤Ï Ruby ¤Î¥½¡¼¥¹¥³¡¼¥É¥ì¥Ý¥¸¥È¥ê
+¤è¤ê¼èÆÀ¤Ç¤­¤Þ¤¹.
+{Ruby ¥ì¥Ý¥¸¥È¥ê¥¬¥¤¥É}[http://www.ruby-lang.org/ja/documentation/repository-guide] ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤Ë´Ø¤·¤Æ¤Ï
+{RDoc ¥ª¥ê¥¸¥Ê¥ë¤Î README}[link:files/README_org.html]
+¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+
+
+¥ª¥ê¥¸¥Ê¥ë¤«¤é¤ÎÊÑ¹¹ÅÀ¤Î¼ç¤Ê¤â¤Î¤Ï°Ê²¼¤ÎÄÌ¤ê¤Ç¤¹.
+¤Ê¤ª, ´û¤Ë¤³¤Î¥Ñ¥Ã¥Á (2005/12/17 ¥Ð¡¼¥¸¥ç¥ó) ¤Ï
+Ruby ËÜ²È¤Î¥½¡¼¥¹¥³¡¼¥É¥ì¥Ý¥¸¥È¥ê¤Ø¤È¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç,
+°ìÉô¤Ï´û¤Ë¡Ö¥ª¥ê¥¸¥Ê¥ë¤È¤ÎÊÑ¹¹ÅÀ¡×
+¤Ç¤Ï¤Ê¤¯¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤.
+
+<b><tt>--ignore-case</tt> ¥ª¥×¥·¥ç¥ó¤ÎÄÉ²Ã</b> ::
+    Fortran 90/95 µ¬³Ê¤Ç¤ÏÂçÊ¸»ú¾®Ê¸»ú¤Î¶èÊÌ¤Ï¤¢¤ê¤Þ¤»¤ó.
+    ¤³¤ì¤ËÂÐ¤·¤Æ, ¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤Ï¥¯¥é¥¹Ì¾¤ä¥á¥½¥Ã¥ÉÌ¾¤Î
+    ¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹¤ÎºÝ¤ËÂçÊ¸»ú¾®Ê¸»ú¤ò¶èÊÌ¤·¤Þ¤¹. 
+    ¤³¤Î¥ª¥×¥·¥ç¥ó¤òÍ¿¤¨¤ë¤³¤È¤Ë¤è¤ê,
+    ¤½¤Î¶èÊÌ¤ò¹Ô¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹.
+
+<b>¥Õ¥¡¥¤¥ë¤Î¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹</b> ::
+    ¥¯¥é¥¹¤ä¥â¥¸¥å¡¼¥ë, ¥á¥½¥Ã¥É¤ÈÆ±ÍÍ¤Ë, ¥Õ¥¡¥¤¥ëÌ¾¤Ë´Ø¤·¤Æ¤â
+    ¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹¤ò²ÄÇ½¤Ë¤·¤Þ¤·¤¿.
+
+<b><tt>--style</tt> ¥ª¥×¥·¥ç¥ó¤Î²þÎÉ</b> ::
+    ¥ª¥ê¥¸¥Ê¥ë¤Î RDoc ¤Ç¤Ï, ÁêÂÐ¥Ñ¥¹¤Ç¥¹¥¿¥¤¥ë¥·¡¼¥È¤ò»ØÄê¤·¤¿¾ì¹ç,
+    ³Æ¥É¥­¥å¥á¥ó¥È¤Î¥¹¥¿¥¤¥ë¥·¡¼¥È¤Ø¤Î¥Ñ¥¹¤¬Àµ¤·¤¯ÀßÄê¤µ¤ì¤Þ¤»¤ó.
+    ¤³¤Î¥Ñ¥Ã¥Á¤òÅ¬ÍÑ¤¹¤ë¤³¤È¤Ç, Àµ¤·¤¯ÀßÄê¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹.
+
+<b>TeX ¤Ç½ñ¤«¤ì¤¿¿ô¼°¤Î MathML ¤Ø¤ÎÊÑ´¹</b> ::
+    {¤Ò¤é¤¯¤Î¹©Ë¼}[http://www.hinet.mydns.jp/~hiraku/]
+    ¤Ë¤Æ¸ø³«¤µ¤ì¤Æ¤¤¤ë
+    <b>Ruby ÍÑ MathML ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó 0.6b</b> ¤ò
+    ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤Ç, TeX ¤Ç½ñ¤«¤ì¤¿¿ô¼°¤ò
+    MathML ¤Î·Á¼°¤ËÊÑ´¹¤¹¤ë¤³¤È¤¬²ÄÇ½¤Ç¤¹. ¤³¤Îµ¡Ç½¤òÍ­¸ú
+    ¤Ë¤¹¤ë¤¿¤á¤Ë¤Ï rdoc ¥³¥Þ¥ó¥É¤Ë --mathml ¥ª¥×¥·¥ç¥ó¤ò
+    »ØÄê¤·¤Æ¤¯¤À¤µ¤¤.
+    TeX ¤Ç¿ô¼°¤ò½ñ¤¯ºÝ¤Î½ñ¼°¤Ë´Ø¤·¤Æ¤Ï
+    <b>Generators::TexParser</b> ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+
+    <b>¢¨ Ãí°Õ ¢¨</b> --mathml ¥ª¥×¥·¥ç¥ó¤ò»ÈÍÑ¤·¤¿ºÝ¤ËºîÀ®¤µ¤ì¤ë
+    ¥É¥­¥å¥á¥ó¥È¤Ï¥Ö¥é¥¦¥¶¤Ë¤è¤Ã¤Æ¤ÏÀµ¤·¤¯É½¼¨¤µ¤ì¤Ê¤¤¤³¤È¤â
+    ¤¢¤ê¤Þ¤¹.
+    {Mozilla Firefox}[http://www.mozilla.or.jp/products/firefox/]
+    ¤ª¤è¤Ó Internet Explorer
+    (+ {MathPlayer}[http://www.dessci.com/en/products/mathplayer/])
+    ¤Ç¤ÏÀµ¤·¤¯É½¼¨¤µ¤ì¤ë¤³¤È¤ò³ÎÇ§¤·¤Æ¤¤¤Þ¤¹.
+    ¤½¤ÎÂ¾¤Î¥Ö¥é¥¦¥¶¤Î MathML ÂÐ±þ¤Ë´Ø¤·¤Æ¤Ï,
+    {MathML ÆüËÜ¸ì¾ðÊó}[http://washitake.com/MathML/] 
+    ¤ä {MathML Software - Browsers}[http://www.w3.org/Math/Software/mathml_software_cat_browsers.html]
+    ¤Ê¤É¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+
+--
+# °Ê¹ß¤Ï Fortran ¤È¤Ï´Ø·¸¤ÎÌµ¤¤²þÊÑ
+#
+#<b>Ruby ¥é¥¤¥Ö¥é¥ê IRB::SLex ¤ÎÆÉ¤ß¹þ¤ß¤Ë¤Ä¤¤¤Æ</b> ::
+#    Ruby 1.8.2 ¤Ç¤âÆ°ºî¤¹¤ë¤è¤¦, ºÇ¿·¤Î parse_rb.rb ¤ò£±¤Ä°ÊÁ°¤Î
+#    ¥Ð¡¼¥¸¥ç¥ó¤ËÌá¤·¤Æ¤¤¤Þ¤¹.
+#
+#
+#<b>³ÈÄ¥»Ò<tt>cxx</tt>¤â C ¥Ñ¡¼¥µ¤Ç²ò¼á</b> ::
+#    ¤³¤ì¤ÏÁ´¤¯ Fortran 90/95 ¤È¤Ï´Ø·¸¤¢¤ê¤Þ¤»¤ó.
+#    ¤³¤Î³ÈÄ¥»Ò <tt>cxx</tt> ¤Ï <tt>c++</tt> ¥Õ¥¡¥¤¥ë¤«¤é
+#    SWIG[http://swig.shibu.jp/] ¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¤Î³ÈÄ¥»Ò¤Ç¤¹.
+++
+
+²òÀÏÇ½ÎÏ¤¬¸þ¾å¤µ¤ì¤¿¤Î¤ËÈ¼¤¤, ¥É¥­¥å¥á¥ó¥È¤ËÈ¿±Ç¤µ¤ì¤ë¥³¥á¥ó¥È¤Î½ñË¡¤Î
+Â¿¾¯ÊÑ¹¹¤µ¤ì¤Æ¤¤¤Þ¤¹. 
+<b>parsers/parse_f95.rb</b> ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+
+
+== »ÈÍÑ¾å¤ÎÃí°Õ
+
+RDoc Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É²òÀÏµ¡Ç½¶¯²½ÈÇ¤Î¥Ñ¥Ã¥Á¤â¤·¤¯¤Ï¥Ñ¥Ã¥±¡¼¥¸
+(°Ê²¼, ËÜ¥Ñ¥Ã¥Á¤â¤·¤¯¤Ï¥Ñ¥Ã¥±¡¼¥¸)¤Ï, 
+¸¦µæ¡¦¶µ°é¤Î¾ì¤ÇÍÑ¤¤¤é¤ì¤ë¤³¤È¤òÁ°Äó¤È¤·¤Æ¤ª¤ê¤Þ¤¹. ¶µ°é¸½¾ì¤Ë¤ª¤¤¤Æ¤Ï¼«Í³¤Ë»ÈÍÑ¡¦²þÊÑ¤·¤Æ¤¤¤¿¤À¤¤¤Æ·ë¹½¤Ç¤¹. 
+¥é¥¤¥»¥ó¥¹µ¬Äê¤ÏËÜ²È RDoc ¤Ë½àµò¤·¤Þ¤¹.
+{RDoc ¥ª¥ê¥¸¥Ê¥ë¤Î README}[link:files/README_org.html] 
+¤ò»²¾È¤¯¤À¤µ¤¤.
+
+ËÜ¥Ñ¥Ã¥Á¤â¤·¤¯¤Ï¥Ñ¥Ã¥±¡¼¥¸¤òÍøÍÑ¤·¤ÆÆÀ¤é¤ì¤¿²Ê³Øµ»½ÑÅªÀ®²Ì¤ò
+ÏÀÊ¸¤ä Web Åù¤Ë¤ÆÈ¯É½¤¹¤ëºÝ¤Ë¤Ï, ¤½¤Î»Ý¤òµ­¤·, ¥ê¥Õ¥¡¥ì¥ó¥¹¤Ëµó¤²¤Æ
+Äº¤­¤Þ¤¹¤è¤¦¤ª´ê¤¤¤·¤Þ¤¹.
+
+* °úÍÑÎã (ÏÂÊ¸)
+
+    ¿¹Àî Ì÷Âç, ÀÐÅÏ Àµ¼ù, ËÙÇ·Æâ Éð, ¾®¹â Àµ»Ì, ÎÓ ¾Í²ð,
+    ¿ôÃÍ¥â¥Ç¥ê¥ó¥°¥×¥í¥¸¥§¥¯¥È dcmodel, 2007:
+    RDoc Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É²òÀÏµ¡Ç½¶¯²½ÈÇ,
+    http://www.gfd-dennou.org/library/dcmodel/, ÃÏµåÎ®ÂÎÅÅÇ¾¶æ³ÚÉô.
+
+* °úÍÑÎã (±ÑÊ¸)
+
+    Morikawa,Y., Ishiwatari,M., Horinouchi,T., Odaka,M., Hayashi,Y.-Y.,
+    dcmodel: Numerical Model Porject, 2007:
+    Enhanced version of RDoc Fortran 90/95 parser,
+    http://www.gfd-dennou.org/library/dcmodel/, GFD Dennou Club.
+
+
+== Ï¢ÍíÀè
+
+¥³¥á¥ó¥È¤ä°Õ¸«, ¼ÁÌä¤Ê¤É¤Ï link:../rdoc-f95-mailto.png ¤Þ¤Ç¤ª´ó¤»¤¯¤À¤µ¤¤.
+
+
+== ÍúÎò
+
+==== 2007/03/09
+
+* RiWriter ¤¬ Ruby 1.8 ¤ÇÆ°ºî¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ.
+
+==== 2007/02/27
+
+* Ruby ¥½¡¼¥¹¥³¡¼¥É¥ì¥Ý¥¸¥È¥ê¤¬ CVS ¤«¤é SVN ¤ËÊÑ¹¹¤µ¤ì¤¿¤³¤È¤ËÈ¼¤¤
+  README, README.ja ¤ò½¤Àµ.
+
+==== 2007/01/12
+
+* "FUNCTION Get_Platform() RESULT(platform)" ¤Î¤è¤¦¤Ê
+  Fortran 90/95 ¥½¡¼¥¹¥³¡¼¥É¤¬
+  "Get_Platform( platform ) result(platform)" ¤Î¤è¤¦¤ËÉ½¼¨¤µ¤ì¤Æ¤·¤Þ¤¦
+  ¥Ð¥°¤Î½¤Àµ (Hani Andreas Ibrahim »á¤Ë¤è¤ëÊó¹ð¤è¤ê).
+
+==== 2007/01/09
+
+* <b>Generators::TexParser</b> ¤Î½¤Àµ.
+
+==== 2007/01/05
+
+* Ï¢ÍíÀè¥¢¥É¥ì¥¹¤òÊÑ¹¹.
+* ¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë¤ò Ruby ¥Ð¡¼¥¸¥ç¥ó 1.8.5-p12 ¤ËÂÐ±þ.
+* <b>Generators::TexParser</b> ¤Ë
+  ²òÀâ¡Ö\newcommand, \newenvironment ¤Î»ÈÍÑÊýË¡¡×¤òÄÉ²Ã.
+* <b>parsers/parse_f95.rb</b> ¤Ë
+  ²òÀâ¡ÖÍøÍÑ¼ÔÄêµÁ±é»»»Ò, ÍøÍÑ¼ÔÄêµÁÂåÆþ¤Î¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹¡×¤òÄÉ²Ã.
+* <b>parsers/parse_f95.rb</b> ¤Î
+  ²òÀâ¡Ö¸À¸ìÍ×ÁÇ¤ÎÉ½¼¨½ç½ø¡×¤ò½¤Àµ
+* ¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹»þ¤Ë°ìÉô '--ignore-case' ¥ª¥×¥·¥ç¥ó¤¬¸ú¤«¤Ê¤¤
+  ÌäÂê¤ò½¤Àµ.
+
+==== 2006/12/15
+
+* ¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë¤ò Ruby ¥Ð¡¼¥¸¥ç¥ó 1.8.5-p2 ¤ËÂÐ±þ.
+
+
+==== 2006/12/13
+
+* "!:doc-priority 100:" ¤È¤¤¤Ã¤¿¥³¥á¥ó¥È¤Îµ­½Ò¤Ë¤è¤ê,
+  É½¼¨¤µ¤ì¤ë¸À¸ìÍ×ÁÇ¤Î½çÈÖ¤òÌÀ¼¨Åª¤ËÊÑ¹¹²ÄÇ½¤Ë¤¹¤ë.
+
+==== 2006/11/20
+
+* ".document" ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤ÆÄÉµ­.
+* °ì¤Ä¤Î interface ¥Ö¥í¥Ã¥¯Æâ¤Ëµ­½Ò¤µ¤ì¤ë°Û¤Ê¤ëÌ¾Á°¤ÎÊ£¿ô¤Î
+  Éû¥×¥í¥°¥é¥à¤òÀµ¤·¤¯²òÀÏ¤Ç¤­¤ë¤è¤¦½¤Àµ.
+* Ruby ËÜ²È¤Î CVS ¤Î¹¹¿·ÆâÍÆ¤ò°Ü¿¢.
+
+==== 2006/11/16
+
+* Generators::TexParser ¤Î²þÎÉ.
+  * ²òÀâÊ¸½ñ¤Ë, ¿ô¼°¤òÊ£¿ô¹Ô¤ÇÉ½¼¨¤¹¤ë¾ì¹ç¤ÎÎã¤òÄÉµ­.
+  * "$ID: ... $" ¤ä "$LOG: ... $ ¤È¤¤¤Ã¤¿,
+    CVS ¤Î¥­¡¼¥ï¡¼¥É¤È¤·¤ÆÍÑ¤¤¤é¤ì¤Æ¤¤¤ë½ñ¤­Êý¤Ï¿ô¼°¤È¤·¤Æ°·¤ï¤Ê¤¤.
+* parse_f95.rb ¤Î¤¿¤á¤Ë code_object.rb ¤ËÄÉ²Ã¤·¤¿
+  Á´¤Æ¤Î¥á¥½¥Ã¥É¤ò parse_f95.rb ¤Ø°ÜÆ°¤·¤¿. ¤³¤ì¤Ë¤è¤ê,
+  parse_f95.rb Ã±ÂÎ¤ò Ruby 1.8.5 ¤ËÁÈ¤ß¹þ¤ó¤Ç»ÈÍÑ¤¹¤ë¤³¤È¤¬²ÄÇ½¤È¤Ê¤Ã¤¿.
+
+==== 2006/11/14
+
+* ¥Ñ¥Ã¥Á¥Õ¥¡¥¤¥ë¤ò Ruby ¥Ð¡¼¥¸¥ç¥ó 1.8.5 ¤ËÂÐ±þ.
+* ¥Ñ¥Ã¥Á¤Î¥Õ¥¡¥¤¥ëÌ¾¤òÊÑ¹¹.
+* Debian GNU/Linux ¤Î¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤ÎºîÀ®ÊýË¡¤ò½¤Àµ.
+* À¸À®¤µ¤ì¤ë¥É¥­¥å¥á¥ó¥È¤Î XHTML ¤Î¥Ð¡¼¥¸¥ç¥ó ¤ò XHTML 1.0
+  Transitional ¤«¤é XHTML 1.1 plus MathML 2.0 ¤ØÊÑ¹¹.
+* Fortran 90/95 ¥Ñ¡¼¥µ¤Ë¤ª¤¤¤Æ, ·ÑÂ³¹Ô¤Î½èÍýÊýË¡¤ò½¤Àµ.
+* Ruby ËÜ²È¤Î CVS ¤Î¹¹¿·ÆâÍÆ¤ò°Ü¿¢.
+* Institute for Plasma Physics ¤Î Giger »á¤Î¥³¥á¥ó¥È¤ò¼õ¤±¤Æ±Ñ¸ì¤ò½¤Àµ
+* "../" ¤Ç»Ï¤Þ¤ë¥Õ¥¡¥¤¥ëÌ¾¤ò¥Ñ¡¼¥¹¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ.
+* »ÈÍÑ¤¹¤ë Ruby ÍÑ MathML ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó¤ò 0.5 ¤«¤é 0.6a ¤Ø.
+* Ruby ÍÑ MathML ¥é¥¤¥Ö¥é¥ê¤ò»ÈÍÑ¤¹¤ëºÝ, ¥¨¥é¡¼¤¬À¸¤¸¤Æ¤â·Ù¹ð¤òÈ¯¤·¤Æ
+  Æ°ºî¤ò·ÑÂ³¤¹¤ë¤è¤¦½¤Àµ.
+
+==== 2006/08/15
+
+* Debian GNU/Linux ÍÑ¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤Î¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤ò²þÄê.
+* NAMELIST ¤Î¥³¥á¥ó¥È¤ò¼èÆÀ¤¹¤ë¥×¥í¥°¥é¥à¤Î¥Ð¥°¤ò½¤Àµ.
+
+==== 2006/08/14
+
+* ¥Ñ¥Ã¥±¡¼¥¸Ì¾¤ò rdoc-dennou ¤«¤é rdoc-f95 ¤ËÊÑ¹¹.
+* ¸ø³«¥¢¥É¥ì¥¹¤ò
+  http://www.gfd-dennou.org/library/dcmodel/rdoc-dennou/ ¤«¤é
+  http://www.gfd-dennou.org/library/dcmodel/rdoc-f95/ ¤ØÊÑ¹¹.
+  (²áµî¤Î URL ¤â¤·¤Ð¤é¤¯»Ä¤·¤Æ¤ª¤­¤Þ¤¹).
+* README, README.ja ¤Î½¤Àµ.
+* TeX ¤Ç½ñ¤«¤ì¤¿¿ô¼°¤ò MathML ¤Ø¤ÎÊÑ´¹¤¹¤ëµ¡Ç½¤òÄÉ²Ã.
+* style ¥ª¥×¥·¥ç¥ó¤Î²þÎÉ.
+* ¼ç¥×¥í¥°¥é¥à¤â 'Methods' ¤ÎÍó¤ËÄÉ²Ã.
+* ³Æ¥Õ¥¡¥¤¥ë¤ËÅÀºß¤·¤Æ¤¤¤ë NAMELIST ÊÑ¿ô·²¤ò¼«Æ°Åª¤Ë°ì²Õ½ê¤Ë
+  ½¸Ìó¤·¤ÆÉ½¼¨¤¹¤ë¤è¤¦²þÎÉ.
+* F90 ¥Õ¥¡¥¤¥ë¤¬Äó¶¡¤¹¤ë¥â¥¸¥å¡¼¥ë·²¤ÎÌ¾Á°¤ò,
+  ¼«Æ°Åª¤Ë¥Õ¥¡¥¤¥ë¤Î¥É¥­¥å¥á¥ó¥È¤ËÄÉµ­¤¹¤ë¤è¤¦²þÎÉ.
+
+
+==== 2006/02/24
+
+* ±Ñ¸ìÈÇ README ¤ÎºîÀ®
+
+* README.ja ¤Î½¤Àµ.
+
+
+==== 2006/01/18
+* ¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô¤Î°ú¿ô¤Î¾ðÊó¤ò¥³¥á¥ó¥È¤È¤·¤Æ½ÐÎÏ¤¹¤ëºÝ¤Î½ñ¼°¤ò
+  ¾¯¤·¤À¤±½¤Àµ.
+
+  * °ú¿ô¾ðÊó¤ò¥³¥á¥ó¥È¤Ë½ÐÎÏ¤¹¤ëºÝ, °ú¿ô¤Î¸å¤í¤Ë¶õÇò¤òÁÞÆþ¤·¤¿.
+    ¤³¤ì¤Ë¤è¤ê, ¥á¥½¥Ã¥É¤ÎÊÂ¤ÓÂØ¤¨¤ò¹Ô¤¦ºÝ (¥á¥½¥Ã¥É¤Ï¥á¥½¥Ã¥ÉÌ¾,
+    °ú¿ô, ¥³¥á¥ó¥È¤Î½ç¤ËÂç¤­¤µ¤òÈæ³Ó¤·, ÊÂ¤Ù¤ë½ç½ø¤ò·è¤á¤ë),
+    "args" ¤¬ "args(:)" ¤è¤ê¤âÁ°¤ËÍè¤ë¤è¤¦¤Ë¤Ê¤ë.
+
+* ËÜ²È Ruby ¤Î CVS ¥ì¥Ý¥¸¥È¥êÆâ¤Î¹¹¿·¤ò¼õ¤±, ºÇ¿·ÈÇ¤ò¤³¤Á¤é¤Î
+  ¥Ñ¥Ã¥±¡¼¥¸ÈÇ¤Ë¤â°Ü¿¢.
+
+==== 2005/12/28
+* ruby 1.8.4 ¤Î¥ê¥ê¡¼¥¹¤ËÈ¼¤¤, ¥Ñ¥Ã¥Á¤ò 1.8.4 ÍÑ¤ËÊÑ¹¹.
+
+==== 2005/12/17
+
+* Æ±Ì¾¤Î¼êÂ³¤­Æ±»Î¤Ç¸ø³«¡¦Èó¸ø³«Â°À­¤ò¸í¤Ã¤ÆÀßÄê¤·¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ.
+* °Ê²¼¤Î¥Ð¥°¤ò½¤Àµ
+  * program, module, subroutine, function ¤Î end Ê¸¤ÏÉ¬¤º
+    end program, end module, end subroutine, end function ¤Î¤è¤¦¤Ë
+    µ­½Ò¤·¤Ê¤¤¤È, ½ñË¡¤òÀµ¤·¤¯²òÀÏ½ÐÍè¤Ê¤¤.
+  * program ¡Á end program Ê¸¤Î, ºÇ½é¤ÈºÇ¸å¤Î program ¤È¤¤¤¦Ê¸»ú¤ò
+    ¾ÊÎ¬¤·¤¿¾ì¹ç, program Ê¸¤ÎÆâÉô¤ÇÄêµÁ¤µ¤ì¤ë¤â¤Î¤ÏÁ´¤Æ public ¤À¤È
+    Ç§¼±¤µ¤ì¤ë.
+  * ";" ¤ÎÊ¸»ú¤ò¥³¥á¥ó¥ÈÆâ¤Ç¤â²þ¹Ô¤ËÊÑ´¹¤·¤Æ¤·¤Þ¤¦
+* !-- ¡Á !++ ¤Ë¤è¤ë¥³¥á¥ó¥Èºï½ü¤Î»ØÄê¤ÎºÝ¤Ë, "!" ¤è¤ê¤âÁ°¤Ë¶õÇò¤ò
+  ´Þ¤ó¤Ç¤è¤¤¤è¤¦¤Ë½¤Àµ.
+* interface Ê¸¤Ç»ØÄê¤µ¤ì¤ë³°Éô¼êÂ³¤­¤Î²òÀÏ¤ò½¤Àµ.
+* ·ÑÂ³¹Ô¤Î°·¤¤¤ò½¤Àµ.
+
+==== 2005/12/13
+
+* parsers/parse_f95.rb ¤ËÃí°Õ»ö¹à¤È Todo ¤òÄÉ²Ã.
+* ¡Ö¥µ¥ó¥×¥ë¡×¤òÄÉ²Ã.
+* public, private Ê¸¤ò²òÀÏ¤¹¤ëÉôÊ¬¤Î¥Ð¥°¤ò½¤Àµ.
+
+==== 2005/12/08
+
+* ¡Ö»ÈÍÑ¾å¤ÎÃí°Õ¡×, ¡ÖÏ¢ÍíÀè¡×¤òÄÉ²Ã.
+* ¸ø³«¥¢¥É¥ì¥¹¤ò
+  http://www.gfd-dennou.org/library/dcmodel/doc/rdoc-dennou/ ¤«¤é
+  http://www.gfd-dennou.org/library/dcmodel/rdoc-dennou/ ¤ØÊÑ¹¹.
+  (²áµî¤Î URL ¤â¤·¤Ð¤é¤¯»Ä¤·¤Æ¤ª¤­¤Þ¤¹).
+
+==== 2005/11/28
+
+* ":nodoc:" ¤Î»ØÄê¤ò²ÄÇ½¤Ë¤¹¤ë.
+* ¥µ¥Ö¥ë¡¼¥Á¥ó¤ä´Ø¿ôÆâ¤Î "contains" Ê¸¤Î½èÍýÊýË¡¤ò½¤Àµ¤¹¤ë.
+* É½Âê¤òÊÑ¹¹¤¹¤ë.
+* ²áµî¤Î¥Ð¡¼¥¸¥ç¥ó¤ò¸ø³«¤¹¤ë.
+
+==== 2005/11/17
+
+* °ìÄÌ¤êÍß¤·¤¤µ¡Ç½¤¬Â·¤¤, ¥É¥­¥å¥á¥ó¥È¤Î¥Á¥§¥Ã¥¯¤â¹Ô¤Ã¤¿¤Î¤Ç,
+  ¥¿¥°¤ò¤Ä¤±¤Æ¸ø³«¤¹¤ë.
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/README.org ../rdoc-f95-20070309/README.org
--- ruby-1.8.5-p12/lib/rdoc/README.org	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/README.org	2006-07-08 14:56:44.000000000 +0900
@@ -0,0 +1,502 @@
+= RDOC - Ruby Documentation System
+
+== Annotation
+
+This is a copy from 
+{RDoc original README}[http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html]
+
+See README or README.ja .
+
+== Overview
+
+This package contains Rdoc and SimpleMarkup. Rdoc is an application
+that produces documentation for one or more Ruby source files. We work
+similarly to JavaDoc, parsing the source, and extracting the
+definition for classes, modules, and methods (along with includes and
+requires).  We associate with these optional documentation contained
+in the immediately preceding comment block, and then render the result
+using a pluggable output formatter. (Currently, HTML is the only
+supported format. Markup is a library that converts plain text into
+various output formats. The Markup library is used to interpret the
+comment blocks that Rdoc uses to document methods, classes, and so on.
+
+This library contains two packages, rdoc itself and a text markup
+library, 'markup'. 
+
+== Roadmap
+
+* If you want to use Rdoc to create documentation for your Ruby source
+  files, read on.
+* If you want to include extensions written in C, see rdoc/parsers/parse_c.rb.
+* For information on the various markups available in comment
+  blocks, see markup/simple_markup.rb.
+* If you want to drive Rdoc programatically, see RDoc::RDoc.
+* If you want to use the library to format text blocks into HTML,
+  have a look at SM::SimpleMarkup.
+* If you want to try writing your own HTML output template, see
+  RDoc::Page.
+
+== Summary
+
+Once installed, you can create documentation using the 'rdoc' command
+(the command is 'rdoc.bat' under Windows)
+
+  % rdoc [options]  [names...]
+
+Type "rdoc --help" for an up-to-date option summary.
+
+A typical use might be to generate documentation for a package of Ruby
+source (such as rdoc itself). 
+
+  % rdoc
+
+This command generates documentation for all the Ruby and C source
+files in and below the current directory. These will be stored in a
+documentation tree starting in the subdirectory 'doc'.
+
+You can make this slightly more useful for your readers by having the
+index page contain the documentation for the primary file. In our
+case, we could type
+
+  % rdoc --main rdoc/rdoc.rb
+
+You'll find information on the various formatting tricks you can use
+in comment blocks in the documentation this generates.
+
+RDoc uses file extensions to determine how to process each file. File
+names ending <tt>.rb</tt> and <tt>.rbw</tt> are assumed to be Ruby
+source. Files ending <tt>.c</tt> are parsed as C files. All other
+files are assumed to contain just SimpleMarkup-style markup (with or
+without leading '#' comment markers). If directory names are passed to
+RDoc, they are scanned recursively for C and Ruby source files only.
+
+== Credits
+
+* The Ruby parser in rdoc/parse.rb is based heavily on the outstanding
+  work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby
+  parser for irb and the rtags package.
+
+* Code to diagram classes and modules was written by Sergey A Yanovitsky
+  (Jah) of Enticla. 
+
+* Charset patch from MoonWolf.
+
+* Rich Kilmer wrote the kilmer.rb output template.
+
+* Dan Brickley led the design of the RDF format.
+
+== License
+
+RDoc is Copyright (c) 2001-2003 Dave Thomas, The Pragmatic Programmers.  It
+is free software, and may be redistributed under the terms specified
+in the README file of the Ruby distribution.
+
+
+= Usage
+
+RDoc is invoked from the command line using:
+
+   % rdoc <options> [name...]
+
+Files are parsed, and the information they contain collected, before
+any output is produced. This allows cross references between all files
+to be resolved. If a name is a directory, it is traversed. If no
+names are specified, all Ruby files in the current directory (and
+subdirectories) are processed.
+
+Options are:
+
+[<tt>--accessor</tt> <i>name[,name...]</i>]
+    specifies the name(s) of additional methods that should be treated
+    as if they were <tt>attr_</tt><i>xxx</i> methods. Specifying
+    "--accessor db_opt" means lines such as
+
+         db_opt :name, :age
+  
+    will get parsed and displayed in the documentation. Each name may have an
+    optional "=flagtext" appended, in which case the given flagtext will appear
+    where (for example) the 'rw' appears for attr_accessor.
+
+[<tt>--all</tt>]
+    include protected and private methods in the output (by default
+    only public methods are included)
+
+[<tt>--charset</tt> _charset_]
+    Set the character set for the generated HTML.
+
+[<tt>--diagram</tt>]
+    include diagrams showing modules and classes.  This is currently
+    an experimental feature, and may not be supported by all output
+    templates. You need dot V1.8.6 or later to use the --diagram
+    option correctly (http://www.research.att.com/sw/tools/graphviz/).
+
+[<tt>--exclude</tt> <i>pattern</i>]
+    exclude files and directories matching this pattern from processing
+
+[<tt>--extension</tt> <i>new=old</i>]
+    treat files ending <i>.new</i> as if they ended
+    <i>.old</i>. Saying '--extension cgi=rb' causes RDoc to treat .cgi
+    files as Ruby source.
+
+[<tt>fileboxes</tt>]
+    Classes are put in boxes which represents files, where these
+    classes reside. Classes shared between more than one file are
+    shown with list of files that sharing them.  Silently discarded if
+    --diagram is not given Experimental.
+
+[<tt>--fmt</tt> _fmt_]
+    generate output in a particular format.
+
+[<tt>--help</tt>]
+    generate a usage summary.
+
+[<tt>--help-output</tt>]
+    explain the various output options.
+
+[<tt>--ignore-case</tt>]
+    The case of names of classes or modules or methods are ignored.
+
+[<tt>--image-format</tt> <i>gif/png/jpg/jpeg</i>]
+    sets output image format for diagrams. Can be png, gif, jpeg,
+    jpg. If this option is omitted, png is used. Requires --diagram.
+
+[<tt>--include</tt> <i>dir,...</i>]
+    specify one or more directories to be searched when satisfying
+    :+include+: directives. Multiple <tt>--include</tt> options may be
+    given. The directory containing the file currently being processed
+    is always searched.
+
+[<tt>--inline-source</tt>]
+    By default, the source code of methods is shown in a popup. With
+    this option, it's displayed inline.
+
+[<tt>line-numbers</tt>]
+    include line numbers in the source code
+
+[<tt>--main</tt> _name_]
+    the class of module _name_ will appear on the index page. If you
+    want to set a particular file as a main page (a README, for
+    example) simply specifiy its name as the first on the command
+    line.
+
+[<tt>--merge</tt>]
+    when generating _ri_ output, if classes being processed already
+    exist in the destination directory, merge in the current details
+    rather than overwrite them.
+
+[<tt>--one-file</tt>]
+    place all the output into a single file
+
+[<tt>--op</tt> _dir_]
+    set the output directory to _dir_ (the default is the directory
+    "doc")
+
+[<tt>--op-name</tt> _name_]
+    set the name of the output. Has no effect for HTML.
+    "doc")
+
+[<tt>--opname</tt> _name_]
+    set the output name (has no effect for HTML).
+
+[<tt>--promiscuous</tt>]
+    If a module or class is defined in more than one source file, and
+    you click on a particular file's name in the top navigation pane,
+    RDoc will normally only show you the inner classes and modules of
+    that class that are defined in the particular file. Using this
+    option makes it show all classes and modules defined in the class,
+    regardless of the file they were defined in.
+
+[<tt>--quiet</tt>]
+    do not display progress messages
+
+[<tt>--ri</tt>, <tt>--ri-site</tt>, _and_ <tt>--ri-system</tt>]
+    generate output than can be read by the _ri_ command-line tool.
+    By default --ri places its output in ~/.rdoc, --ri-site in
+    $datadir/ri/<ver>/site, and --ri-system in
+    $datadir/ri/<ver>/system. All can be overridden with a subsequent
+    --op option. All default directories are in ri's default search
+    path.
+
+[<tt>--show-hash</tt>]
+    A name of the form #name in a comment is a possible hyperlink to
+    an instance method name. When displayed, the '#' is removed unless
+    this option is specified
+
+[<tt>--style</tt> <i>stylesheet url</i>]
+    specifies the URL of an external stylesheet to use (rather than
+    generating one of our own)
+
+[<tt>tab-width</tt> _n_]
+    set the width of tab characters (default 8)
+
+[<tt>--template</tt> <i>name</i>]
+    specify an alternate template to use when generating output (the
+    default is 'standard'). This template should be in a directory
+    accessible via $: as rdoc/generators/xxxx_template, where 'xxxx'
+    depends on the output formatter.
+
+[<tt>--version</tt>]
+   display  RDoc's version
+
+[<tt>--webcvs</tt> _url_]
+    Specify a URL for linking to a web frontend to CVS. If the URL
+    contains a '\%s', the name of the current file will be
+    substituted; if the URL doesn't contain a '\%s', the filename will
+    be appended to it.
+
+= Example
+
+A typical small Ruby program commented using RDoc might be as follows. You
+can see the formatted result in EXAMPLE.rb and Anagram.
+
+      :include: EXAMPLE.rb
+
+= Markup
+
+Comment blocks can be written fairly naturally, either using '#' on
+successive lines of the comment, or by including the comment in 
+an =begin/=end block. If you use the latter form, the =begin line
+must be flagged with an RDoc tag:
+
+  =begin rdoc
+  Documentation to 
+  be processed by RDoc.
+  =end
+
+Paragraphs are lines that share the left margin. Text indented past
+this margin are formatted verbatim.
+
+1. Lists are typed as indented paragraphs with:
+   * a '*' or '-' (for bullet lists)
+   * a digit followed by a period for 
+     numbered lists
+   * an upper or lower case letter followed
+     by a period for alpha lists.
+
+   For example, the input that produced the above paragraph looked like
+       1. Lists are typed as indented 
+          paragraphs with:
+          * a '*' or '-' (for bullet lists)
+          * a digit followed by a period for 
+            numbered lists
+          * an upper or lower case letter followed
+            by a period for alpha lists.
+
+2. Labeled lists (sometimes called description
+   lists) are typed using square brackets for the label.
+      [cat]   small domestic animal
+      [+cat+] command to copy standard input
+
+3. Labeled lists may also be produced by putting a double colon
+   after the label. This sets the result in tabular form, so the
+   descriptions all line up. This was used to create the 'author'
+   block at the bottom of this description.
+      cat::   small domestic animal
+      +cat+:: command to copy standard input
+
+   For both kinds of labeled lists, if the body text starts on the same
+   line as the label, then the start of that text determines the block
+   indent for the rest of the body. The text may also start on the line
+   following the label, indented from the start of the label. This is
+   often preferable if the label is long. Both the following are
+   valid labeled list entries:
+
+      <tt>--output</tt> <i>name [, name]</i>::
+          specify the name of one or more output files. If multiple
+          files are present, the first is used as the index.
+
+      <tt>--quiet:</tt>:: do not output the names, sizes, byte counts,
+                          index areas, or bit ratios of units as
+                          they are processed.
+
+4. Headings are entered using equals signs
+
+      = Level One Heading
+      == Level Two Heading
+   and so on
+
+5. Rules (horizontal lines) are entered using three or
+   more hyphens.
+
+6. Non-verbatim text can be marked up:
+
+   _italic_::     \_word_ or \<em>text</em>
+   *bold*::       \*word* or \<b>text</b>
+   +typewriter+:: \+word+ or \<tt>text</tt>
+
+   The first form only works around 'words', where a word is a
+   sequence of upper and lower case letters and underscores. Putting a
+   backslash before inline markup stops it being interpreted, which is
+   how I created the table above:
+
+     _italic_::     \_word_ or \<em>text</em>
+     *bold*::       \*word* or \<b>text</b>
+     +typewriter+:: \+word+ or \<tt>text</tt>
+
+7. Names of classes, source files, and any method names
+   containing an underscore or preceded by a hash
+   character are automatically hyperlinked from
+   comment text to their description. 
+
+8. Hyperlinks to the web starting http:, mailto:, ftp:, or www. are
+   recognized. An HTTP url that references an external image file is
+   converted into an inline <IMG..>.  Hyperlinks starting 'link:' are
+   assumed to refer to local files whose path is relative to the --op
+   directory.
+
+   Hyperlinks can also be of the form <tt>label</tt>[url], in which
+   case the label is used in the displayed text, and <tt>url</tt> is
+   used as the target. If <tt>label</tt> contains multiple words,
+   put it in braces: <em>{multi word label}[</em>url<em>]</em>.
+       
+9. Method parameter lists are extracted and displayed with
+   the method description. If a method calls +yield+, then
+   the parameters passed to yield will also be displayed:
+
+      def fred
+        ...
+        yield line, address
+
+   This will get documented as
+
+      fred() { |line, address| ... }
+
+   You can override this using a comment containing 
+   ':yields: ...' immediately after the method definition
+
+      def fred      # :yields: index, position
+        ...
+        yield line, address
+
+   which will get documented as
+
+       fred() { |index, position| ... }
+
+
+10. ':yields:' is an example of a documentation modifier. These appear
+    immediately after the start of the document element they are modifying.
+    Other modifiers include
+
+    [<tt>:nodoc:</tt><i>[all]</i>]
+         don't include this element in the documentation.  For classes
+         and modules, the methods, aliases, constants, and attributes
+         directly within the affected class or module will also be
+         omitted.  By default, though, modules and classes within that
+         class of module _will_ be documented. This is turned off by
+         adding the +all+ modifier.
+
+              module SM  #:nodoc:
+                class Input
+                end
+              end
+              module Markup #:nodoc: all
+                class Output
+                end
+              end
+
+         In the above code, only class <tt>SM::Input</tt> will be
+         documented.
+
+    [<tt>:doc:</tt>]
+         force a method or attribute to be documented even if it
+         wouldn't otherwise be. Useful if, for example, you want to
+         include documentation of a particular private method.
+
+    [<tt>:notnew:</tt>]
+         only applicable to the +initialize+ instance method. Normally
+         RDoc assumes that the documentation and parameters for
+         #initialize are actually for the ::new method, and so fakes
+         out a ::new for the class. THe :notnew: modifier stops
+         this. Remember that #initialize is protected, so you won't
+         see the documentation unless you use the -a command line
+         option.
+
+
+11. RDoc stops processing comments if it finds a comment
+    line containing '<tt>#--</tt>'. This can be used to 
+    separate external from internal comments, or 
+    to stop a comment being associated with a method, 
+    class, or module. Commenting can be turned back on with
+    a line that starts '<tt>#++</tt>'.
+
+        # Extract the age and calculate the
+        # date-of-birth.
+        #--
+        # FIXME: fails if the birthday falls on
+        # February 29th
+        #++
+        # The DOB is returned as a Time object.
+
+        def get_dob(person)
+           ...
+
+12. Comment blocks can contain other directives:
+
+    [<tt>:section: title</tt>]
+        Starts a new section in the output. The title following
+	<tt>:section:</tt> is used as the section heading, and the
+	remainder of the comment containing the section is used as
+	introductory text. Subsequent methods, aliases, attributes,
+	and classes will be documented in this section. A :section:
+	comment block may have one or more lines before the :section:
+	directive. These will be removed, and any identical lines at
+	the end of the block are also removed. This allows you to add
+	visual cues such as
+
+           # ----------------------------------------
+	   # :section: My Section
+	   # This is the section that I wrote.
+	   # See it glisten in the noon-day sun.
+           # ----------------------------------------
+
+    [<tt>call-seq:</tt>]
+        lines up to the next blank line in the comment are treated as
+        the method's calling sequence, overriding the
+        default parsing of method parameters and yield arguments.
+
+    [<tt>:include:</tt><i>filename</i>] 
+         include the contents of the named file at this point. The
+         file will be searched for in the directories listed by
+         the <tt>--include</tt> option, or in the current
+         directory by default.  The contents of the file will be
+         shifted to have the same indentation as the ':' at the
+         start of the :include: directive.
+
+    [<tt>:title:</tt><i>text</i>]
+         Sets the title for the document. Equivalent to the --title command
+         line parameter. (The command line parameter overrides any :title:
+         directive in the source).
+
+    [<tt>:enddoc:</tt>]
+         Document nothing further at the current level.
+
+    [<tt>:main:</tt><i>name</i>]
+         Equivalent to the --main command line parameter.
+
+    [<tt>:stopdoc: / :startdoc:</tt>]
+         Stop and start adding new documentation elements to the
+         current container. For example, if a class has a number of
+         constants that you don't want to document, put a
+         <tt>:stopdoc:</tt> before the first, and a
+         <tt>:startdoc:</tt> after the last. If you don't specifiy a
+         <tt>:startdoc:</tt> by the end of the container, disables
+         documentation for the entire class or module.
+
+
+---
+
+See also markup/simple_markup.rb.
+
+= Other stuff
+
+Author::   Dave Thomas <dave@pragmaticprogrammer.com>
+Requires:: Ruby 1.8.1 or later
+License::  Copyright (c) 2001-2003 Dave Thomas.
+           Released under the same license as Ruby.
+
+== Warranty
+
+This software is provided "as is" and without any express or
+implied warranties, including, without limitation, the implied
+warranties of merchantibility and fitness for a particular
+purpose.
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/code_objects.rb ../rdoc-f95-20070309/code_objects.rb
--- ruby-1.8.5-p12/lib/rdoc/code_objects.rb	2004-12-04 14:38:15.000000000 +0900
+++ ../rdoc-f95-20070309/code_objects.rb	2006-11-20 01:42:41.000000000 +0900
@@ -240,6 +240,22 @@
       add_to(@method_list, a_method)
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def add_method(a_method)
+#!#      if !(a_method.visibility == :public)      &&
+#!#           !(a_method.visibility == :private)   &&
+#!#           !(a_method.visibility == :protected)
+#!#        a_method.visibility = @visibility
+#!#      end
+#!#      puts "Adding #{a_method.visibility} method #{a_method.name} to #@name" if $DEBUG
+#!#      add_to(@method_list, a_method)
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     def add_attribute(an_attribute)
       add_to(@attributes, an_attribute)
     end
@@ -259,6 +275,27 @@
       end
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def add_alias(an_alias, ignore_case=nil)
+#!#      meth = find_instance_method_named(an_alias.old_name, ignore_case)
+#!#      if meth
+#!#        new_meth = AnyMethod.new(an_alias.text, an_alias.new_name)
+#!#        new_meth.is_alias_for = meth
+#!#        new_meth.singleton    = meth.singleton
+#!#        new_meth.params       = meth.params
+#!#        new_meth.comment = "Alias for \##{meth.name}"
+#!#        meth.add_alias(new_meth)
+#!#        add_method(new_meth)
+#!#      else
+#!#        add_to(@aliases, an_alias)
+#!#      end
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     def add_include(an_include)
       add_to(@includes, an_include)
     end
@@ -337,6 +374,43 @@
       parent && parent.find_module_named(name)
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    # Find a named module
+#!#    def find_module_named(name, ignore_case=nil)
+#!#      res = nil
+#!#      if !ignore_case
+#!#        return self if self.name == name
+#!#      else
+#!#        return self if self.name.upcase == name.upcase
+#!#      end
+#!#      if !ignore_case
+#!#        res = @modules[name] || @classes[name]
+#!#      else
+#!#        @modules.each{ |n, v|
+#!#          if n.upcase == name.upcase
+#!#            res = v ; break
+#!#          end
+#!#        }
+#!#        @classes.each{ |n, v|
+#!#          if n.upcase == name.upcase
+#!#            res = v ; break
+#!#          end
+#!#        } if !res
+#!#      end
+#!#      return res if res
+#!#      find_enclosing_module_named(name, ignore_case)
+#!#    end
+#!#
+#!#    # find a module at a higher scope
+#!#    def find_enclosing_module_named(name, ignore_case=nil)
+#!#      parent && parent.find_module_named(name, ignore_case)
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     # Iterate over all the classes and modules in
     # this object
 
@@ -357,6 +431,16 @@
       @constants.each {|c| yield c}
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def each_includes
+#!#      @includes.each {|i| yield i}
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     # Return the toplevel that owns us
 
     def toplevel
@@ -426,6 +510,97 @@
             find_module_named(symbol) 
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    # Look up the given filename.
+#!#    def find_file(file, method=nil, ignore_case=nil)
+#!#      find_file_named(file, method, ignore_case)
+#!#    end
+#!#
+#!#    # Look up the given symbol. If method is non-nil, then
+#!#    # we assume the symbol references a module that
+#!#    # contains that method
+#!#    def find_symbol(symbol, method=nil, ignore_case=nil)
+#!#      result = nil
+#!#      case symbol
+#!#      when /^::(.*)/
+#!#        result = toplevel.find_symbol($1, nil, ignore_case)
+#!#      when /::/
+#!#        modules = symbol.split(/::/)
+#!#        unless modules.empty?
+#!#          module_name = modules.shift
+#!#          result = find_module_named(module_name, ignore_case)
+#!#          if result
+#!#            modules.each do |module_name|
+#!#              result = result.find_module_named(module_name, ignore_case)
+#!#              break unless result
+#!#            end
+#!#          end
+#!#        end
+#!#      else
+#!#        # if a method is specified, then we're definitely looking for
+#!#        # a module, otherwise it could be any symbol
+#!#        if method
+#!#          result = find_module_named(symbol, ignore_case)
+#!#        else
+#!#          result = find_local_symbol(symbol, ignore_case)
+#!#          if result.nil?
+#!#            if symbol =~ /^[A-Z]/ ||
+#!#                       symbol =~ /^[A-Za-z]/ && ignore_case
+#!#              result = parent
+#!#              while result && result.name != symbol
+#!#                result = result.parent
+#!#              end
+#!#            end
+#!#          end
+#!#        end
+#!#      end
+#!#      if result && method
+#!#        if !result.respond_to?(:find_local_symbol)
+#!#          p result.name
+#!#          p method
+#!#          fail
+#!#        end
+#!#        result = result.find_local_symbol(method, ignore_case)
+#!#      end
+#!#      result
+#!#    end
+#!#
+#!#    def find_local_symbol(symbol, ignore_case=nil)
+#!#      res = find_method_named(symbol, ignore_case) ||
+#!#            find_constant_named(symbol, ignore_case) ||
+#!#            find_attribute_named(symbol, ignore_case) ||
+#!#            find_module_named(symbol, ignore_case) 
+#!#    end
+#!#
+#!#    def include_requires?(name, ignore_case=nil)
+#!#      if self.kind_of? TopLevel
+#!#        self.requires.each{|r|
+#!#          if r.name == name ||
+#!#              r.name.upcase == name.upcase && ignore_case
+#!#            return true
+#!#          end
+#!#        }
+#!#        return false
+#!#      else
+#!#        parent.include_requires?(name)
+#!#      end
+#!#    end
+#!#
+#!#    def include_includes?(name, ignore_case=nil)
+#!#      self.includes.each{|i|
+#!#        if i.name == name ||
+#!#            i.name.upcase == name.upcase && ignore_case
+#!#          return true
+#!#        end
+#!#      }
+#!#      return false
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     # Handle sections
 
     def set_current_section(title, comment)
@@ -455,6 +630,51 @@
       @attributes.find {|m| m.name == name}
     end
     
+
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    # Find a named method, or return nil
+#!#    def find_method_named(name, ignore_case=nil)
+#!#      if !ignore_case
+#!#        @method_list.find {|meth| meth.name == name}
+#!#      else
+#!#        @method_list.find {|meth| meth.name.upcase == name.upcase}
+#!#      end
+#!#    end
+#!#
+#!#    # Find a named instance method, or return nil
+#!#    def find_instance_method_named(name, ignore_case=nil)
+#!#      if !ignore_case
+#!#        @method_list.find {|meth| meth.name == name && !meth.singleton}
+#!#      else
+#!#        @method_list.find {|meth| 
+#!#          meth.name.upcase == name.upcase && !meth.singleton
+#!#        } 
+#!#      end
+#!#    end
+#!#
+#!#    # Find a named constant, or return nil
+#!#    def find_constant_named(name, ignore_case=nil)
+#!#      if !ignore_case
+#!#        @constants.find {|m| m.name == name}
+#!#      else
+#!#        @constants.find {|m| m.name.upcase == name.upcase}
+#!#      end
+#!#    end
+#!#
+#!#    # Find a named attribute, or return nil
+#!#    def find_attribute_named(name, ignore_case=nil)
+#!#      if !ignore_case
+#!#        @attributes.find {|m| m.name == name}
+#!#      else
+#!#        @attributes.find {|m| m.name.upcase == name.upcase}
+#!#      end
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
   end
 
 
@@ -468,10 +688,12 @@
     
     @@all_classes = {}
     @@all_modules = {}
+#!#    @@all_files   = {}
 
     def TopLevel::reset
       @@all_classes = {}
       @@all_modules = {}
+#!#      @@all_files   = {}
     end
 
     def initialize(file_name)
@@ -481,6 +703,7 @@
       @file_absolute_name = file_name
       @file_stat          = File.stat(file_name)
       @diagram            = nil
+#!#      @@all_files[file_name] = self
     end
 
     def full_name
@@ -519,6 +742,16 @@
       @@all_classes.values + @@all_modules.values
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def TopLevel.all_files
+#!#      @@all_files
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     def TopLevel.find_class_named(name)
      @@all_classes.each_value do |c|
         res = c.find_class_named(name) 
@@ -542,6 +775,56 @@
       find_class_or_module_named(name) || find_enclosing_module_named(name)
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def find_local_symbol(symbol, ignore_case=nil)
+#!#      find_class_or_module_named(symbol, ignore_case) || super
+#!#    end
+#!#
+#!#    def find_class_or_module_named(symbol, ignore_case=nil)
+#!#      if !ignore_case
+#!#        @@all_classes.each_value {|c| return c if c.name == symbol}
+#!#        @@all_modules.each_value {|m| return m if m.name == symbol}
+#!#      else
+#!#        @@all_classes.each_value {|c| return c if c.name.upcase == symbol.upcase}
+#!#        @@all_modules.each_value {|m| return m if m.name.upcase == symbol.upcase}
+#!#      end
+#!#      nil
+#!#    end
+#!#
+#!#    # Find a named module
+#!#    def find_module_named(name, ignore_case=nil)
+#!#      find_class_or_module_named(name, ignore_case) || find_enclosing_module_named(name, ignore_case)
+#!#    end
+#!#
+#!#    # Find a named file
+#!#    def find_file_named(name, method=nil, ignore_case=nil)
+#!#      return nil unless name
+#!#      result = nil
+#!#      @@all_files.each{|file_name, toplevel|
+#!#        result = toplevel if file_name == name
+#!#      }
+#!#      dir = File.dirname(@file_relative_name)
+#!#      @@all_files.each{|file_name, toplevel|
+#!#        if /^#{dir}\/(.*)/ =~ file_name
+#!#          result = toplevel if $1 == name
+#!#        end
+#!#      }
+#!#      if result
+#!#        if method
+#!#          result_method = result.find_local_symbol(method, ignore_case)
+#!#          return result_method
+#!#        else
+#!#          return result
+#!#        end
+#!#      else
+#!#        return nil
+#!#      end
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
 
   end
 
@@ -593,6 +876,17 @@
       @classes.each_value {|c| return c if c.find_class_named(name) }
       nil
     end
+
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def find_file_named(name, method=nil, ignore_case=nil)
+#!#      parent.find_file_named(name, method, ignore_case)
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
   end
 
   # Anonymous classes
@@ -651,6 +945,20 @@
       @name <=> other.name
     end
 
+########################################
+# moved to parse_f95.rb #
+#!#
+#!#    def <=>(other)
+#!#      t = @name <=> other.name
+#!#      return t if t != 0
+#!#      t = @params <=> other.params
+#!#      return t if t != 0
+#!#      t = @comment <=> other.comment
+#!#    end
+#!#
+# moved to parse_f95.rb #
+########################################
+
     def to_s
       res = self.class.name + ": " + @name + " (" + @text + ")\n"
       res << @comment.to_s
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/diagram.rb ../rdoc-f95-20070309/diagram.rb
--- ruby-1.8.5-p12/lib/rdoc/diagram.rb	2006-07-10 10:57:20.000000000 +0900
+++ ../rdoc-f95-20070309/diagram.rb	2006-11-20 05:32:53.000000000 +0900
@@ -39,6 +39,10 @@
       @counter = 0
       File.makedirs(DOT_PATH)
       @diagram_cache = {}
+      @html_suffix = ".html"
+      if @options.mathml
+        @html_suffix = ".xhtml"
+      end
     end
 
     # Draw the diagrams. We traverse the files, drawing a diagram for
@@ -126,7 +130,7 @@
       return if  @done_modules[mod.full_name] and not toplevel
 
       @counter += 1
-      url = mod.http_url("classes")
+      url = mod.http_url("classes").sub(/\.html$/, @html_suffix)
       m = DOT::DOTSubgraph.new('name' => "cluster_#{mod.full_name.gsub( /:/,'_' )}",
                                'label' => mod.name,
                                'fontname' => FONT,
@@ -150,7 +154,7 @@
           else
             unless @global_names.include?(m_full_name)
               path = m_full_name.split("::")
-              url = File.join('classes', *path) + ".html"
+              url = File.join('classes', *path) + @html_suffix
               @global_graph << DOT::DOTNode.new('name' => "#{m_full_name.gsub( /:/,'_' )}",
                                         'shape' => 'box',
                                         'label' => "#{m_full_name}",
@@ -196,7 +200,7 @@
 
         next if cl.name == 'Object' || cl.name[0,2] == "<<"
 
-        url = cl.http_url("classes")
+        url = cl.http_url("classes").sub(/\.html$/, @html_suffix)
         
         label = cl.name.dup
         if use_fileboxes && cl.in_files.length > 1
@@ -243,7 +247,7 @@
             else
               unless @global_names.include?(m_full_name)
                 path = m_full_name.split("::")
-                url = File.join('classes', *path) + ".html"
+                url = File.join('classes', *path) + @html_suffix
                 @global_graph << DOT::DOTNode.new('name' => "#{m_full_name.gsub( /:/,'_' )}",
                                           'shape' => 'box',
                                           'label' => "#{m_full_name}",
@@ -260,7 +264,7 @@
           sclass_full_name = find_full_name(sclass,cl)
           unless @local_names.include?(sclass_full_name) or @global_names.include?(sclass_full_name)
             path = sclass_full_name.split("::")
-            url = File.join('classes', *path) + ".html"
+            url = File.join('classes', *path) + @html_suffix
             @global_graph << DOT::DOTNode.new(
                        'name' => "#{sclass_full_name.gsub( /:/, '_' )}",
                        'label' => sclass_full_name,
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/html_generator.rb ../rdoc-f95-20070309/generators/html_generator.rb
--- ruby-1.8.5-p12/lib/rdoc/generators/html_generator.rb	2006-07-10 10:57:21.000000000 +0900
+++ ../rdoc-f95-20070309/generators/html_generator.rb	2007-01-05 23:15:25.000000000 +0900
@@ -134,6 +134,30 @@
       end
     end
 
+    #
+    # CROSSREFFILE is similar to CROSSREF. But this pattern is
+    # hit to filenames or methods in files
+    #
+    def handle_special_CROSSREFFILE(special)
+      name = special.text
+
+      # Find file, or method in file
+      if /([\w\/\.].*\.\w+)[.\#](.*)/ =~ name
+        file_name = $1
+        method = $2
+        ref = @context.find_file(file_name, method)
+      else
+        ref = @context.find_file(name)
+      end
+
+      if ref and ref.document_self
+        "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>"
+      else
+        name
+      end
+
+    end
+
 
     # Generate a hyperlink for url, labeled with text. Handle the
     # special cases for img: and link: described under handle_special_HYPEDLINK
@@ -159,8 +183,11 @@
           url =~ /\.(gif|png|jpg|jpeg|bmp)$/
 
         "<img src=\"#{url}\" />"
-      else
+
+      elsif type == "link"
         "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
+      else
+        "<a href=\"#{url}\" target=\"_top\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
       end
     end
 
@@ -213,8 +240,8 @@
 
         # class names, variable names, or instance variables
         @markup.add_special(/(
-                               \w+(::\w+)*[.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?  # A::B.meth(**) (for operator in Fortran95)
-                             | \#\w+(\([.\w\*\/\+\-\=\<\>]+\))?  #  meth(**) (for operator in Fortran95)
+                               \b\w+(::\w+)*[\.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?  # A::B.meth(**) (for operator and assignment in Fortran 90 or 95)
+                             | \#\w+(\([.\w\*\/\+\-\=\<\>]+\))?  #  meth(**) (for operator and assignment in Fortran 90 or 95)
                              | \b([A-Z]\w*(::\w+)*[.\#]\w+)  #    A::B.meth
                              | \b([A-Z]\w+(::\w+)*)       #    A::B..
                              | \#\w+[!?=]?                #    #meth_name 
@@ -222,6 +249,13 @@
                              )/x, 
                             :CROSSREF)
 
+        # file names
+        @markup.add_special(/(
+                               ((\/|\.\.\/|\.\/|\w)[\w\#\/\.\-\~\:]*[!?=]?) # file_name
+                             | ((\/|\.\.\/|\.\/|\w)[\w\#\/\.\-\~\:]*(\([\.\w+\*\/\+\-\=\<\>]+\))?)
+                             )/x, 
+                            :CROSSREFFILE)
+
         # external hyperlinks
         @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
 
@@ -404,7 +438,8 @@
 #           end
 #         end
 
-        ref = @context.find_symbol(i.name)
+        ref = @context.find_symbol(i.name, nil, @options.ignore_case)  || \
+              @context.find_file(i.name)
         ref = ref.viewer if ref
 
         if !ref && block_given?
@@ -553,7 +588,16 @@
 
     # Find a symbol in ourselves or our parent
     def find_symbol(symbol, method=nil)
-      res = @context.find_symbol(symbol, method)
+      res = @context.find_symbol(symbol, method, @options.ignore_case)
+      if res
+        res = res.viewer
+      end
+      res
+    end
+
+    # Find a filenames in ourselves or our parent
+    def find_file(file, method=nil)
+      res = @context.find_file(file, method, @options.ignore_case)
       if res
         res = res.viewer
       end
@@ -614,7 +658,7 @@
       if path['<<']
         path.gsub!(/<<\s*(\w*)/) { "from-#$1" }
       end
-      File.join(prefix, path.split("::")) + ".html"
+      File.join(prefix, path.split("::")) + '.' + @options.template
     end
 
 
@@ -791,7 +835,7 @@
 
     def http_url(file_dir)
       File.join(file_dir, @context.file_relative_name.tr('.', '_')) +
-        ".html"
+        '.' + @options.template
     end
 
     def filename_to_label
@@ -1004,7 +1048,7 @@
       if p !~ /^\w/
         p = @context.params.gsub(/\s*\#.*/, '')
         p = p.tr("\n", " ").squeeze(" ")
-        p = "(" + p + ")" unless p[0] == ?(
+        p = "(" + p + ")" unless p[0] == ?( || p == ''
         
         if (block = @context.block_params)
          # If this method has explicit block parameters, remove any
@@ -1024,9 +1068,10 @@
     end
     
     def create_source_code_file(code_body)
-      meth_path = @html_class.path.sub(/\.html$/, '.src')
+      template_regexp = Regexp.new("\\." + @options.template + "$")
+      meth_path = @html_class.path.sub(template_regexp, '.src')
       File.makedirs(meth_path)
-      file_path = File.join(meth_path, @seq) + ".html"
+      file_path = File.join(meth_path, @seq) + '.' + @options.template
 
       template = TemplatePage.new(RDoc::Page::SRC_PAGE)
       File.open(file_path, "w") do |f|
@@ -1117,7 +1162,16 @@
     end
 
     def find_symbol(symbol, method=nil)
-      res = @context.parent.find_symbol(symbol, method)
+      res = @context.parent.find_symbol(symbol, method, @options.ignore_case)
+      if res
+        res = res.viewer
+      end
+      res
+    end
+
+    # Find a filenames in ourselves or our parent
+    def find_file(file, method=nil)
+      res = @context.parent.find_file(file, method, @options.ignore_case)
       if res
         res = res.viewer
       end
@@ -1147,6 +1201,7 @@
         to.shift
       end
       
+      from.delete_if{|f| f =~ /^\.$/}
       from.fill("..")
       from.concat(to)
       from << to_file
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/ri_generator.rb ../rdoc-f95-20070309/generators/ri_generator.rb
--- ruby-1.8.5-p12/lib/rdoc/generators/ri_generator.rb	2005-02-12 19:57:20.000000000 +0900
+++ ../rdoc-f95-20070309/generators/ri_generator.rb	2006-11-09 01:58:56.000000000 +0900
@@ -69,7 +69,7 @@
 
     def initialize(options) #:not-new:
       @options   = options
-      @ri_writer = RI::RiWriter.new(options.op_dir)
+      @ri_writer = RI::RiWriter.new(".")
       @markup    = SM::SimpleMarkup.new
       @to_flow   = SM::ToFlow.new
     end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/html/html.rb ../rdoc-f95-20070309/generators/template/html/html.rb
--- ruby-1.8.5-p12/lib/rdoc/generators/template/html/html.rb	2006-01-13 19:26:10.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/html/html.rb	2006-08-07 22:07:22.000000000 +0900
@@ -214,10 +214,13 @@
     margin: 1em;
     padding: 0.5em;
     border: 1px dashed #999;
-    overflow: hidden;
+    overflow: scroll;
 }
 
-div.method-source-code pre { color: #ffdead; overflow: hidden; }
+div.method-source-code pre {
+    color: #ffdead;
+    overflow: visible;
+}
 
 /* --- Ruby keyword styles --------------------- */
 
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/ctop.xsl ../rdoc-f95-20070309/generators/template/xhtml/ctop.xsl
--- ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/ctop.xsl	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/xhtml/ctop.xsl	2006-08-05 00:37:51.000000000 +0900
@@ -0,0 +1,1318 @@
+<xsl:stylesheet
+  version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:mml="http://www.w3.org/1998/Math/MathML"
+>
+
+<!--
+$Id: ctop.xsl,v 1.1 2006/08/04 15:37:51 morikawa Exp $
+
+Copyright David Carlisle 2001, 2002.
+
+Use and distribution of this code are permitted under the terms of the <a
+href="http://www.w3.org/Consortium/Legal/copyright-software-19980720"
+>W3C Software Notice and License</a>.
+-->
+
+<xsl:output method="xml" />
+
+<xsl:template mode="c2p" match="*">
+<xsl:copy>
+  <xsl:copy-of select="@*"/>
+  <xsl:apply-templates mode="c2p"/>
+</xsl:copy>
+</xsl:template>
+
+
+<!-- 4.4.1.1 cn -->
+
+<xsl:template mode="c2p" match="mml:cn">
+ <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:cn[@type='complex-cartesian']">
+  <mml:mrow>
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
+    <mml:mo>+</mml:mo>
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
+    <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
+    <mml:mi>i<!-- imaginary i --></mml:mi>
+  </mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:cn[@type='rational']">
+  <mml:mrow>
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
+    <mml:mo>/</mml:mo>
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
+  </mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:cn[@type='integer']">
+  <xsl:choose>
+  <xsl:when test="not(@base) or @base=10">
+       <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
+  </xsl:when>
+  <xsl:otherwise>
+  <mml:msub>
+    <mml:mn><xsl:apply-templates mode="c2p"/></mml:mn>
+    <mml:mn><xsl:value-of select="@base"/></mml:mn>
+  </mml:msub>
+  </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:cn[@type='complex-polar']">
+  <mml:mrow>
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/></mml:mn>
+    <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
+    <mml:msup>
+    <mml:mi>e<!-- exponential e--></mml:mi>
+    <mml:mrow>
+     <mml:mi>i<!-- imaginary i--></mml:mi>
+     <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
+     <mml:mn><xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
+    </mml:mrow>
+    </mml:msup>
+  </mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:cn[@type='e-notation']">
+    <mml:mn><xsl:apply-templates mode="c2p" select="text()[1]"/>E<xsl:apply-templates mode="c2p" select="text()[2]"/></mml:mn>
+</xsl:template>
+
+<!-- 4.4.1.1 ci  -->
+
+<xsl:template mode="c2p" match="mml:ci/text()">
+ <mml:mi><xsl:value-of select="."/></mml:mi>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:ci">
+ <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
+</xsl:template>
+
+<!-- 4.4.1.2 csymbol -->
+
+<xsl:template mode="c2p" match="mml:csymbol/text()">
+ <mml:mo><xsl:apply-templates mode="c2p"/></mml:mo>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:csymbol">
+ <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
+</xsl:template>
+
+<!-- 4.4.2.1 apply 4.4.2.2 reln -->
+
+<xsl:template mode="c2p" match="mml:apply|mml:reln">
+ <mml:mrow>
+ <xsl:apply-templates mode="c2p" select="*[1]">
+  <xsl:with-param name="p" select="10"/>
+ </xsl:apply-templates>
+ <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
+ <mml:mfenced open="(" close=")" separators=",">
+ <xsl:apply-templates mode="c2p" select="*[position()>1]"/>
+ </mml:mfenced>
+ </mml:mrow>
+</xsl:template>
+
+<!-- 4.4.2.3 fn -->
+<xsl:template mode="c2p" match="mml:fn">
+ <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
+</xsl:template>
+
+<!-- 4.4.2.4 interval -->
+<xsl:template mode="c2p" match="mml:interval[*[2]]">
+ <mml:mfenced open="[" close="]"><xsl:apply-templates mode="c2p"/></mml:mfenced>
+</xsl:template>
+<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='open']">
+ <mml:mfenced open="(" close=")"><xsl:apply-templates mode="c2p"/></mml:mfenced>
+</xsl:template>
+<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='open-closed']">
+ <mml:mfenced open="(" close="]"><xsl:apply-templates mode="c2p"/></mml:mfenced>
+</xsl:template>
+<xsl:template mode="c2p" match="mml:interval[*[2]][@closure='closed-open']">
+ <mml:mfenced open="[" close=")"><xsl:apply-templates mode="c2p"/></mml:mfenced>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:interval">
+ <mml:mfenced open="{{" close="}}"><xsl:apply-templates mode="c2p"/></mml:mfenced>
+</xsl:template>
+
+<!-- 4.4.2.5 inverse -->
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:inverse]]">
+ <mml:msup>
+  <xsl:apply-templates mode="c2p" select="*[2]"/>
+  <mml:mrow><mml:mo>(</mml:mo><mml:mn>-1</mml:mn><mml:mo>)</mml:mo></mml:mrow>
+ </mml:msup>
+</xsl:template>
+
+<!-- 4.4.2.6 sep -->
+
+<!-- 4.4.2.7 condition -->
+<xsl:template mode="c2p" match="mml:condition">
+ <mml:mrow><xsl:apply-templates mode="c2p"/></mml:mrow>
+</xsl:template>
+
+<!-- 4.4.2.8 declare -->
+<xsl:template mode="c2p" match="mml:declare"/>
+
+<!-- 4.4.2.9 lambda -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:lambda]]">
+ <mml:mrow>
+  <mml:mi>&#955;<!--lambda--></mml:mi>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar/*"/></mml:mrow>
+ <mml:mo>.</mml:mo>
+ <mml:mfenced>
+  <xsl:apply-templates mode="c2p" select="*[last()]"/>
+ </mml:mfenced>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.2.10 compose -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:compose]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8728;<!-- o --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.2.11` ident -->
+<xsl:template mode="c2p" match="mml:ident">
+<mml:mo>id</mml:mo>
+</xsl:template>
+
+<!-- 4.4.2.12` domain -->
+<xsl:template mode="c2p" match="mml:domain">
+<mml:mo>domain</mml:mo>
+</xsl:template>
+
+<!-- 4.4.2.13` codomain -->
+<xsl:template mode="c2p" match="mml:codomain">
+<mml:mo>codomain</mml:mo>
+</xsl:template>
+
+<!-- 4.4.2.14` image -->
+<xsl:template mode="c2p" match="mml:image">
+<mml:mo>image</mml:mo>
+</xsl:template>
+
+<!-- 4.4.2.15` domainofapplication -->
+<xsl:template mode="c2p" match="mml:domainofapplication">
+ <mml:error/>
+</xsl:template>
+
+<!-- 4.4.2.16` piecewise -->
+<xsl:template mode="c2p" match="mml:piecewise">
+<mml:mrow>
+<mml:mo>{</mml:mo>
+<mml:mtable>
+ <xsl:for-each select="mml:piece|mml:otherwise">
+ <mml:mtr>
+ <mml:mtd><xsl:apply-templates mode="c2p" select="*[1]"/></mml:mtd>
+ <mml:mtd><mml:mtext>&#160; if &#160;</mml:mtext></mml:mtd>
+ <mml:mtd><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mtd>
+ </mml:mtr>
+ </xsl:for-each>
+</mml:mtable>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.1 quotient -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:quotient]]">
+<mml:mrow>
+<mml:mo>&#8970;<!-- lfloor--></mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>/</mml:mo>
+<xsl:apply-templates mode="c2p" select="*[3]"/>
+<mml:mo>&#8971;<!-- rfloor--></mml:mo>
+</mml:mrow>
+</xsl:template>
+
+
+
+<!-- 4.4.3.2 factorial -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:factorial]]">
+<mml:mrow>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+<mml:mo>!</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.3 divide -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:divide]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>/</mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.3.4 max  min-->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:max]]">
+<mml:mrow>
+  <mml:mo>max</mml:mo>
+  <xsl:call-template name="set"/>
+</mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:min]]">
+<mml:mrow>
+  <mml:mo>max</mml:mo>
+  <xsl:call-template name="set"/>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.3.5  minus-->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:minus] and count(*)=2]">
+<mml:mrow>
+  <mml:mo>&#8722;<!--minus--></mml:mo>
+  <xsl:apply-templates mode="c2p" select="*[2]">
+      <xsl:with-param name="p" select="5"/>
+  </xsl:apply-templates>
+</mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:minus] and count(*)&gt;2]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>&#8722;<!--minus--></mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="2"/>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.3.6  plus-->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:plus]]">
+  <xsl:param name="p" select="0"/>
+  <mml:mrow>
+  <xsl:if test="$p &gt; 2"><mml:mo>(</mml:mo></xsl:if>
+  <xsl:for-each select="*[position()&gt;1]">
+   <xsl:if test="position() &gt; 1">
+    <mml:mo>
+    <xsl:choose>
+      <xsl:when test="self::mml:apply[*[1][self::mml:times] and
+      *[2][self::mml:apply/*[1][self::mml:minus] or self::mml:cn[not(mml:sep) and
+      (number(.) &lt; 0)]]]">&#8722;<!--minus--></xsl:when>
+      <xsl:otherwise>+</xsl:otherwise>
+    </xsl:choose>
+    </mml:mo>
+   </xsl:if>   
+    <xsl:choose>
+      <xsl:when test="self::mml:apply[*[1][self::mml:times] and
+      *[2][self::mml:cn[not(mml:sep) and (number(.) &lt;0)]]]">
+     <mml:mrow>
+     <mml:mn><xsl:value-of select="-(*[2])"/></mml:mn>
+      <mml:mo><!--&#8290;--><!--invisible times--></mml:mo>
+     <xsl:apply-templates mode="c2p" select=".">
+     <xsl:with-param name="first" select="2"/>
+     <xsl:with-param name="p" select="2"/>
+   </xsl:apply-templates>
+     </mml:mrow>
+      </xsl:when>
+      <xsl:when test="self::mml:apply[*[1][self::mml:times] and
+      *[2][self::mml:apply/*[1][self::mml:minus]]]">
+     <mml:mrow>
+     <xsl:apply-templates mode="c2p" select="./*[2]/*[2]"/>
+     <xsl:apply-templates mode="c2p" select=".">
+     <xsl:with-param name="first" select="2"/>
+     <xsl:with-param name="p" select="2"/>
+   </xsl:apply-templates>
+     </mml:mrow>
+      </xsl:when>
+      <xsl:otherwise>
+     <xsl:apply-templates mode="c2p" select=".">
+     <xsl:with-param name="p" select="2"/>
+   </xsl:apply-templates>
+   </xsl:otherwise>
+    </xsl:choose>
+  </xsl:for-each>
+  <xsl:if test="$p &gt; 2"><mml:mo>)</mml:mo></xsl:if>
+  </mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.7 power -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:power]]">
+<mml:msup>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="5"/>
+</xsl:apply-templates>
+<xsl:apply-templates mode="c2p" select="*[3]">
+  <xsl:with-param name="p" select="5"/>
+</xsl:apply-templates>
+</mml:msup>
+</xsl:template>
+
+<!-- 4.4.3.8 remainder -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:rem]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>mod</mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.3.9  times-->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:times]]" name="times">
+  <xsl:param name="p" select="0"/>
+  <xsl:param name="first" select="1"/>
+  <mml:mrow>
+  <xsl:if test="$p &gt; 3"><mml:mo>(</mml:mo></xsl:if>
+  <xsl:for-each select="*[position()&gt;1]">
+   <xsl:if test="position() &gt; 1">
+    <mml:mo>
+    <xsl:choose>
+      <xsl:when test="self::mml:cn">&#215;<!-- times --></xsl:when>
+      <xsl:otherwise><!--&#8290;--><!--invisible times--></xsl:otherwise>
+    </xsl:choose>
+    </mml:mo>
+   </xsl:if> 
+   <xsl:if test="position()&gt;= $first">
+   <xsl:apply-templates mode="c2p" select=".">
+     <xsl:with-param name="p" select="3"/>
+   </xsl:apply-templates>
+   </xsl:if>
+  </xsl:for-each>
+  <xsl:if test="$p &gt; 3"><mml:mo>)</mml:mo></xsl:if>
+  </mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.10 root -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:root] and not(mml:degree) or mml:degree=2]" priority="4">
+<mml:msqrt>
+<xsl:apply-templates mode="c2p" select="*[position()&gt;1]"/>
+</mml:msqrt>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:root]]">
+<mml:mroot>
+<xsl:apply-templates mode="c2p" select="*[position()&gt;1 and not(self::mml:degree)]"/>
+<mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/*"/></mml:mrow>
+</mml:mroot>
+</xsl:template>
+
+<!-- 4.4.3.11 gcd -->
+<xsl:template mode="c2p" match="mml:gcd">
+<mml:mo>gcd</mml:mo>
+</xsl:template>
+
+<!-- 4.4.3.12 and -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:and]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8743;<!-- and --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.3.13 or -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:or]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="3"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8744;<!-- or --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.3.14 xor -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:xor]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="3"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>xor</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.3.15 not -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:not]]">
+<mml:mrow>
+<mml:mo>&#172;<!-- not --></mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+</mml:mrow>
+</xsl:template>
+
+
+
+
+<!-- 4.4.3.16 implies -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:implies]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>&#8658;<!-- Rightarrow --></mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.3.17 forall -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:forall]]">
+ <mml:mrow>
+  <mml:mi>&#8704;<!--forall--></mml:mi>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar[not(current()/mml:condition)]/*|mml:condition/*"/></mml:mrow>
+ <mml:mo>.</mml:mo>
+ <mml:mfenced>
+  <xsl:apply-templates mode="c2p" select="*[last()]"/>
+ </mml:mfenced>
+</mml:mrow>
+</xsl:template>
+
+
+
+<!-- 4.4.3.18 exists -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:exists]]">
+ <mml:mrow>
+  <mml:mi>&#8707;<!--exists--></mml:mi>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar[not(current()/mml:condition)]/*|mml:condition/*"/></mml:mrow>
+ <mml:mo>.</mml:mo>
+ <mml:mfenced>
+  <xsl:apply-templates mode="c2p" select="*[last()]"/>
+ </mml:mfenced>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.19 abs -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:abs]]">
+<mml:mrow>
+<mml:mo>|</mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>|</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+
+
+<!-- 4.4.3.20 conjugate -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:conjugate]]">
+<mml:mover>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>&#175;<!-- overline --></mml:mo>
+</mml:mover>
+</xsl:template>
+
+<!-- 4.4.3.21 arg -->
+<xsl:template mode="c2p" match="mml:arg">
+ <mml:mo>arg</mml:mo>
+</xsl:template>
+
+
+<!-- 4.4.3.22 real -->
+<xsl:template mode="c2p" match="mml:real">
+ <mml:mo>&#8475;<!-- real --></mml:mo>
+</xsl:template>
+
+<!-- 4.4.3.23 imaginary -->
+<xsl:template mode="c2p" match="mml:imaginary">
+ <mml:mo>&#8465;<!-- imaginary --></mml:mo>
+</xsl:template>
+
+<!-- 4.4.3.24 lcm -->
+<xsl:template mode="c2p" match="mml:lcm">
+ <mml:mo>lcm</mml:mo>
+</xsl:template>
+
+
+<!-- 4.4.3.25 floor -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:floor]]">
+<mml:mrow>
+<mml:mo>&#8970;<!-- lfloor--></mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>&#8971;<!-- rfloor--></mml:mo>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.3.25 ceiling -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:ceiling]]">
+<mml:mrow>
+<mml:mo>&#8968;<!-- lceil--></mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>&#8969;<!-- rceil--></mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.4.1 eq -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:eq]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>=</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.2 neq -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:neq]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8800;<!-- neq --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.3 eq -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:gt]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&gt;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.4 lt -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:lt]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&lt;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.5 geq -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:geq]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8805;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.6 geq -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:leq]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8804;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.7 equivalent -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:equivalent]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8801;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.4.8 approx -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:approx]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="1"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8771;</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+
+<!-- 4.4.4.9 factorof -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:factorof]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>|</mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.5.1 int -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:int]]">
+ <mml:mrow>
+ <mml:msubsup>
+  <mml:mi>&#8747;<!--int--></mml:mi>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
+ </mml:msubsup>
+ <xsl:apply-templates mode="c2p" select="*[last()]"/>
+ <mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar"/>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.5.2 diff -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:diff] and mml:ci and count(*)=2]" priority="2">
+ <mml:msup>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mrow>
+ <mml:mo>&#8242;<!--prime--></mml:mo>
+ </mml:msup>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:diff]]" priority="1">
+ <mml:mfrac>
+ <xsl:choose>
+ <xsl:when test="mml:bvar/mml:degree">
+ <mml:mrow><mml:msup><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar/mml:degree/node()"/></mml:msup>
+     <xsl:apply-templates mode="c2p"  select="*[last()]"/></mml:mrow>
+ <mml:mrow><mml:mo>d</mml:mo><mml:msup><xsl:apply-templates mode="c2p"
+ select="mml:bvar/node()"/><xsl:apply-templates mode="c2p"
+ select="mml:bvar/mml:degree/node()"/></mml:msup>
+</mml:mrow>
+</xsl:when>
+<xsl:otherwise>
+ <mml:mrow><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="*[last()]"/></mml:mrow>
+ <mml:mrow><mml:mo>d</mml:mo><xsl:apply-templates mode="c2p" select="mml:bvar"/></mml:mrow>
+</xsl:otherwise>
+ </xsl:choose>
+ </mml:mfrac>
+</xsl:template>
+
+
+<!-- 4.4.5.3 partialdiff -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:partialdiff] and mml:list and mml:ci and count(*)=3]" priority="2">
+<mml:mrow>
+ <mml:msub><mml:mo>D</mml:mo><mml:mrow>
+<xsl:for-each select="mml:list[1]/*">
+<xsl:apply-templates mode="c2p" select="."/>
+<xsl:if test="position()&lt;last()"><mml:mo>,</mml:mo></xsl:if>
+</xsl:for-each>
+</mml:mrow></mml:msub>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="*[3]"/></mml:mrow>
+</mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:partialdiff]]" priority="1">
+ <mml:mfrac>
+ <mml:mrow><mml:msup><mml:mo>&#8706;<!-- partial --></mml:mo>
+<mml:mrow>
+ <xsl:choose>
+ <xsl:when test="mml:degree">
+<xsl:apply-templates mode="c2p" select="mml:degree/node()"/>
+</xsl:when>
+<xsl:when test="mml:bvar/mml:degree[string(number(.))='NaN']">
+<xsl:for-each select="mml:bvar/mml:degree">
+<xsl:apply-templates mode="c2p" select="node()"/>
+<xsl:if test="position()&lt;last()"><mml:mo>+</mml:mo></xsl:if>
+</xsl:for-each>
+<xsl:if test="count(mml:bvar[not(mml:degree)])&gt;0">
+<mml:mo>+</mml:mo><mml:mn><xsl:value-of select="count(mml:bvar[not(mml:degree)])"/></mml:mn>
+</xsl:if>
+</xsl:when>
+<xsl:otherwise>
+<mml:mn><xsl:value-of select="sum(mml:bvar/mml:degree)+count(mml:bvar[not(mml:degree)])"/></mml:mn>
+</xsl:otherwise>
+ </xsl:choose>
+</mml:mrow>
+</mml:msup>
+     <xsl:apply-templates mode="c2p"  select="*[last()]"/></mml:mrow>
+<mml:mrow>
+<xsl:for-each select="mml:bvar">
+<mml:mrow>
+<mml:mo>&#8706;<!-- partial --></mml:mo><mml:msup><xsl:apply-templates mode="c2p" select="node()"/>
+                     <mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/node()"/></mml:mrow>
+</mml:msup>
+</mml:mrow>
+</xsl:for-each>
+</mml:mrow>
+ </mml:mfrac>
+</xsl:template>
+
+<!-- 4.4.5.4  lowlimit-->
+<xsl:template mode="c2p" match="mml:lowlimit"/>
+
+<!-- 4.4.5.5 uplimit-->
+<xsl:template mode="c2p" match="mml:uplimit"/>
+
+<!-- 4.4.5.6  bvar-->
+<xsl:template mode="c2p" match="mml:bvar">
+ <mml:mi><xsl:apply-templates mode="c2p"/></mml:mi>
+ <xsl:if test="following-sibling::mml:bvar"><mml:mo>,</mml:mo></xsl:if>
+</xsl:template>
+
+<!-- 4.4.5.7 degree-->
+<xsl:template mode="c2p" match="mml:degree"/>
+
+<!-- 4.4.5.8 divergence-->
+<xsl:template mode="c2p" match="mml:divergence">
+<mml:mo>div</mml:mo>
+</xsl:template>
+
+<!-- 4.4.5.9 grad-->
+<xsl:template mode="c2p" match="mml:grad">
+<mml:mo>grad</mml:mo>
+</xsl:template>
+
+<!-- 4.4.5.10 curl -->
+<xsl:template mode="c2p" match="mml:curl">
+<mml:mo>curl</mml:mo>
+</xsl:template>
+
+
+<!-- 4.4.5.11 laplacian-->
+<xsl:template mode="c2p" match="mml:laplacian">
+<mml:msup><mml:mo>&#8711;<!-- nabla --></mml:mo><mml:mn>2</mml:mn></mml:msup>
+</xsl:template>
+
+<!-- 4.4.6.1 set -->
+
+<xsl:template mode="c2p" match="mml:set">
+  <xsl:call-template name="set"/>
+</xsl:template>
+
+<!-- 4.4.6.2 list -->
+
+<xsl:template mode="c2p" match="mml:list">
+  <xsl:call-template name="set">
+   <xsl:with-param name="o" select="'('"/>
+   <xsl:with-param name="c" select="')'"/>
+  </xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.3 union -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:union]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8746;<!-- union --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.4 intersect -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:intersect]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="3"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8745;<!-- intersect --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.5 in -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:in]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>&#8712;<!-- in --></mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.5 notin -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notin]]">
+  <xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+  <xsl:with-param name="mo"><mml:mo>&#8713;<!-- not in --></mml:mo></xsl:with-param>
+  <xsl:with-param name="p" select="$p"/>
+  <xsl:with-param name="this-p" select="3"/>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.7 subset -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:subset]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8838;<!-- subseteq --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.8 prsubset -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:prsubset]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8834;<!-- prsubset --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.9 notsubset -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notsubset]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8840;<!-- notsubseteq --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.10 notprsubset -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:notprsubset]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8836;<!-- prsubset --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.11 setdiff -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:setdiff]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="binary">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#8726;<!-- setminus --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.6.12 card -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:card]]">
+<mml:mrow>
+<mml:mo>|</mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>|</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.6.13 cartesianproduct -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:cartesianproduct or self::mml:vectorproduct]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>&#215;<!-- times --></mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<xsl:template
+match="mml:apply[*[1][self::mml:cartesianproduct][count(following-sibling::mml:reals)=count(following-sibling::*)]]"
+priority="2">
+<mml:msup>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="5"/>
+</xsl:apply-templates>
+<mml:mn><xsl:value-of select="count(*)-1"/></mml:mn>
+</mml:msup>
+</xsl:template>
+
+
+<!-- 4.4.7.1 sum -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:sum]]">
+ <mml:mrow>
+ <mml:msubsup>
+  <mml:mo>&#8721;<!--sum--></mml:mo>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
+ </mml:msubsup>
+ <xsl:apply-templates mode="c2p" select="*[last()]"/>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.7.2 product -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:product]]">
+ <mml:mrow>
+ <mml:msubsup>
+  <mml:mo>&#8719;<!--product--></mml:mo>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit/*|mml:interval/*[1]|mml:condition/*"/></mml:mrow>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:uplimit/*|mml:interval/*[2]"/></mml:mrow>
+ </mml:msubsup>
+ <xsl:apply-templates mode="c2p" select="*[last()]"/>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.7.3 limit -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:limit]]">
+ <mml:mrow>
+ <mml:munder>
+  <mml:mi>limit</mml:mi>
+ <mml:mrow><xsl:apply-templates mode="c2p" select="mml:lowlimit|mml:condition/*"/></mml:mrow>
+ </mml:munder>
+ <xsl:apply-templates mode="c2p" select="*[last()]"/>
+</mml:mrow>
+</xsl:template>
+
+<xsl:template mode="c2p" match="mml:apply[mml:limit]/mml:lowlimit" priority="3">
+<mml:mrow>
+<xsl:apply-templates mode="c2p" select="../mml:bvar/node()"/>
+<mml:mo>&#8594;<!--rightarrow--></mml:mo>
+<xsl:apply-templates mode="c2p"/>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.7.4 tendsto -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:tendsto]]">
+ <xsl:param name="p"/>
+<xsl:call-template name="binary">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>
+  <xsl:choose>
+   <xsl:when test="@type='above'">&#8600;<!--searrow--></xsl:when>
+   <xsl:when test="@type='below'">&#8599;<!--nearrow--></xsl:when>
+   <xsl:when test="@type='two-sided'">&#8594;<!--rightarrow--></xsl:when>
+   <xsl:otherwise>&#8594;<!--rightarrow--></xsl:otherwise>
+  </xsl:choose>
+  </mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.8.1 trig -->
+<xsl:template mode="c2p" match="mml:apply[*[1][
+ self::mml:sin or self::mml:cos or self::mml:tan or self::mml:sec or
+ self::mml:csc or self::mml:cot or self::mml:sinh or self::mml:cosh or
+ self::mml:tanh or self::mml:sech or self::mml:csch or self::mml:coth or
+ self::mml:arcsin or self::mml:arccos or self::mml:arctan or self::mml:arccosh
+ or self::mml:arccot or self::mml:arccoth or self::mml:arccsc or
+ self::mml:arccsch or self::mml:arcsec or self::mml:arcsech or
+ self::mml:arcsinh or self::mml:arctanh or self::mml:ln]]">
+<mml:mrow>
+<mml:mi><xsl:value-of select="local-name(*[1])"/></mml:mi>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+</mml:mrow>
+</xsl:template>
+
+
+
+
+<!-- 4.4.8.2 exp -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:exp]]">
+<mml:msup>
+<mml:mi>e<!-- exponential e--></mml:mi>
+<mml:mrow><xsl:apply-templates mode="c2p" select="*[2]"/></mml:mrow>
+</mml:msup>
+</xsl:template>
+
+<!-- 4.4.8.3 ln -->
+<!-- with trig -->
+
+<!-- 4.4.8.4 log -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:log]]">
+<mml:mrow>
+<xsl:choose>
+<xsl:when test="not(mml:logbase) or mml:logbase=10">
+<mml:mi>log</mml:mi>
+</xsl:when>
+<xsl:otherwise>
+<mml:msub>
+<mml:mi>log</mml:mi>
+<mml:mrow><xsl:apply-templates mode="c2p" select="mml:logbase/node()"/></mml:mrow>
+</mml:msub>
+</xsl:otherwise>
+</xsl:choose>
+<xsl:apply-templates mode="c2p" select="*[last()]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.9.1 mean -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:mean]]">
+<mml:mrow>
+ <mml:mo>&#9001;<!--langle--></mml:mo>
+    <xsl:for-each select="*[position()&gt;1]">
+      <xsl:apply-templates mode="c2p" select="."/>
+      <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
+    </xsl:for-each>
+<mml:mo>&#9002;<!--rangle--></mml:mo>
+</mml:mrow>
+</xsl:template>
+
+
+<!-- 4.4.9.2 sdef -->
+<xsl:template mode="c2p" match="mml:sdev">
+<mml:mo>&#963;<!--sigma--></mml:mo>
+</xsl:template>
+
+<!-- 4.4.9.3 variance -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:variance]]">
+<mml:msup>
+<mml:mrow>
+<mml:mo>&#963;<!--sigma--></mml:mo>
+<mml:mo>(</mml:mo>
+<xsl:apply-templates mode="c2p" select="*[2]"/>
+<mml:mo>)</mml:mo>
+</mml:mrow>
+<mml:mn>2</mml:mn>
+</mml:msup>
+</xsl:template>
+
+
+<!-- 4.4.9.4 median -->
+<xsl:template mode="c2p" match="mml:median">
+<mml:mo>median</mml:mo>
+</xsl:template>
+
+
+<!-- 4.4.9.5 mode -->
+<xsl:template mode="c2p" match="mml:mode">
+<mml:mo>mode</mml:mo>
+</xsl:template>
+
+<!-- 4.4.9.5 moment -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:moment]]">
+<mml:mrow>
+ <mml:mo>&#9001;<!--langle--></mml:mo>
+       <mml:msup>
+      <xsl:apply-templates mode="c2p" select="*[last()]"/>
+      <mml:mrow><xsl:apply-templates mode="c2p" select="mml:degree/node()"/></mml:mrow>
+       </mml:msup>
+<mml:mo>&#9002;<!--rangle--></mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.9.5 momentabout -->
+<xsl:template mode="c2p" match="mml:momentabout"/>
+
+<!-- 4.4.10.1 vector  -->
+<xsl:template mode="c2p" match="mml:vector">
+<mml:mrow>
+<mml:mo>(</mml:mo>
+<mml:mtable>
+<xsl:for-each select="*">
+<mml:mtr><mml:mtd><xsl:apply-templates mode="c2p" select="."/></mml:mtd></mml:mtr>
+</xsl:for-each>
+</mml:mtable>
+<mml:mo>)</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.10.2 matrix  -->
+<xsl:template mode="c2p" match="mml:matrix">
+<mml:mrow>
+<mml:mo>(</mml:mo>
+<mml:mtable>
+<xsl:apply-templates mode="c2p"/>
+</mml:mtable>
+<mml:mo>)</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.10.3 matrixrow  -->
+<xsl:template mode="c2p" match="mml:matrixrow">
+<mml:mtr>
+<xsl:for-each select="*">
+<mml:mtd><xsl:apply-templates mode="c2p" select="."/></mml:mtd>
+</xsl:for-each>
+</mml:mtr>
+</xsl:template>
+
+<!-- 4.4.10.4 determinant  -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:determinant]]">
+<mml:mrow>
+<mml:mi>det</mml:mi>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+</mml:mrow>
+</xsl:template>
+
+<xsl:template
+match="mml:apply[*[1][self::mml:determinant]][*[2][self::mml:matrix]]" priority="2">
+<mml:mrow>
+<mml:mo>|</mml:mo>
+<mml:mtable>
+<xsl:apply-templates mode="c2p" select="mml:matrix/*"/>
+</mml:mtable>
+<mml:mo>|</mml:mo>
+</mml:mrow>
+</xsl:template>
+
+<!-- 4.4.10.5 transpose -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:transpose]]">
+<mml:msup>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+<mml:mi>T</mml:mi>
+</mml:msup>
+</xsl:template>
+
+<!-- 4.4.10.5 selector -->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:selector]]">
+<mml:msub>
+<xsl:apply-templates mode="c2p" select="*[2]">
+  <xsl:with-param name="p" select="7"/>
+</xsl:apply-templates>
+<mml:mrow>
+    <xsl:for-each select="*[position()&gt;2]">
+      <xsl:apply-templates mode="c2p" select="."/>
+      <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
+    </xsl:for-each>
+</mml:mrow>
+</mml:msub>
+</xsl:template>
+
+<!-- *** -->
+<!-- 4.4.10.6 vectorproduct see cartesianproduct -->
+
+
+<!-- 4.4.10.7 scalarproduct-->
+<xsl:template mode="c2p" match="mml:apply[*[1][self::mml:scalarproduct or self::mml:outerproduct]]">
+<xsl:param name="p" select="0"/>
+<xsl:call-template name="infix">
+ <xsl:with-param name="this-p" select="2"/>
+ <xsl:with-param name="p" select="$p"/>
+ <xsl:with-param name="mo"><mml:mo>.</mml:mo></xsl:with-param>
+</xsl:call-template>
+</xsl:template>
+
+<!-- 4.4.10.8 outerproduct-->
+
+<!-- 4.4.11.2 semantics -->
+<xsl:template mode="c2p" match="mml:semantics">
+ <xsl:apply-templates mode="c2p" select="*[1]"/>
+</xsl:template>
+<xsl:template mode="c2p" match="mml:semantics[mml:annotation-xml/@encoding='MathML-Presentation']">
+ <xsl:apply-templates mode="c2p" select="mml:annotation-xml[@encoding='MathML-Presentation']/node()"/>
+</xsl:template>
+
+<!-- 4.4.12.1 integers -->
+<xsl:template mode="c2p" match="mml:integers">
+<mml:mi mathvariant="double-struck">Z</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.2 reals -->
+<xsl:template mode="c2p" match="mml:reals">
+<mml:mi mathvariant="double-struck">R</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.3 rationals -->
+<xsl:template mode="c2p" match="mml:rationals">
+<mml:mi mathvariant="double-struck">Q</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.4 naturalnumbers -->
+<xsl:template mode="c2p" match="mml:naturalnumbers">
+<mml:mi mathvariant="double-struck">N</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.5 complexes -->
+<xsl:template mode="c2p" match="mml:complexes">
+<mml:mi mathvariant="double-struck">C</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.6 primes -->
+<xsl:template mode="c2p" match="mml:primes">
+<mml:mi mathvariant="double-struck">P</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.7 exponentiale -->
+<xsl:template mode="c2p" match="mml:exponentiale">
+  <mml:mi>e<!-- exponential e--></mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.8 imaginaryi -->
+<xsl:template mode="c2p" match="mml:imaginaryi">
+  <mml:mi>i<!-- imaginary i--></mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.9 notanumber -->
+<xsl:template mode="c2p" match="mml:notanumber">
+  <mml:mi>NaN</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.10 true -->
+<xsl:template mode="c2p" match="mml:true">
+  <mml:mi>true</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.11 false -->
+<xsl:template mode="c2p" match="mml:false">
+  <mml:mi>false</mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.12 emptyset -->
+<xsl:template mode="c2p" match="mml:emptyset">
+  <mml:mi>&#8709;<!-- emptyset --></mml:mi>
+</xsl:template>
+
+
+<!-- 4.4.12.13 pi -->
+<xsl:template mode="c2p" match="mml:pi">
+  <mml:mi>&#960;<!-- pi --></mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.14 eulergamma -->
+<xsl:template mode="c2p" match="mml:eulergamma">
+  <mml:mi>&#947;<!-- gamma --></mml:mi>
+</xsl:template>
+
+<!-- 4.4.12.15 infinity -->
+<xsl:template mode="c2p" match="mml:infinity">
+  <mml:mi>&#8734;<!-- infinity --></mml:mi>
+</xsl:template>
+
+
+<!-- ****************************** -->
+<xsl:template name="infix" >
+  <xsl:param name="mo"/>
+  <xsl:param name="p" select="0"/>
+  <xsl:param name="this-p" select="0"/>
+  <mml:mrow>
+  <xsl:if test="$this-p &lt; $p"><mml:mo>(</mml:mo></xsl:if>
+  <xsl:for-each select="*[position()&gt;1]">
+   <xsl:if test="position() &gt; 1">
+    <xsl:copy-of select="$mo"/>
+   </xsl:if>   
+   <xsl:apply-templates mode="c2p" select=".">
+     <xsl:with-param name="p" select="$this-p"/>
+   </xsl:apply-templates>
+  </xsl:for-each>
+  <xsl:if test="$this-p &lt; $p"><mml:mo>)</mml:mo></xsl:if>
+  </mml:mrow>
+</xsl:template>
+
+<xsl:template name="binary" >
+  <xsl:param name="mo"/>
+  <xsl:param name="p" select="0"/>
+  <xsl:param name="this-p" select="0"/>
+  <mml:mrow>
+  <xsl:if test="$this-p &lt; $p"><mml:mo>(</mml:mo></xsl:if>
+   <xsl:apply-templates mode="c2p" select="*[2]">
+     <xsl:with-param name="p" select="$this-p"/>
+   </xsl:apply-templates>
+   <xsl:copy-of select="$mo"/>
+   <xsl:apply-templates mode="c2p" select="*[3]">
+     <xsl:with-param name="p" select="$this-p"/>
+   </xsl:apply-templates>
+  <xsl:if test="$this-p &lt; $p"><mml:mo>)</mml:mo></xsl:if>
+  </mml:mrow>
+</xsl:template>
+
+<xsl:template name="set" >
+  <xsl:param name="o" select="'{'"/>
+  <xsl:param name="c" select="'}'"/>
+  <mml:mrow>
+   <mml:mo><xsl:value-of select="$o"/></mml:mo>
+   <xsl:choose>
+   <xsl:when test="mml:condition">
+   <mml:mrow><xsl:apply-templates mode="c2p" select="mml:bvar/*[not(self::bvar or self::condition)]"/></mml:mrow>
+   <mml:mo>|</mml:mo>
+   <mml:mrow><xsl:apply-templates mode="c2p" select="mml:condition/node()"/></mml:mrow>
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:for-each select="*">
+      <xsl:apply-templates mode="c2p" select="."/>
+      <xsl:if test="position() !=last()"><mml:mo>,</mml:mo></xsl:if>
+    </xsl:for-each>
+   </xsl:otherwise>
+   </xsl:choose>
+   <mml:mo><xsl:value-of select="$c"/></mml:mo>
+  </mml:mrow>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/mathml.xsl ../rdoc-f95-20070309/generators/template/xhtml/mathml.xsl
--- ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/mathml.xsl	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/xhtml/mathml.xsl	2006-08-05 00:37:51.000000000 +0900
@@ -0,0 +1,42 @@
+
+<xsl:stylesheet
+  version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
+  xmlns:fns="http://www.w3.org/2002/Math/preference"
+  xmlns:mml="http://www.w3.org/1998/Math/MathML"
+  extension-element-prefixes="msxsl fns"
+>
+
+<!--
+Copyright David Carlisle 2001, 2002.
+
+Use and distribution of this code are permitted under the terms of the <a
+href="http://www.w3.org/Consortium/Legal/copyright-software-19980720"
+>W3C Software Notice and License</a>.
+-->
+
+<xsl:include href="ctop.xsl"/>
+<xsl:include href="pmathml.xsl"/>
+
+<xsl:output/>
+
+<xsl:template match="/">
+<xsl:choose>
+<xsl:when test="system-property('xsl:vendor')='Transformiix'">
+<xsl:apply-templates mode="c2p"/>
+</xsl:when>
+<!-- not working, currently
+<xsl:when test="system-property('xsl:vendor')='Microsoft' and /*/@fns:renderer='css'">
+<xsl:variable name="pmml">
+<xsl:apply-templates mode="c2p"/>
+</xsl:variable>
+<xsl:apply-templates select="msxsl:node-set($pmml)/node()"/>
+</xsl:when>
+-->
+<xsl:otherwise>
+<xsl:apply-templates/>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:template> 
+</xsl:stylesheet>
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/pmathml.xsl ../rdoc-f95-20070309/generators/template/xhtml/pmathml.xsl
--- ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/pmathml.xsl	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/xhtml/pmathml.xsl	2006-08-05 00:37:51.000000000 +0900
@@ -0,0 +1,612 @@
+<xsl:stylesheet
+  version="1.0"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+  xmlns:mml="http://www.w3.org/1998/Math/MathML"
+  xmlns:h="http://www.w3.org/1999/xhtml"
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
+  xmlns:fns="http://www.w3.org/2002/Math/preference"
+  xmlns:doc="http://www.dcarlisle.demon.co.uk/xsldoc"
+  xmlns:ie5="http://www.w3.org/TR/WD-xsl"
+  exclude-result-prefixes="h ie5 fns msxsl fns doc"
+  extension-element-prefixes="msxsl fns doc"
+>
+
+<!--
+$Id: pmathml.xsl,v 1.1 2006/08/04 15:37:51 morikawa Exp $
+
+Copyright David Carlisle 2001, 2002.
+
+Use and distribution of this code are permitted under the terms of the <a
+href="http://www.w3.org/Consortium/Legal/copyright-software-19980720"
+>W3C Software Notice and License</a>.
+-->
+
+<!-- MathPlayer mpdialog code for contributed by
+     Jack Dignan and Robert Miner, both of Design Science.
+-->
+
+<xsl:output method="xml" omit-xml-declaration="yes"  />
+
+<ie5:if doc:id="iehack" test=".">
+    <ie5:eval no-entities="t">'&lt;!--'</ie5:eval>
+</ie5:if>
+
+
+<fns:x name="mathplayer" o="MathPlayer.Factory.1">
+<object id="mmlFactory" 
+        classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987">
+</object>
+<?import namespace="mml" implementation="#mmlFactory"?>
+</fns:x>
+
+<fns:x name="techexplorer" o="techexplorer.AxTchExpCtrl.1">
+<object id="mmlFactory" classid="clsid:0E76D59A-C088-11D4-9920-002035EFB1A4">
+</object>
+<?import namespace="mml" implementation="#mmlFactory"?>
+</fns:x>
+
+
+<!-- SCRIPT not script due to weird mozilla bug
+http://bugzilla.mozilla.org/show_bug.cgi?id=158457
+-->
+
+<fns:x name="css" o="Microsoft.FreeThreadedXMLDOM">
+<SCRIPT for="window" event="onload">
+var xsl = new ActiveXObject("Microsoft.FreeThreadedXMLDOM");
+xsl.async = false;
+xsl.validateOnParse = false;
+xsl.load("pmathmlcss.xsl");
+var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate.3.0");
+xslTemplate.stylesheet=xsl.documentElement;
+var xslProc = xslTemplate.createProcessor();
+xslProc.input = document.XMLDocument;
+xslProc.transform();
+var str = xslProc.output;
+<!-- work around bug in IE6 under Win XP, RM 6/5/2002 -->
+var repl = "replace";
+if (window.navigator.appVersion.match(/Windows NT 5.1/)) { repl = ""; }
+var newDoc = document.open("text/html", repl);
+newDoc.write(str);
+</SCRIPT>
+</fns:x>
+
+
+<h:p>
+in mpdialog mode, we just write out some JavaScript to display 
+dialog to the reader asking whether they want to install MathPlayer 
+Depending on the response we get, we then instantiate an XSL processor
+and reprocess the doc, passing $secondpass according to the
+reader response.
+</h:p>
+<h:p>Using d-o-e is fairly horrible, but this code is only for IE
+anyway, and we need to force HTML semantics in this case.</h:p>
+
+<xsl:variable name="mpdialog">
+var cookieName = "MathPlayerInstall=";
+function MPInstall(){
+ var showDialog=true;
+ var c = document.cookie;
+ var i = c.indexOf(cookieName);
+ if (i >= 0) {
+  if ( c.substr(i + cookieName.length, 1) >= 2) { showDialog=false; }
+ }
+ if (showDialog) {
+  MPDialog();
+  c = document.cookie;
+  i = c.indexOf(cookieName);
+ }
+ if (i >= 0) return c.substr(i + cookieName.length, 1);
+ else return null;
+}
+
+function MPDialog() {
+ var vArgs="";
+ var sFeatures="dialogWidth:410px;dialogHeight:190px;help:off;status:no";
+ var text = "";
+ text += "javascript:document.write('"
+ text += '&lt;script>'
+ text += 'function fnClose(v) { '
+ text += 'var exp = new Date();'
+ text += 'var thirtyDays = exp.getTime() + (30 * 24 * 60 * 60 * 1000);'
+ text += 'exp.setTime(thirtyDays);'
+ text += 'var cookieProps = ";expires=" + exp.toGMTString();'
+ text += 'if (document.forms[0].dontask.checked) v+=2;'
+ text += 'document.cookie="' + cookieName + '"+v+cookieProps;'
+ text += 'window.close();'
+ text += '}'
+ text += '&lt;/' + 'script>'
+ text += '&lt;head>&lt;title>Install MathPlayer?&lt;/title>&lt;/head>'
+ text += '&lt;body bgcolor="#D4D0C8">&lt;form>'
+ text += '&lt;table cellpadding=10 style="font-family:Arial;font-size:10pt" border=0 width=100%>'
+ text += '&lt;tr>&lt;td align=left>This page requires Design Science\\\'s MathPlayer&amp;trade;.&lt;br>'
+ text += 'Do you want to download and install MathPlayer?&lt;/td>&lt;/tr>';
+ text += '&lt;tr>&lt;td align=center>&lt;input type="checkbox" name="dontask">'
+ text += 'Don\\\'t ask me again&lt;/td>&lt;/tr>'
+ text += '&lt;tr>&lt;td align=center>&lt;input id=yes type="button" value=" Yes "'
+ text += ' onClick="fnClose(1)">&amp;nbsp;&amp;nbsp;&amp;nbsp;'
+ text += '&lt;input type="button" value="  No  " onClick="fnClose(0)">&lt;/td>&lt;/tr>'
+ text += '&lt;/table>&lt;/form>';
+ text += '&lt;/body>'
+ text += "')"
+ window.showModalDialog( text , vArgs, sFeatures );
+}
+
+function WaitDialog() {
+ var vArgs="";
+ var sFeatures="dialogWidth:510px;dialogHeight:150px;help:off;status:no";
+ var text = "";
+ text += "javascript:document.write('"
+ text += '&lt;script>'
+ text += 'window.onload=fnLoad;'
+ text += 'function fnLoad() {document.forms[0].yes.focus();}'
+ text += 'function fnClose(v) { '
+ text += 'window.returnValue=v;'
+ text += 'window.close();'
+ text += '}'
+ text += '&lt;/' + 'script>'
+ text += '&lt;head>&lt;title>Wait for Installation?&lt;/title>&lt;/head>'
+ text += '&lt;body bgcolor="#D4D0C8" onload="fnLoad()">&lt;form>&lt;'
+ text += 'table cellpadding=10 style="font-family:Arial;font-size:10pt" border=0 width=100%>'
+ text += '&lt;tr>&lt;td align=left>Click OK once MathPlayer is installed '
+ text += 'to refresh the page.&lt;br>'
+ text += 'Click Cancel to view the page immediately without MathPlayer.&lt;/td>&lt;/tr>';
+ text += '&lt;tr>&lt;td align=center>&lt;input id=yes type="button" '
+ text += 'value="   OK   " onClick="fnClose(1)">&amp;nbsp;&amp;nbsp;&amp;nbsp;'
+ text += '&lt;input type="button" value="Cancel" onClick="fnClose(0)">&lt;/td>&lt;/tr>'
+ text += '&lt;/table>&lt;/form>';
+ text += '&lt;/body>'
+ text += "')"
+ return window.showModalDialog( text , vArgs, sFeatures );
+}
+
+var result = MPInstall();
+
+var action = "fallthrough";
+if (result == 1 || result == 3) {
+ window.open("http://www.dessci.com/webmath/mathplayer");
+ var wait = WaitDialog();
+ if ( wait == 1) {
+  action =  "install";
+  document.location.reload();
+
+ }
+}
+if (action == "fallthrough") {
+var xsl = new ActiveXObject("Microsoft.FreeThreadedXMLDOM");
+xsl.async = false;
+xsl.validateOnParse = false;
+xsl.load("pmathmlcss.xsl");
+var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate.3.0");
+xslTemplate.stylesheet=xsl.documentElement;
+var xslProc = xslTemplate.createProcessor();
+xslProc.input = document.XMLDocument;
+
+xslProc.transform();
+var str = xslProc.output;
+<!-- work around bug in IE6 under Win XP, RM 6/5/2002 -->
+var repl = "replace";
+if (window.navigator.appVersion.match(/Windows NT 5.1/)) { repl = ""; }
+var newDoc = document.open("text/html", repl);
+newDoc.write(str);
+document.close();
+}
+</xsl:variable>
+
+<fns:x name="mathplayer-dl" >mathplayer-dl</fns:x>
+
+<fns:x name="techexplorer-plugin" >techexplorer-plugin</fns:x>
+
+<xsl:variable name="root" select="/"/>
+
+
+
+<xsl:param name="activex">
+   <xsl:choose>
+     <xsl:when test="/*/@fns:renderer='techexplorer-plugin'">techexplorer-plugin</xsl:when>
+     <xsl:when test="system-property('xsl:vendor')!='Microsoft'"/>
+     <xsl:otherwise>
+<xsl:variable name="docpref" select="document('')/*/fns:x[@name=$root/*/@fns:renderer][1]"/>
+     <xsl:choose>
+     <xsl:when test="$docpref='mathplayer-dl'">mathplayer-dl</xsl:when>
+     <xsl:when test="$docpref and fns:isinstalled(string($docpref/@o))='true'">
+           <xsl:copy-of select="$docpref/node()"/>
+     </xsl:when>
+     <xsl:otherwise>
+       <xsl:copy-of select="(document('')/*/fns:x[fns:isinstalled(string(@o))='true'])[1]/node()"/>
+     </xsl:otherwise>
+  </xsl:choose>
+     </xsl:otherwise>
+  </xsl:choose>
+</xsl:param>
+
+<h:div doc:ref="iehack">
+<h:h3>IE5 hacks</h:h3>
+<h:p>This code will be ignored by an XSLT engine as a top level
+element in a foreign namespace. It will be executed by an IE5XSL
+engine and insert &lt;!-- into the output stream, ie the start of a
+comment. This will comment out all the XSLT code which will be copied
+to the output. A similar clause below will close this comment, it is
+then followed by the IE5XSL templates to be executed.</h:p>
+<h:p>This trick is due to Jonathan Marsh of Microsoft, and used in
+<h:a href="http://www.w3.org/TR/2001/WD-query-datamodel-20010607/xmlspec-ie-dm.xsl">the stylesheet for
+the XPath 2 data model draft</h:a>.</h:p>
+</h:div>
+
+<h:h2>XSLT stylesheet</h:h2>
+<h:h3>MSXSL script block</h:h3>
+
+<h:p>The following script block implements an extension function that
+tests whether a specified ActiveX component is known to the client.
+This is used below to test for the existence of MathML rendering
+components.</h:p>
+<msxsl:script language="JScript" implements-prefix="fns">
+    function isinstalled(ax) 
+    {
+    try {
+        var ActiveX = new ActiveXObject(ax);
+        return "true";
+    } catch (e) {
+        return "false";
+    }
+}
+</msxsl:script>
+
+<h:p>The main bulk of this stylesheet is an identity transformation so...</h:p>
+<xsl:template match="*|comment()">
+<xsl:copy>
+<xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:copy>
+</xsl:template>
+
+
+
+<h:p>XHTML elements are copied sans prefix (XHTML is default namespace
+here, so these elements will still be in XHTML namespace</h:p>
+<xsl:template match="h:*">
+<xsl:element name="{local-name(.)}">
+ <xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:element>
+</xsl:template>
+
+<h:p>IE's treatment of XHTML as HTML needs a little help here...</h:p>
+<xsl:template match="h:br|h:hr">
+<xsl:choose>
+<xsl:when test="system-property('xsl:vendor')='Microsoft'">
+  <xsl:value-of disable-output-escaping="yes" select="concat('&lt;',local-name(.))"/>
+  <xsl:apply-templates mode="verb" select="@*"/>
+  <xsl:text disable-output-escaping="yes">&gt;</xsl:text>
+</xsl:when>
+<xsl:otherwise>
+<xsl:element name="{local-name(.)}">
+ <xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:element>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<h:p>This just ensures the mathml prefix declaration isn't copied from
+the source at this stage, so that the system will use the mml prefix
+coming from this stylesheet</h:p>
+<xsl:template match="h:html|html">
+<html>
+<xsl:copy-of select="@*[not(namespace-uri(.)='http://www.w3.org/2002/Math/preference')]"/>
+<xsl:apply-templates/>
+</html>
+</xsl:template>
+
+<h:p>We modify the head element to add code to specify a Microsoft
+"Behaviour" if the behaviour component is known to the system.</h:p>
+<h:span doc:ref="mp">Test for MathPlayer (Design Science)</h:span>
+<h:span doc:ref="te">Test for Techexplorer (IBM)</h:span>
+<h:span doc:ref="ms"><h:div>Test for Microsoft. In this case we just
+output a small HTML file that executes a script that will re-process
+the source docuument with a different stylesheet. Doing things this
+way avoids the need to xsl:import the second stylesheet, which would
+very much increase the processing overhead of running this
+stylesheet.</h:div></h:span>
+<h:span doc:ref="other">Further tests (eg for netscape/mozilla) could
+be added here if necessary</h:span>
+<xsl:template match="h:head|head">
+<head>
+
+<!-- new if for IE frames bug -->
+<xsl:if test="system-property('xsl:vendor')='Microsoft'">
+<xsl:if test="name(msxsl:node-set($activex)/*)=''">
+<object id="mmlFactory" 
+        classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987">
+</object>
+<xsl:processing-instruction name="import">
+ namespace="mml" implementation="#mmlFactory"
+</xsl:processing-instruction>
+</xsl:if>
+</xsl:if>
+
+<xsl:choose>
+<xsl:when doc:id="mp" test="$activex='mathplayer-dl'">
+    <xsl:if test="fns:isinstalled('MathPlayer.Factory.1')='false'">
+     <SCRIPT for="window" event="onload">
+       <xsl:value-of select="$mpdialog" disable-output-escaping="yes"/>
+     </SCRIPT>
+    </xsl:if>
+   <xsl:copy-of select="document('')/*/fns:x[@name='mathplayer']"/>
+</xsl:when>
+<xsl:when doc:id="mp" test="not($activex='techexplorer-plugin') and system-property('xsl:vendor')='Microsoft'">
+  <xsl:copy-of select="$activex"/>
+</xsl:when>
+<xsl:otherwise doc:id="other">
+</xsl:otherwise>
+</xsl:choose>
+  <xsl:apply-templates/>
+</head>
+</xsl:template>
+
+
+<xsl:template match="mml:math" priority="22">
+<xsl:choose>
+<xsl:when test="$activex='techexplorer-plugin'">
+<embed  type="text/mathml" height="75" width="300">
+<xsl:attribute name="mmldata">
+<xsl:apply-templates mode="verb" select="."/>
+</xsl:attribute>
+</embed>
+</xsl:when>
+<xsl:otherwise>
+<xsl:element name="mml:{local-name(.)}">
+ <xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:element>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+
+<!-- squash annotation elements -->
+
+
+
+<h:p>Somewhat bizarrely in an otherwise namespace aware system,
+Microsoft behaviours are defined to trigger off the
+<h:em>prefix</h:em> not the <h:em>Namespace</h:em>. In the code above
+we associated a MathML rendering behaviour (if one was found) with the
+prefix <h:code>mml:</h:code> so here we ensure that this is the prefix
+that actually gets used in the output.</h:p>
+<xsl:template match="mml:*">
+<xsl:element name="mml:{local-name(.)}">
+ <xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:element>
+</xsl:template>
+
+<h:p>Copy semantics element through in IE (so mathplayer gets to see
+mathplayer annotations, otherwise use first child or a presentation annotation.</h:p>
+<xsl:template match="mml:semantics">
+<xsl:choose>
+ <xsl:when test="system-property('xsl:vendor')='Microsoft'">
+   <xsl:element name="mml:{local-name(.)}">
+    <xsl:copy-of select="@*"/>
+    <xsl:apply-templates/>
+   </xsl:element>
+ </xsl:when>
+ <xsl:when test="mml:annotation-xml[@encoding='MathML-Presentation']">
+   <xsl:apply-templates select="mml:annotation-xml[@encoding='MathML-Presentation']/node()"/>  
+ </xsl:when>
+ <xsl:otherwise>
+   <xsl:apply-templates select="*[1]"/>  
+ </xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<!-- a version of my old verb.xsl -->
+
+<!-- non empty elements and other nodes. -->
+<xsl:template mode="verb" match="*[*]|*[text()]|*[comment()]|*[processing-instruction()]">
+  <xsl:value-of select="concat('&lt;',local-name(.))"/>
+  <xsl:apply-templates mode="verb" select="@*"/>
+  <xsl:text>&gt;</xsl:text>
+  <xsl:apply-templates mode="verb"/>
+  <xsl:value-of select="concat('&lt;/',local-name(.),'&gt;')"/>
+</xsl:template>
+
+<!-- empty elements -->
+<xsl:template mode="verb" match="*">
+  <xsl:value-of select="concat('&lt;',local-name(.))"/>
+  <xsl:apply-templates mode="verb" select="@*"/>
+  <xsl:text>/&gt;</xsl:text>
+</xsl:template>
+
+<!-- attributes
+     Output always surrounds attribute value by "
+     so we need to make sure no literal " appear in the value  -->
+<xsl:template mode="verb" match="@*">
+  <xsl:value-of select="concat(' ',local-name(.),'=')"/>
+  <xsl:text>"</xsl:text>
+  <xsl:call-template name="string-replace">
+    <xsl:with-param name="from" select="'&quot;'"/>
+    <xsl:with-param name="to" select="'&amp;quot;'"/> 
+    <xsl:with-param name="string" select="."/>
+  </xsl:call-template>
+  <xsl:text>"</xsl:text>
+</xsl:template>
+
+<!-- pis -->
+<xsl:template mode="verb" match="processing-instruction()"/>
+
+<!-- only works if parser passes on comment nodes -->
+<xsl:template mode="verb" match="comment()"/>
+
+
+<!-- text elements
+     need to replace & and < by entity references-->
+<xsl:template mode="verb" match="text()">
+  <a name="{generate-id(.)}"/>
+  <xsl:call-template name="string-replace">
+    <xsl:with-param name="to" select="'&amp;gt;'"/>
+    <xsl:with-param name="from" select="'&gt;'"/> 
+    <xsl:with-param name="string">
+      <xsl:call-template name="string-replace">
+        <xsl:with-param name="to" select="'&amp;lt;'"/>
+        <xsl:with-param name="from" select="'&lt;'"/> 
+        <xsl:with-param name="string">
+          <xsl:call-template name="string-replace">
+            <xsl:with-param name="to" select="'&amp;amp;'"/>
+            <xsl:with-param name="from" select="'&amp;'"/> 
+            <xsl:with-param name="string" select="."/>
+          </xsl:call-template>
+        </xsl:with-param>
+      </xsl:call-template>
+    </xsl:with-param>
+  </xsl:call-template>
+</xsl:template>
+
+
+<!-- end  verb mode -->
+
+<!-- replace all occurences of the character(s) `from'
+     by the string `to' in the string `string'.-->
+<xsl:template name="string-replace" >
+  <xsl:param name="string"/>
+  <xsl:param name="from"/>
+  <xsl:param name="to"/>
+  <xsl:choose>
+    <xsl:when test="contains($string,$from)">
+      <xsl:value-of select="substring-before($string,$from)"/>
+      <xsl:value-of select="$to"/>
+      <xsl:call-template name="string-replace">
+      <xsl:with-param name="string" select="substring-after($string,$from)"/>
+      <xsl:with-param name="from" select="$from"/>
+      <xsl:with-param name="to" select="$to"/>
+      </xsl:call-template>
+    </xsl:when>
+    <xsl:otherwise>
+      <xsl:value-of select="$string"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
+
+<!-- end of verb.xsl -->
+
+
+
+<h:h2>IE5XSL stylesheet</h:h2>
+<h:p>In a rare fit of sympathy for users of
+<h:em>the-language-known-as-XSL-in-IE5</h:em> this file incorporates a
+version of the above code designed to work in the Microsoft dialect.
+This is needed otherwise users of a MathML rendering behaviour would
+have to make a choice whether they wanted to use this stylesheet
+(keeping their source documents conforming XHTML+MathML) or to use
+the explicit Microsoft Object code, which is less portable, but would
+work in at least IE5.5.</h:p>
+
+<h:p>This entire section of code, down to the end of the stylesheet is
+contained within this ie5:if. Thus XSLT sees it as a top level element
+from a foreign namespace and silently ignores it. IE5XSL sees it as
+"if true" and so executes the code.</h:p>
+
+
+<h:p doc:ref="closecomment">First close the comment started at the beginning. This ensures
+that the bulk of the XSLT code, while being copied to the result tree
+by the IE5XSL engine, will not be rendered in the browser.</h:p>
+
+<h:span doc:ref="eval">Lacking attribute value templates in
+xsl:element, and the local-name() function, we resort to constructing
+the start and end tags in strings in javascript, then using
+no-entities attribute which is the IE5XSL equivalent of disable-output-encoding</h:span>
+<ie5:if test=".">
+
+<ie5:eval doc:id="closecomment" no-entities="t">'--&gt;'</ie5:eval>
+
+<ie5:apply-templates select=".">
+
+
+<ie5:script>
+    function mpisinstalled() 
+    {
+    try {
+        var ActiveX = new ActiveXObject("MathPlayer.Factory.1");
+        return "true";
+    } catch (e) {
+        return "false";
+    }
+}
+</ie5:script>
+
+<ie5:template match="/">
+<ie5:apply-templates/>
+</ie5:template>
+
+<ie5:template match="head|h:head"/>
+
+<ie5:template match="text()">
+<ie5:value-of select="."/>
+</ie5:template>
+
+<ie5:template match="*|@*">
+<ie5:copy>
+<ie5:apply-templates select="*|text()|@*"/>
+</ie5:copy>
+</ie5:template>
+
+
+<ie5:template match="mml:*">
+<ie5:eval  no-entities="t" doc:id="eval">'&lt;mml:' + this.nodeName.substring(this.nodeName.indexOf(":")+1)</ie5:eval>
+<ie5:for-each select="@*">
+<ie5:eval no-entities="t">' ' + this.nodeName</ie5:eval>="<ie5:value-of select="."/>"
+</ie5:for-each>
+<ie5:eval no-entities="t">'&gt;'</ie5:eval>
+<ie5:apply-templates select="*|text()"/>
+<ie5:eval no-entities="t">'&lt;/mml:' +  this.nodeName.substring(this.nodeName.indexOf(":")+1) + '&gt;'</ie5:eval>
+</ie5:template>
+
+
+<ie5:template match="mml:math">
+<ie5:if expr="mpisinstalled()=='false'">
+<embed  type="text/mathml" height="75" width="300">
+<ie5:attribute name="mmldata">
+<ie5:eval  doc:id="eval"  no-entities="t">'&lt;math&gt;'</ie5:eval>
+<ie5:apply-templates/>
+<ie5:eval  doc:id="eval"  no-entities="t">'&lt;/math&gt;'</ie5:eval>
+</ie5:attribute>
+</embed>
+</ie5:if>
+<ie5:if expr="mpisinstalled()=='true'">
+<ie5:eval  doc:id="eval"  no-entities="t">'&lt;mml:' + this.nodeName.substring(this.nodeName.indexOf(":")+1)</ie5:eval>
+<ie5:for-each select="@*">
+<ie5:eval no-entities="t">' ' + this.nodeName</ie5:eval>="<ie5:value-of select="."/>"
+</ie5:for-each>
+<ie5:eval no-entities="t">'&gt;'</ie5:eval>
+<ie5:apply-templates select="*|text()"/>
+<ie5:eval no-entities="t">'&lt;/mml:' +  this.nodeName.substring(this.nodeName.indexOf(":")+1) + '&gt;'</ie5:eval>
+</ie5:if>
+</ie5:template>
+
+<ie5:template match="html|h:html">
+<html   xmlns:mml="http://www.w3.org/1998/Math/MathML">
+<head>
+<ie5:if expr="mpisinstalled()=='true'">
+<object id="mmlFactory"
+        classid="clsid:32F66A20-7614-11D4-BD11-00104BD3F987">
+</object>
+<ie5:pi name="IMPORT">
+ namespace="mml" implementation="#mmlFactory"
+</ie5:pi>
+</ie5:if>
+<ie5:apply-templates select="h:head/*|head/*"/>
+</head>
+<body>
+<ie5:apply-templates select="body|h:body"/>
+</body>
+</html>
+</ie5:template>
+
+</ie5:apply-templates>
+
+
+</ie5:if>
+
+
+</xsl:stylesheet>
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/pmathmlcss.xsl ../rdoc-f95-20070309/generators/template/xhtml/pmathmlcss.xsl
--- ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/pmathmlcss.xsl	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/xhtml/pmathmlcss.xsl	2006-08-05 00:37:51.000000000 +0900
@@ -0,0 +1,872 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+Presentation MathML Stylesheet
+-->
+
+<!--
+$Id: pmathmlcss.xsl,v 1.1 2006/08/04 15:37:51 morikawa Exp $
+
+Copyright David Carlisle 2001, 2002.
+
+Use and distribution of this code are permitted under the terms of the <a
+href="http://www.w3.org/Consortium/Legal/copyright-software-19980720"
+>W3C Software Notice and License</a>.
+-->
+
+<xsl:stylesheet
+   version="1.0"
+   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+   xmlns:h="http://www.w3.org/1999/xhtml"
+  xmlns:m="http://www.w3.org/1998/Math/MathML"
+  xmlns:doc="http://www.dcarlisle.demon.co.uk/xsldoc"
+  xmlns:x="data:,x"
+  exclude-result-prefixes="x h doc"
+>
+
+<h:h2>Dictionary</h:h2>
+
+<h:p> The following elements in the x: namespace form an
+implementation of an "Operator Dictionary" for this MathML
+Implementation. In the case of stretch operators, the element
+specifies the symbol parts via the latin-1 equivalent character based
+on the encoding in the symbol font.  It is a clear "failure to comply
+to the spec" that using latin 1 characters (or numeric character
+references) in the latin 1 range access glyphs in teh symbol font via
+font position, however most of these character parts are not in
+Unicode (until 3.2), so there is no standard way to access these characters.</h:p>
+
+<x:x x="{" m="0em"  stretch="true" top="ì" middle="í" extend="ï" bottom="î">{</x:x>
+<x:x x="}" m="0em"  stretch="true" top="ü" middle="ý" extend="ú" bottom="þ">{</x:x>
+
+<x:x x="(" m="0em"  stretch="true" top="æ" middle="ç" extend="ç" bottom="è">(</x:x>
+<x:x x=")" m="0em"  stretch="true" top="ö" middle="÷" extend="÷" bottom="ø">)</x:x>
+
+<x:x x="[" m="0em"  stretch="true" top="é" middle="ê" extend="ê" bottom="ë">[</x:x>
+<x:x x="]" m="0em"  stretch="true" top="ù" middle="ú" extend="ú" bottom="û">]</x:x>
+
+<x:x x="&#x301A;" m="0em"  stretch="true" top="éé" middle="êê" extend="êê" bottom="ëë">[[</x:x>
+<x:x x="&#x301B;" m="0em"  stretch="true" top="ùù" middle="úú" extend="úú" bottom="ûû">]]</x:x>
+
+<x:x x="|" m="0em"  stretch="true" top="ç" middle="ç" extend="ç" bottom="ç">|</x:x>
+<x:x x="||" m="0em"  stretch="true" top="çç" middle="çç" extend="çç" bottom="çç">||</x:x>
+
+<x:x x="&#x2061;" m="0em">&#xFEFF;</x:x><!--  applyfunction -->
+<x:x x="&#x2062;" m="0em">&#xFEFF;</x:x><!--  invisibletimes -->
+<x:x x="-">&#x2212;</x:x>
+<x:x x="&#x2243;"><span style="position:
+relative;  top: +.1em;">&#x2212;</span>&#xFEFF;<span style="position:
+relative; left: -.55em; top: -.2em; margin: 0em;">~</span></x:x>
+<x:x x="&#xFE38;" m="0em">_v_</x:x>
+
+
+<h:p>Remove these for now, as XML parser in IE6 is broken and doesn't
+accept plane 1 characters.</h:p>
+<!--
+<x:x x="&#x1D538;" v="doublestruck">A</x:x>
+<x:x x="&#x1D539;" v="doublestruck">B</x:x>
+<x:x x="&#x2102;" v="doublestruck">C</x:x>
+<x:x x="&#x1D53B;" v="doublestruck">D</x:x>
+
+<x:x x="&#x1D552;" v="doublestruck">a</x:x>
+<x:x x="&#x1D553;" v="doublestruck">b</x:x>
+<x:x x="&#x1D554;" v="doublestruck">c</x:x>
+<x:x x="&#x1D555;" v="doublestruck">d</x:x>
+
+<x:x x="&#x1D504;" v="fraktur">A</x:x>
+<x:x x="&#x1D505;" v="fraktur">B</x:x>
+<x:x x="&#x212D;" v="fraktur">C</x:x>
+<x:x x="&#x1D507;" v="fraktur">D</x:x>
+
+<x:x x="&#x1D51E;" v="fraktur">a</x:x>
+<x:x x="&#x1D51F;" v="fraktur">b</x:x>
+<x:x x="&#x1D520;" v="fraktur">c</x:x>
+<x:x x="&#x1D521;" v="fraktur">d</x:x>
+-->
+
+<h:p>Grab all of the above into a variable.</h:p>
+<xsl:variable name="opdict" select="document('')/*/x:x"/>
+
+<h:h2>HTML elements</h:h2>
+
+<h:p>
+XHTML elements get passed straight through, sans namespace prefix.
+</h:p>
+<xsl:template match="h:*">
+<xsl:element name="{local-name(.)}">
+<xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+</xsl:element>
+</xsl:template>
+
+
+
+
+<h:p>
+Template for the head element copies the original content, aand in
+addition adds a script element and CSS style element that implement
+the core of the MathML renderer.
+</h:p>
+
+<h:p doc:ref="malign">
+The malign function first finds the left most item in the aligngroup, and
+then modifies the left margin of each item to make them
+align. (Currently only left alignment is supported.)
+</h:p>
+
+<h:p doc:ref="mrowStretch">
+The mrowStretch function implements stretchy brackets. It is called
+repeatedly, once for each mo child,after a span corresponding to an
+mrow. The arguments are the id of teh span and the characters to use
+for the parts of the stretch operator.
+constructed fence. The 
+</h:p>
+
+<h:p doc:ref="css">
+Inline CSS style block handles all font and size specification for the
+various MathML operators.
+</h:p>
+
+<xsl:template match="h:head">
+
+<xsl:element name="{local-name(.)}">
+<xsl:copy-of select="@*"/>
+<xsl:apply-templates/>
+
+<script>
+
+<xsl:text doc:id="malign">
+function malign (l)
+{
+var m = 0;
+for ( i = 0; i &lt; l.length ; i++)
+{
+ m = Math.max(m,l[i].offsetLeft);
+}
+for ( i = 0; i &lt; l.length ; i++)
+{
+ l[i].style.marginLeft=m - l[i].offsetLeft;
+}
+}
+</xsl:text>
+
+<xsl:text doc:id="mrowStretch">
+function mrowStretch (opid,opt,ope,opm,opb){
+opH = opid.offsetHeight;
+var opH;
+var i;
+var es;
+if (mrowH &gt; opH * 2) {
+m= "&lt;font size='+1' face='symbol'>" + opm + "&lt;/font>&lt;br/>" ;
+if ((mrowH &lt; opH * 3) &amp;&amp;(opm == ope) ) m="";
+es="";
+for ( i = 3; i &lt;= mrowH / (2*opH) ; i += 1) es += "&lt;font size='+1' face='symbol'>" + ope + "&lt;/font>&lt;br/>" ;
+opid.innerHTML="&lt;table class='lr'>&lt;tr>&lt;td>&lt;font size='+1' face='symbol'>" +
+          opt + "&lt;/font>&lt;br/>" +
+       es +
+       m +
+       es +
+ "&lt;font size='+1' face='symbol'>" + opb + "&lt;/font>&lt;/td>&lt;/tr>&lt;/table>";
+}
+}
+</xsl:text>
+
+<xsl:text doc:id="msubsup">
+function msubsup (bs,bbs,x,b,p){
+<!--
+p.style.setExpression("top",bs +" .offsetTop - " + (p.offsetHeight/2 +(bbs.offsetHeight - Math.max(bbs.offsetHeight, b.offsetHeight + p.offsetHeight)*.5)));
+-->
+p.style.setExpression("top",bs +" .offsetTop -"  + (p.offsetHeight/2));
+b.style.setExpression("top",bs + ".offsetTop + " + (bbs.offsetHeight - b.offsetHeight*.5));
+x.style.setExpression("marginLeft",Math.max(p.offsetWidth,b.offsetWidth));
+	document.recalc(true);
+}
+</xsl:text>
+
+<!--
+function msubsupzz (bs,x,b,p){
+p.style.setExpression("top",bs +" .offsetTop - " + bs +
+"p.offsetHeight/2 +(" + bs + ".offsetHeight - Math.max(" + bs + ".offsetHeight, (" + bs + "b.offsetHeight + " + bs + "p.offsetHeight)*.5))");
+b.style.setExpression("top",bs + ".offsetTop + " + bs + ".offsetHeight -  " + bs + "b.offsetHeight/2");
+x.style.setExpression("marginLeft","Math.max(" + bs +"p.offsetWidth,"
++ bs +"b.offsetWidth)");
+}
+-->
+
+<xsl:text doc:id="msup">
+function msup (bs,x,p){
+p.style.setExpression("top",bs +" .offsetTop -"  + (p.offsetHeight/2));
+x.style.setExpression("marginLeft", bs +"p.offsetWidth");
+x.style.setExpression("height", bs + ".offsetHeight + " + p.offsetHeight);
+document.recalc(true);
+}
+</xsl:text>
+
+<xsl:text doc:id="msub">
+function msub (bs,x,p){
+p.style.setExpression("top",bs +" .offsetTop +"  + (p.offsetHeight/2));
+x.style.setExpression("marginLeft", bs +"p.offsetWidth");
+x.style.setExpression("height", bs + ".offsetHeight + " + p.offsetHeight);
+document.recalc(true);
+}
+</xsl:text>
+
+<xsl:text doc:id="toggle">
+function toggle (x) {
+for ( i = 0 ; i &lt; x.childNodes.length ; i++) {
+if (x.childNodes.item(i).style.display=='inline') {
+ x.childNodes.item(i).style.display='none';
+if ( i+1 == x.childNodes.length) {
+x.childNodes.item(0).style.display='inline';
+} else {
+x.childNodes.item(i+1).style.display='inline';
+};
+break;
+}
+}
+}
+</xsl:text>
+</script>
+
+
+<style>
+<xsl:text doc:id="css">
+
+.msubsup {
+<!--background-color: red;-->
+font-size: 80%;
+position: absolute;
+}
+
+.munderover {
+display: inline;
+vertical-align: middle;
+}
+	
+.lr {
+display: inline;
+vertical-align: middle;
+}
+
+.mi {
+font-style: serif;
+}
+
+
+.mspace{
+display: inline;
+}
+.mtext {
+font-style: serif;
+}
+.ms {
+font-style: monospace;
+}
+
+.mi1 {
+font-style: italic;
+}
+
+.doublestruck {
+font-family:  castellar, algerian,niagara engraved;
+}
+.mo {
+padding-right: .3em;
+padding-left: .3em;
+}
+
+.mn {
+}
+
+.msqrt {
+border-style: solid;
+border-color: black;
+border-width: .1em 0pt 0pt .1em;
+padding-left: .2em;
+margin-left: 0em;
+margin-top: .2em;
+display: inline;
+}
+
+.actuarial {
+border-style: solid;
+border-color: black;
+border-width: .1em .1em 0pt 0pt ;
+padding-right: .2em;
+margin-right: 0em;
+margin-top: .2em;
+display: inline;
+}
+
+.ssa {
+ position:relative; top:+0.5ex;  
+width: 0pt;
+color: red;
+}
+
+
+.mover {
+margin: 0pt;
+padding: 0pt;
+display: inline;
+vertical-align: middle;
+text-align: center;
+}
+
+.mtable {
+display: inline;
+vertical-align: middle;
+}
+
+
+.mfrac {
+text-align: center;
+display:inline;
+vertical-align: middle;
+}
+
+.mfraca {
+vertical-align: bottom;
+}
+
+.mfracaa {
+border-width: 0em 0em .2ex 0em ; border-style: solid;
+   border-color: black;
+}
+
+
+.mfracb {
+vertical-align: top;
+}
+
+.merror{
+background-color: white  ;
+border-style: solid;
+border-color: #FF0000;
+color: #FF0000;
+}
+.mphantom{
+visibility: hidden;
+}
+</xsl:text>
+</style>
+</xsl:element>
+</xsl:template>
+
+<h:p>
+Unimplemented MathML elements get copied literally, in red, mainly as
+a debugging aid.
+</h:p>
+<xsl:template match="m:*">
+<span style="color: red;">&lt;<xsl:value-of select="local-name(.)"/>&gt;</span>
+<xsl:apply-templates/>
+<span style="color: red;">&lt;/<xsl:value-of select="local-name(.)"/>&gt;</span>
+</xsl:template>
+
+<h:p>
+mi: set default font based on string length, otherwise behaviour based
+on entries in the operator dictionary if one exists, or content is
+copied through to the output unchanged.
+</h:p>
+<xsl:template match="m:mi">
+<span class="mi">
+<xsl:if test="1=string-length(normalize-space(.))">
+<xsl:attribute name="class">mi1</xsl:attribute>
+</xsl:if>
+<xsl:apply-templates select="@mathvariant"/>
+ <xsl:variable name="x"  select="normalize-space(.)"/>
+ <xsl:choose>
+  <xsl:when test="$opdict[@x=$x and @v]">
+   <xsl:attribute name="class"><xsl:value-of select="$opdict[@x=$x]/@v"/></xsl:attribute>
+    <xsl:value-of select="$opdict[@x=$x and @v]"/>
+   </xsl:when>
+   <xsl:otherwise>
+    <xsl:value-of select="$x"/>
+   </xsl:otherwise>
+  </xsl:choose>
+</span>
+</xsl:template>
+
+<h:p>
+Handling of mathvariant attribute.
+The choice of font families here (currently) avoids math-specific
+fonts but does use several fionts coming with windows 9.x and/or
+office 2000.
+</h:p>
+<xsl:template match="@mathvariant[.='bold']">
+<xsl:attribute name="style">font-weight: bold; font-style: upright</xsl:attribute>
+</xsl:template>
+<xsl:template match="@mathvariant[.='bold-italic']">
+<xsl:attribute name="style">font-style: upright; font-weight: bold; font-style: italic;</xsl:attribute>
+</xsl:template>
+<xsl:template match="@mathvariant[.='italic']">
+<xsl:attribute name="style">font-style: italic; </xsl:attribute>
+</xsl:template>
+<xsl:template match="@mathvariant[.='monospace']">
+<xsl:attribute name="style">font-family: monospace; </xsl:attribute>
+</xsl:template>
+
+<xsl:template match="@mathvariant[.='sans-serif']">
+<xsl:attribute name="style">font-family: sans-serif; </xsl:attribute>
+</xsl:template>
+<xsl:template match="@mathvariant[.='bold-sans-serif']">
+<xsl:attribute name="style">font-family: sans-serif; font-weight: bold; </xsl:attribute>
+</xsl:template>
+
+<xsl:template match="@mathvariant[.='fraktur']">
+<xsl:attribute name="style">font-family: old english text mt</xsl:attribute>
+<xsl:attribute name="class"></xsl:attribute>
+</xsl:template>
+
+<xsl:template match="@mathvariant[.='double-struck']">
+<xsl:attribute name="class">doublestruck</xsl:attribute>
+</xsl:template>
+
+
+<xsl:template match="@mathvariant[.='script']">
+<xsl:attribute name="style">font-family: brush script mt italic</xsl:attribute>
+<xsl:attribute name="class"></xsl:attribute>
+</xsl:template>
+
+
+<h:p>mo: Generate a unique ID so that a script at the end of any
+surrounding mrow may replace the conent by a suitably stretched
+operator if need be.</h:p>
+<xsl:template match="m:mo">
+<span id="{generate-id()}" class="mo">
+ <xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<h:p>mn: a simple span</h:p>
+<xsl:template match="m:mn">
+<span class="mn">
+ <xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<h:p>munder: currently only supports underline, with a bottom border</h:p>
+<xsl:template match="m:munder">
+<span class="munder">
+<xsl:if test="normalize-space(*[2])='&#x332;'">
+  <xsl:attribute
+  name="style">border-width: 0pt 0pt .1em 0pt; border-style: solid;"</xsl:attribute>
+</xsl:if>
+ <span><xsl:apply-templates select="*[1]"/></span>
+</span>
+</xsl:template>
+
+<h:p>mover: currently only supports overline, with a top border</h:p>
+<xsl:template match="m:mover">
+<span class="munder">
+<xsl:if test="normalize-space(*[2])='&#xAF;'">
+  <xsl:attribute
+  name="style">border-width: .1em 0pt 0pt 0pt; border-style: solid;"</xsl:attribute>
+</xsl:if>
+ <span><xsl:apply-templates select="*[1]"/></span>
+</span>
+</xsl:template>
+
+<h:p>munderover: </h:p>
+<xsl:template match="m:munderover">
+<table class="munderover">
+<tr><td><xsl:apply-templates select="*[3]"/></td></tr>
+<tr><td><xsl:apply-templates select="*[1]"/></td></tr>
+<tr><td><xsl:apply-templates select="*[2]"/></td></tr>
+</table>
+</xsl:template>
+
+<h:p>mtext: a simple span</h:p>
+<xsl:template match="m:mtext">
+<span class="mtext">
+ <xsl:value-of select="normalize-space(.)"/>
+</span>
+</xsl:template>
+
+<h:p>mstyle: not many attributes currently supported</h:p>
+<xsl:template match="m:mstyle">
+<span>
+<xsl:attribute name="style">
+ <xsl:if test="@color">color: <xsl:value-of select="@color"/>; </xsl:if>
+ <xsl:if test="@background">background-color: <xsl:value-of select="@background"/>; </xsl:if>
+</xsl:attribute>
+ <xsl:apply-templates/>
+</span>
+</xsl:template>
+
+
+<h:p>mglyph: Uses disable output escaping to construct a numeric
+character reference. Uses IE's non conforming behaviour of using this
+number to access the font encoding rather than unicode.</h:p>
+<xsl:template match="m:mglyph">
+<font face="{@fontfamily}"><xsl:value-of
+disable-output-escaping="yes" select="'&amp;#'"/>
+<xsl:value-of select="@index"/>;<xsl:text/>
+</font>
+</xsl:template>
+
+<h:p>ms: a simple span with left and right character added to the content.</h:p>
+<xsl:template match="m:ms">
+<span class="ms">
+  <xsl:value-of select="@lquote"/><xsl:if test="not(@lquote)">"</xsl:if>
+    <xsl:value-of select="normalize-space(.)"/>
+  <xsl:value-of select="@rquote"/><xsl:if test="not(@rquote)">"</xsl:if>
+</span>
+</xsl:template>
+
+
+<xsl:template match="m:math">
+    <xsl:call-template name="mrow"/>
+</xsl:template>
+
+
+
+<xsl:template match="m:mfenced">
+<xsl:variable name="l">
+ <xsl:choose>
+  <xsl:when test="@open"><xsl:value-of select="@open"/></xsl:when>
+  <xsl:otherwise>(</xsl:otherwise>
+ </xsl:choose>
+</xsl:variable>
+<xsl:variable name="r">
+ <xsl:choose>
+  <xsl:when test="@close"><xsl:value-of select="@close"/></xsl:when>
+  <xsl:otherwise>)</xsl:otherwise>
+ </xsl:choose>
+</xsl:variable>
+<xsl:variable name="s">
+ <xsl:choose>
+  <xsl:when test="@sep">
+    <xsl:call-template name="text">
+       <xsl:with-param name="x" select="@sep"/>
+    </xsl:call-template>
+  </xsl:when>
+  <xsl:otherwise>,</xsl:otherwise>
+ </xsl:choose>
+</xsl:variable>
+<span id="{generate-id()}L"><xsl:value-of select="$l"/></span>
+<span id="{generate-id()}M">
+<xsl:for-each select="*">
+<xsl:apply-templates select="."/>
+<xsl:if test="position() != last()"><span id="{generate-id()}X{position()}"><xsl:value-of select="$s"/></span></xsl:if>
+</xsl:for-each>
+</span>
+<span id="{generate-id()}R"><xsl:value-of select="$r"/></span>
+<script>
+
+<xsl:if test="$s=$opdict[@stretch='true']/@x">
+<xsl:for-each select="*[position()&lt;last()]">
+<xsl:variable name="opdictentry" select="$opdict[@x=$s]"/>
+mrowStretch(<xsl:value-of select="concat(generate-id(),'X',position())"/>,"<xsl:value-of
+select="$opdictentry/@top"/>","<xsl:value-of
+select="$opdictentry/@extend"/>","<xsl:value-of
+select="$opdictentry/@middle"/>","<xsl:value-of
+select="$opdictentry/@bottom"/>");</xsl:for-each>
+</xsl:if>
+
+<xsl:variable name="opdictentry" select="$opdict[@x=$l]"/>
+var mrowH = <xsl:value-of select="generate-id()"/>M.offsetHeight;
+mrowStretch(<xsl:value-of select="generate-id()"/>L,"<xsl:value-of
+select="$opdictentry/@top"/>","<xsl:value-of
+select="$opdictentry/@extend"/>","<xsl:value-of
+select="$opdictentry/@middle"/>","<xsl:value-of
+select="$opdictentry/@bottom"/>");<xsl:text/>
+
+<xsl:variable name="opdictentry2" select="$opdict[@x=$r]"/>
+mrowStretch(<xsl:value-of select="generate-id()"/>R,"<xsl:value-of
+select="$opdictentry2/@top"/>","<xsl:value-of
+select="$opdictentry2/@extend"/>","<xsl:value-of
+select="$opdictentry2/@middle"/>","<xsl:value-of
+select="$opdictentry2/@bottom"/>");<xsl:text/>
+</script>
+</xsl:template>
+
+
+
+<xsl:template match="m:mmultiscripts">
+<table style="display:inline; vertical-align: middle;">
+<tr>
+<xsl:for-each select="*[preceding-sibling::m:mprescripts and position() mod 2 = 0]">
+<td><xsl:apply-templates select="."/></td>
+</xsl:for-each>
+<td rowspan="2"><xsl:apply-templates select="*[1]"/></td>
+<xsl:for-each select="*[not(preceding-sibling::m:mprescripts) and position() !=1 and position() mod 2 = 1]">
+<td><xsl:apply-templates select="."/></td>
+</xsl:for-each>
+</tr>
+<tr>
+<xsl:for-each select="*[preceding-sibling::m:mprescripts and position() mod 2 = 1]">
+<td><xsl:apply-templates select="."/></td>
+</xsl:for-each>
+<xsl:for-each select="*[not(preceding-sibling::m:mprescripts) and
+not(self::m:mprescripts) and position() mod 2 = 0]">
+<td><xsl:apply-templates select="."/></td>
+</xsl:for-each>
+</tr>
+</table>
+</xsl:template>
+
+
+<xsl:template match="m:none">&#xFEFF;</xsl:template>
+
+<xsl:template match="m:merror">
+<span class="merror"><xsl:call-template name="mrow"/></span>
+</xsl:template>
+
+<xsl:template match="m:mphantom">
+<span class="mphantom"><xsl:apply-templates/></span>
+</xsl:template>
+
+<xsl:template match="m:maction[@type='tooltip']">
+<span title="{*[2]}"><xsl:apply-templates select="*[1]"/></span>
+</xsl:template>
+
+<xsl:template match="m:maction[@type='toggle']">
+<span  id="{generate-id()}" onclick="toggle({generate-id()})">
+<span style="display:inline;"><xsl:apply-templates select="*[1]"/></span>
+<xsl:for-each select="*[position() &gt; 1]">
+<span style="display:none;"><xsl:apply-templates select="."/></span>
+</xsl:for-each>
+</span>
+</xsl:template>
+
+
+<xsl:template match="m:maction[@type='statusline']">
+<span  id="{generate-id()}"
+onmouseover="window.status='{*[2]}';"
+onmouseout="window.status='';"
+>
+<xsl:apply-templates select="*[1]"/></span>
+</xsl:template>
+
+
+<xsl:template match="m:maction[@type='highlight']">
+<span  id="{generate-id()}"
+onmouseover="{generate-id()}.style.backgroundColor='yellow';"
+onmouseout="{generate-id()}.style.backgroundColor='white';"><xsl:apply-templates/></span>
+</xsl:template>
+
+
+
+<xsl:template match="m:mrow" name="mrow">
+<span id="{generate-id()}" class="mrow">
+ <xsl:apply-templates select="*"/>
+</span>
+<xsl:if test="m:mo[@stretch='true' or normalize-space(.)=$opdict[@stretch='true']/@x]">
+<script>
+var mrowH = <xsl:value-of select="generate-id()"/>.offsetHeight;
+<xsl:for-each select="m:mo[@stretch='true' or
+                  normalize-space(.)=$opdict[@stretch='true']/@x]">
+
+<xsl:variable name="o" select="normalize-space(.)"/>
+<xsl:variable name="opdictentry" select="$opdict[@x=$o]"/>
+mrowStretch(<xsl:value-of select="generate-id()"/>,"<xsl:value-of
+select="$opdictentry/@top"/>","<xsl:value-of
+select="$opdictentry/@extend"/>","<xsl:value-of
+select="$opdictentry/@middle"/>","<xsl:value-of
+select="$opdictentry/@bottom"/>");</xsl:for-each>
+</script>
+</xsl:if>
+</xsl:template>
+
+
+<xsl:template match="m:msubsup">
+<span id="{generate-id()}" >
+<xsl:apply-templates select="*[1]"/></span
+><span id="{generate-id()}b" class="msubsup"><xsl:apply-templates
+select="*[2]"/></span
+><span id="{generate-id()}p" class="msubsup"><xsl:apply-templates
+select="*[3]"/></span
+><span id="{generate-id()}x">&#xFEFF;</span>
+<script>
+msubsup("<xsl:value-of select="concat(generate-id(),'&quot;,',generate-id(),',',generate-id(),'x,',generate-id(),'b,',generate-id())"/>p);
+</script>
+</xsl:template>
+
+<xsl:template match="h:table//m:msubsup|m:mtable//m:msubsup|m:msubsup"
+priority="2">
+<span>
+<xsl:apply-templates select="*[1]"/>
+</span
+><sub><xsl:apply-templates
+select="*[2]"/></sub>
+<sup><xsl:apply-templates
+select="*[3]"/></sup>
+</xsl:template>
+
+<xsl:template match="m:msup
+">
+<span id="{generate-id()}">
+<xsl:apply-templates select="*[1]"/>
+</span
+><span id="{generate-id()}p" class="msubsup"><xsl:apply-templates
+select="*[2]"/></span
+><span id="{generate-id()}x">&#xFEFF;</span>
+<script>
+msup("<xsl:value-of select="concat(generate-id(),'&quot;,',generate-id(),'x,',generate-id())"/>p);
+</script>
+</xsl:template>
+
+<xsl:template match="h:table//m:msup|m:mtable//m:msup|m:msup"
+priority="2">
+<span>
+<xsl:apply-templates select="*[1]"/>
+</span
+><sup><xsl:apply-templates
+select="*[2]"/></sup>
+</xsl:template>
+
+<xsl:template match="m:msub
+">
+<span id="{generate-id()}">
+<xsl:apply-templates select="*[1]"/>
+</span
+><span id="{generate-id()}p" class="msubsup"><xsl:apply-templates
+select="*[2]"/></span
+><span id="{generate-id()}x">&#xFEFF;</span>
+<script>
+msub("<xsl:value-of select="concat(generate-id(),'&quot;,',generate-id(),'x,',generate-id())"/>p);
+</script>
+</xsl:template>
+
+<xsl:template match="h:table//m:msub|m:mtable//m:msub|m:msub"
+priority="2">
+<span>
+<xsl:apply-templates select="*[1]"/>
+</span
+><sub><xsl:apply-templates
+select="*[2]"/></sub>
+</xsl:template>
+
+
+<xsl:template match="m:*/text()" name="text">
+<xsl:param name="x" select="normalize-space(.)"/>
+<xsl:variable name="mo"  select="document('')/*/x:x[@x=$x]"/>
+<xsl:choose>
+  <xsl:when test="$mo"><xsl:copy-of select="$mo/node()"/></xsl:when>
+  <xsl:otherwise><xsl:copy-of select="$x"/></xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+
+<xsl:template match="m:msqrt">
+<span class="msqrtx">\&#xFEFF;</span><span class="msqrt">
+<xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<xsl:template match="m:menclose[@notation='radical']">
+<span class="msqrtx">\&#xFEFF;</span><span class="msqrt">
+<xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<xsl:template match="m:menclose[@notation='actuarial']">
+<span class="actuarial">
+<xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<xsl:template match="m:menclose">
+<span class="msqrt">
+<xsl:apply-templates/>
+</span>
+</xsl:template>
+
+<xsl:template match="m:mroot">
+<span class="msqrtx"><sup><xsl:apply-templates select="*[2]"/></sup>\&#xFEFF;</span><span class="msqrt">
+<xsl:apply-templates select="*[1]"/>
+</span>
+</xsl:template>
+
+
+<xsl:template match="m:mfrac">
+<xsl:param name="full" select="not(ancestor::m:mfrac)"/>
+<table  class="mfrac">
+<xsl:if test="$full">
+  <xsl:attribute name="style">font-size: 75% ;</xsl:attribute>
+</xsl:if>
+<xsl:if test="not($full)">
+  <xsl:attribute name="style">font-size: 100% ;</xsl:attribute>
+</xsl:if>
+<tr id="a{generate-id()}" class="mfraca"><td class="mfracaa">
+<xsl:apply-templates select="*[1]"/>
+</td></tr>
+<tr id="b{generate-id()}" class="mfracb"><td>
+<xsl:apply-templates select="*[2]"/>
+</td></tr>
+</table><xsl:if test="$full"><script>
+if ( a<xsl:value-of select="generate-id()"
+       />.offsetHeight >  b<xsl:value-of select="generate-id()"
+         />.offsetHeight ) b<xsl:value-of select="generate-id()
+            "/>.style.setExpression("height",a<xsl:value-of select="generate-id()"/>.offsetHeight );
+else a<xsl:value-of
+select="generate-id()"/>.style.setExpression("height",b<xsl:value-of
+       select="generate-id()"/>.offsetHeight );
+</script></xsl:if>
+</xsl:template>
+
+<xsl:template match="m:padded">
+<span>
+<xsl:attribute name="display">
+</xsl:attribute>
+<xsl:apply-templates/>
+</span>
+</xsl:template>
+
+
+<xsl:template match="m:mspace">
+<span style="padding-left: {@width};"></span>
+</xsl:template>
+
+<xsl:template match="m:mtable">
+<table class="mtable">
+<xsl:apply-templates/>
+</table>
+<script>
+<xsl:variable name="t" select="."/>
+<xsl:for-each select="m:mtr[1]/m:mtd">
+<xsl:variable name="c" select="position()"/>
+<xsl:for-each select="descendant::m:maligngroup">
+<xsl:variable name="g" select="position()"/>
+malign([<xsl:for-each
+select="$t/m:mtr/m:mtd[$c]/descendant::m:maligngroup[$g]">
+ <xsl:value-of select="generate-id()"/>
+ <xsl:if test="position()&lt;last()">,</xsl:if>
+</xsl:for-each>]);</xsl:for-each>
+</xsl:for-each>
+</script>
+</xsl:template>
+
+<xsl:template match="m:mtr">
+<tr>
+<xsl:apply-templates/>
+</tr>
+</xsl:template>
+
+
+<xsl:template match="m:mtd">
+<td>
+<xsl:apply-templates/>
+</td>
+</xsl:template>
+
+<xsl:template match="m:maligngroup">
+<xsl:variable name="g">
+<xsl:choose>
+<xsl:when test="@groupalign">
+</xsl:when>
+<xsl:when test="ancestor::td/@groupalign">
+</xsl:when>
+<xsl:when test="ancestor::tr/@groupalign">
+</xsl:when>
+<xsl:when test="ancestor::table/@groupalign">
+</xsl:when>
+
+<xsl:otherwise>left</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<span id="{generate-id()}">&#xFEFF;</span>
+</xsl:template>
+
+
+</xsl:stylesheet>
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/xhtml.rb ../rdoc-f95-20070309/generators/template/xhtml/xhtml.rb
--- ruby-1.8.5-p12/lib/rdoc/generators/template/xhtml/xhtml.rb	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/template/xhtml/xhtml.rb	2006-11-14 16:09:00.000000000 +0900
@@ -0,0 +1,734 @@
+#
+# = CSS2 RDoc XHTML template (for MathML)
+#
+# This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a
+# bit more of the appearance of the output to cascading stylesheets than the
+# default. It was a copy of html.rb. Then some headers that needed to
+# represent MathML are added.
+#
+# == Authors
+#
+# * Yasuhiro MORIKAWA <morikawa@gfd-dennou.org>
+#
+# Copyright (c) 2006 GFD Dennou Club some rights reserved.
+
+module RDoc
+  module Page
+
+    FONTS = "Verdana,Arial,Helvetica,sans-serif"
+
+STYLE = %{
+body {
+    font-family: Verdana,Arial,Helvetica,sans-serif;
+    font-size:   90%;
+    margin: 0;
+    margin-left: 40px;
+    padding: 0;
+    background: white;
+}
+
+h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
+/* h1 { font-size: 150%; } */
+h2,h3,h4 { margin-top: 1em; }
+
+a { background: #eef; color: #039; text-decoration: none; }
+a:hover { background: #039; color: #eef; }
+
+/* Override the base stylesheet's Anchor inside a table cell */
+td > a {
+  background: transparent;
+  color: #039;
+  text-decoration: none;
+}
+
+/* and inside a section title */
+.section-title > a {
+  background: transparent;
+  color: #eee;
+  text-decoration: none;
+}
+
+/* === Structural elements =================================== */
+
+div#index {
+    margin: 0;
+    margin-left: -40px;
+    padding: 0;
+    font-size: 90%;
+}
+
+
+div#index a {
+    margin-left: 0.7em;
+}
+
+div#index .section-bar {
+   margin-left: 0px;
+   padding-left: 0.7em;
+   background: #ccc;
+   font-size: small;
+}
+
+
+div#classHeader, div#fileHeader {
+    width: auto;
+    color: white;
+    padding: 0.5em 1.5em 0.5em 1.5em;
+    margin: 0;
+    margin-left: -40px;
+    border-bottom: 3px solid #006;
+}
+
+div#classHeader a, div#fileHeader a {
+    background: inherit;
+    color: white;
+}
+
+div#classHeader td, div#fileHeader td {
+    background: inherit;
+    color: white;
+}
+
+
+div#fileHeader {
+    background: #057;
+}
+
+div#classHeader {
+    background: #048;
+}
+
+
+.class-name-in-header {
+  font-size:  180%;
+  font-weight: bold;
+}
+
+
+div#bodyContent {
+    padding: 0 1.5em 0 1.5em;
+}
+
+div#description {
+    padding: 0.5em 1.5em;
+    background: #efefef;
+    border: 1px dotted #999;
+}
+
+div#description h1,h2,h3,h4,h5,h6 {
+    color: #125;;
+    background: transparent;
+}
+
+div#validator-badges {
+    text-align: center;
+}
+div#validator-badges img { border: 0; }
+
+div#copyright {
+    color: #333;
+    background: #efefef;
+    font: 0.75em sans-serif;
+    margin-top: 5em;
+    margin-bottom: 0;
+    padding: 0.5em 2em;
+}
+
+
+/* === Classes =================================== */
+
+table.header-table {
+    color: white;
+    font-size: small;
+}
+
+.type-note {
+    font-size: small;
+    color: #DEDEDE;
+}
+
+.xxsection-bar {
+    background: #eee;
+    color: #333;
+    padding: 3px;
+}
+
+.section-bar {
+   color: #333;
+   border-bottom: 1px solid #999;
+    margin-left: -20px;
+}
+
+
+.section-title {
+    background: #79a;
+    color: #eee;
+    padding: 3px;
+    margin-top: 2em;
+    margin-left: -30px;
+    border: 1px solid #999;
+}
+
+.top-aligned-row {  vertical-align: top }
+.bottom-aligned-row { vertical-align: bottom }
+
+/* --- Context section classes ----------------------- */
+
+.context-row { }
+.context-item-name { font-family: monospace; font-weight: bold; color: black; }
+.context-item-value { font-size: small; color: #448; }
+.context-item-desc { color: #333; padding-left: 2em; }
+
+/* --- Method classes -------------------------- */
+.method-detail {
+    background: #efefef;
+    padding: 0;
+    margin-top: 0.5em;
+    margin-bottom: 1em;
+    border: 1px dotted #ccc;
+}
+.method-heading {
+  color: black;
+  background: #ccc;
+  border-bottom: 1px solid #666;
+  padding: 0.2em 0.5em 0 0.5em;
+}
+.method-signature { color: black; background: inherit; }
+.method-name { font-weight: bold; }
+.method-args { font-style: italic; }
+.method-description { padding: 0 0.5em 0 0.5em; }
+
+/* --- Source code sections -------------------- */
+
+a.source-toggle { font-size: 90%; }
+div.method-source-code {
+    background: #262626;
+    color: #ffdead;
+    margin: 1em;
+    padding: 0.5em;
+    border: 1px dashed #999;
+    overflow: scroll;
+}
+
+div.method-source-code pre {
+    color: #ffdead;
+    overflow: visible;
+}
+
+/* --- Ruby keyword styles --------------------- */
+
+.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
+
+.ruby-constant  { color: #7fffd4; background: transparent; }
+.ruby-keyword { color: #00ffff; background: transparent; }
+.ruby-ivar    { color: #eedd82; background: transparent; }
+.ruby-operator  { color: #00ffee; background: transparent; }
+.ruby-identifier { color: #ffdead; background: transparent; }
+.ruby-node    { color: #ffa07a; background: transparent; }
+.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
+.ruby-regexp  { color: #ffa07a; background: transparent; }
+.ruby-value   { color: #7fffd4; background: transparent; }
+
+/* --- MathML styles --------------------- */
+
+math {
+    font-size:   150%;
+}
+
+}
+
+
+#####################################################################
+### H E A D E R   T E M P L A T E  
+#####################################################################
+
+#
+#== Notation
+#
+# Following "<?xml-stylesheet ... ?>" line is a special setting for
+# Internet Explorer.
+# If you use Mozilla or Firefox, this line is needless.
+# (Anyway, this line doesn't harm these browsers).
+# Due to this line, if you use Safari (Mac OS X, standard browser),
+# XHTML is not displayed correctly. (I think Safari can not handle
+# xml-stylesheet correctly). If you use Safari, do not use --mathml
+# option.
+#
+# Following URLs are references
+#
+# * http://www.kanzaki.com/docs/html/xhtml1.html#compatibility
+# * http://past.openvista.jp/blog/documents/W3C/XHTML_FAQ/
+#
+
+XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
+<?xml-stylesheet type="text/xsl" href="%mathml_xsl_url%"?>
+<!DOCTYPE html
+     PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" 
+     "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
+}
+
+HEADER = XHTML_PREAMBLE + %{
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>%title%</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+  <meta http-equiv="Content-Script-Type" content="text/javascript" />
+  <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
+  <style type="text/css">
+    <!-- Make codeblocks hidden by default -->
+    div.method-source-code { display: none }
+  </style>
+  <script type="text/javascript">
+  // <![CDATA[
+
+  function popupCode( url ) {
+    window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
+  }
+
+  function toggleCode( id ) {
+    if ( document.getElementById )
+      elem = document.getElementById( id );
+    else if ( document.all )
+      elem = eval( "document.all." + id );
+    else
+      return false;
+
+    elemStyle = elem.style;
+    
+    if ( elemStyle.display != "block" ) {
+      elemStyle.display = "block"
+    } else {
+      elemStyle.display = "none"
+    }
+
+    return true;
+  }
+  
+  // ]]>
+  </script>
+
+</head>
+<body>
+}
+
+
+#####################################################################
+### C O N T E X T   C O N T E N T   T E M P L A T E
+#####################################################################
+
+CONTEXT_CONTENT = %{
+}
+
+
+#####################################################################
+### F O O T E R   T E M P L A T E
+#####################################################################
+FOOTER = %{
+<div id="validator-badges">
+  <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
+</div>
+
+</body>
+</html>
+}
+
+
+#####################################################################
+### F I L E   P A G E   H E A D E R   T E M P L A T E
+#####################################################################
+
+FILE_PAGE = %{
+  <div id="fileHeader">
+    <h1>%short_name%</h1>
+    <table class="header-table">
+    <tr class="top-aligned-row">
+      <td><strong>Path:</strong></td>
+      <td>%full_path%
+IF:cvsurl
+        &nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
+ENDIF:cvsurl
+      </td>
+    </tr>
+    <tr class="top-aligned-row">
+      <td><strong>Last Update:</strong></td>
+      <td>%dtm_modified%</td>
+    </tr>
+    </table>
+  </div>
+}
+
+
+#####################################################################
+### C L A S S   P A G E   H E A D E R   T E M P L A T E
+#####################################################################
+
+CLASS_PAGE = %{
+    <div id="classHeader">
+        <table class="header-table">
+        <tr class="top-aligned-row">
+          <td><strong>%classmod%</strong></td>
+          <td class="class-name-in-header">%full_name%</td>
+        </tr>
+        <tr class="top-aligned-row">
+            <td><strong>In:</strong></td>
+            <td>
+START:infiles
+IF:full_path_url
+                <a href="%full_path_url%">
+ENDIF:full_path_url
+                %full_path%
+IF:full_path_url
+                </a>
+ENDIF:full_path_url
+IF:cvsurl
+        &nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
+ENDIF:cvsurl
+        <br />
+END:infiles
+            </td>
+        </tr>
+
+IF:parent
+        <tr class="top-aligned-row">
+            <td><strong>Parent:</strong></td>
+            <td>
+IF:par_url
+                <a href="%par_url%">
+ENDIF:par_url
+                %parent%
+IF:par_url
+               </a>
+ENDIF:par_url
+            </td>
+        </tr>
+ENDIF:parent
+        </table>
+    </div>
+}
+
+
+#####################################################################
+### M E T H O D   L I S T   T E M P L A T E
+#####################################################################
+
+METHOD_LIST = %{
+
+  <div id="contextContent">
+IF:diagram
+    <div id="diagram">
+      %diagram%
+    </div>
+ENDIF:diagram
+
+IF:description
+    <div id="description">
+      %description%
+    </div>
+ENDIF:description
+
+IF:requires
+    <div id="requires-list">
+      <h3 class="section-bar">Required files</h3>
+
+      <div class="name-list">
+START:requires
+      HREF:aref:name:&nbsp;&nbsp;
+END:requires
+      </div>
+    </div>
+ENDIF:requires
+
+IF:toc
+    <div id="contents-list">
+      <h3 class="section-bar">Contents</h3>
+      <ul>
+START:toc
+      <li><a href="#%href%">%secname%</a></li>
+END:toc
+     </ul>
+ENDIF:toc
+   </div>
+
+IF:methods
+    <div id="method-list">
+      <h3 class="section-bar">Methods</h3>
+
+      <div class="name-list">
+START:methods
+      HREF:aref:name:&nbsp;&nbsp;
+END:methods
+      </div>
+    </div>
+ENDIF:methods
+
+  </div>
+
+
+    <!-- if includes -->
+IF:includes
+    <div id="includes">
+      <h3 class="section-bar">Included Modules</h3>
+
+      <div id="includes-list">
+START:includes
+        <span class="include-name">HREF:aref:name:</span>
+END:includes
+      </div>
+    </div>
+ENDIF:includes
+
+START:sections
+    <div id="section">
+IF:sectitle
+      <h2 class="section-title"><a name="%secsequence%">%sectitle%</a></h2>
+IF:seccomment
+      <div class="section-comment">
+        %seccomment%
+      </div>      
+ENDIF:seccomment
+ENDIF:sectitle
+
+IF:classlist
+    <div id="class-list">
+      <h3 class="section-bar">Classes and Modules</h3>
+
+      %classlist%
+    </div>
+ENDIF:classlist
+
+IF:constants
+    <div id="constants-list">
+      <h3 class="section-bar">Constants</h3>
+
+      <div class="name-list">
+        <table summary="Constants">
+START:constants
+        <tr class="top-aligned-row context-row">
+          <td class="context-item-name">%name%</td>
+          <td>=</td>
+          <td class="context-item-value">%value%</td>
+IF:desc
+          <td width="3em">&nbsp;</td>
+          <td class="context-item-desc">%desc%</td>
+ENDIF:desc
+        </tr>
+END:constants
+        </table>
+      </div>
+    </div>
+ENDIF:constants
+
+IF:aliases
+    <div id="aliases-list">
+      <h3 class="section-bar">External Aliases</h3>
+
+      <div class="name-list">
+                        <table summary="aliases">
+START:aliases
+        <tr class="top-aligned-row context-row">
+          <td class="context-item-name">%old_name%</td>
+          <td>-&gt;</td>
+          <td class="context-item-value">%new_name%</td>
+        </tr>
+IF:desc
+      <tr class="top-aligned-row context-row">
+        <td>&nbsp;</td>
+        <td colspan="2" class="context-item-desc">%desc%</td>
+      </tr>
+ENDIF:desc
+END:aliases
+                        </table>
+      </div>
+    </div>
+ENDIF:aliases
+
+
+IF:attributes
+    <div id="attribute-list">
+      <h3 class="section-bar">Attributes</h3>
+
+      <div class="name-list">
+        <table>
+START:attributes
+        <tr class="top-aligned-row context-row">
+          <td class="context-item-name">%name%</td>
+IF:rw
+          <td class="context-item-value">&nbsp;[%rw%]&nbsp;</td>
+ENDIF:rw
+IFNOT:rw
+          <td class="context-item-value">&nbsp;&nbsp;</td>
+ENDIF:rw
+          <td class="context-item-desc">%a_desc%</td>
+        </tr>
+END:attributes
+        </table>
+      </div>
+    </div>
+ENDIF:attributes
+      
+
+
+    <!-- if method_list -->
+IF:method_list
+    <div id="methods">
+START:method_list
+IF:methods
+      <h3 class="section-bar">%type% %category% methods</h3>
+
+START:methods
+      <div id="method-%aref%" class="method-detail">
+        <a name="%aref%"></a>
+
+        <div class="method-heading">
+IF:codeurl
+          <a href="%codeurl%" target="Code" class="method-signature"
+            onclick="popupCode('%codeurl%');return false;">
+ENDIF:codeurl
+IF:sourcecode
+          <a href="#%aref%" class="method-signature">
+ENDIF:sourcecode
+IF:callseq
+          <span class="method-name">%callseq%</span>
+ENDIF:callseq
+IFNOT:callseq
+          <span class="method-name">%name%</span><span class="method-args">%params%</span>
+ENDIF:callseq
+IF:codeurl
+          </a>
+ENDIF:codeurl
+IF:sourcecode
+          </a>
+ENDIF:sourcecode
+        </div>
+      
+        <div class="method-description">
+IF:m_desc
+          %m_desc%
+ENDIF:m_desc
+IF:sourcecode
+          <p><a class="source-toggle" href="#"
+            onclick="toggleCode('%aref%-source');return false;">[Source]</a></p>
+          <div class="method-source-code" id="%aref%-source">
+<pre>
+%sourcecode%
+</pre>
+          </div>
+ENDIF:sourcecode
+        </div>
+      </div>
+
+END:methods
+ENDIF:methods
+END:method_list
+
+    </div>
+ENDIF:method_list
+END:sections
+}
+
+
+#####################################################################
+### B O D Y   T E M P L A T E
+#####################################################################
+
+BODY = HEADER + %{
+
+!INCLUDE!  <!-- banner header -->
+
+  <div id="bodyContent">
+
+} +  METHOD_LIST + %{
+
+  </div>
+
+} + FOOTER
+
+
+
+#####################################################################
+### S O U R C E   C O D E   T E M P L A T E
+#####################################################################
+
+SRC_PAGE = XHTML_PREAMBLE + %{
+<html>
+<head>
+  <title>%title%</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+  <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
+</head>
+<body class="standalone-code">
+  <pre>%code%</pre>
+</body>
+</html>
+}
+
+
+#####################################################################
+### I N D E X   F I L E   T E M P L A T E S
+#####################################################################
+
+FR_INDEX_BODY = %{
+!INCLUDE!
+}
+
+FILE_INDEX = XHTML_PREAMBLE + %{
+<!--
+
+    %list_title%
+
+  -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>%list_title%</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+  <link rel="stylesheet" href="%style_url%" type="text/css" />
+  <base target="docwin" />
+</head>
+<body>
+<div id="index">
+  <h1 class="section-bar">%list_title%</h1>
+  <div id="index-entries">
+START:entries
+    <a href="%href%">%name%</a><br />
+END:entries
+  </div>
+</div>
+</body>
+</html>
+}
+
+CLASS_INDEX = FILE_INDEX
+METHOD_INDEX = FILE_INDEX
+
+INDEX = %{<?xml version="1.0" encoding="%charset%"?>
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+
+<!--
+
+    %title%
+
+  -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>%title%</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+</head>
+<frameset rows="20%, 80%">
+    <frameset cols="25%,35%,45%">
+        <frame src="fr_file_index.html"   title="Files" name="Files" />
+        <frame src="fr_class_index.html"  name="Classes" />
+        <frame src="fr_method_index.html" name="Methods" />
+    </frameset>
+    <frame src="%initial_page%" name="docwin" />
+</frameset>
+</html>
+}
+
+
+
+  end # module Page
+end # class RDoc
+
+require 'rdoc/generators/template/html/one_page_html'
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/generators/xhtml_generator.rb ../rdoc-f95-20070309/generators/xhtml_generator.rb
--- ruby-1.8.5-p12/lib/rdoc/generators/xhtml_generator.rb	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/generators/xhtml_generator.rb	2007-01-10 00:56:45.000000000 +0900
@@ -0,0 +1,469 @@
+# We generate XHTML to display MathML chiefly.
+
+require 'ftools'
+
+require 'rdoc/options'
+require 'rdoc/template'
+require 'rdoc/generators/html_generator'
+require 'rdoc/markup/simple_markup/mathml_wrapper'
+
+module Generators
+
+
+  #
+  #<b>Note that Japanese and English are described in parallel.</b>
+  #
+  #== TeX ¤Î¿ô¼°¤ò MathML ¤ËÊÑ´¹
+  #
+  #TeX ¤Çµ­½Ò¤µ¤ì¤¿¿ô¼°¤ò MathML ¤ËÊÑ´¹¤·¤Þ¤¹.
+  #¥¤¥ó¥é¥¤¥ó¤ÇÉ½¼¨¤·¤¿¤¤¾ì¹ç, TeX ¤Î¿ô¼°¤ò°Ê²¼¤Î¤è¤¦¤Ë $ ... $ ¤Ç¤¯¤¯¤Ã¤Æ
+  #µ­½Ò¤·¤Æ¤¯¤À¤µ¤¤. $ ¤Î
+  #Á°¸å¤Ë¤ÏÈ¾³Ñ¶õÇò¤ò°ìÊ¸»ú°Ê¾åÆþ¤ì¤Æ²¼¤µ¤¤.
+  #(¤Ê¤ª, "$ID: ... $" ¤ä "$LOG: ... $
+  #¤È¤¤¤Ã¤¿, CVS ¤Î¥­¡¼¥ï¡¼¥É¤È¤·¤Æ
+  #ÍÑ¤¤¤é¤ì¤Æ¤¤¤ë½ñ¤­Êý¤Ï¿ô¼°¤È¤·¤Æ°·¤ï¤ì¤Þ¤»¤ó.)
+  #
+  #  ¥¤¥ó¥é¥¤¥ó¤ÇÉ½¼¨¤¹¤ë¿ô¼°¤Ï $ f(x) = x^2 + 1 $ ¤Î¤è¤¦¤Ëµ­½Ò¤·¤Þ¤¹.
+  #  ($ ¤ÎÁ°¸å¤Ë¶õÇò¤ò¤ªËº¤ì¤Ê¤¯).
+  #
+  #¥Ö¥í¥Ã¥¯¤ÇÉ½¼¨¤¹¤ë¾ì¹ç, °Ê²¼¤Î¤è¤¦¤Ë \[ ¤È
+  #\] ¤È¤Ç¤¯¤¯¤Ã¤Æµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤. \[, ¤ÏÉ¬¤º¹ÔÆ¬¤Ëµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤.
+  #
+  #  \[
+  #     \sum_{i=1}^nf_n(x)
+  #  \]
+  #
+  #¿ô¼°¤òÊ£¿ô¹Ô¤ÇÉ½¼¨¤¹¤ë¾ì¹ç¤Ë¤Ï, ²þ¹Ô¤¹¤ëÉôÊ¬¤Ë "\] \[" ¤òµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤.
+  #
+  # \[
+  #     d\zeta/dt + J(\psi,\zeta) = Ra \; dT/dx + \nabla\zeta, \] \[
+  #     dT/dt + J(\psi,T) - d\psi/dx = \nabla T,               \] \[
+  #     \nabla\psi = \zeta
+  # \]
+  #
+  #TeX ¤Î¿ô¼°¤«¤é MathML ÊÑ´¹¤Ë¤Ï
+  #<b>Ruby ÍÑ MathML ¥é¥¤¥Ö¥é¥ê¤Î¥Ð¡¼¥¸¥ç¥ó 0.6b</b> ¤ò»ÈÍÑ¤·¤Æ¤¤¤Þ¤¹.
+  #¤³¤Î¥é¥¤¥Ö¥é¥ê¤Ï{¤Ò¤é¤¯¤Î¹©Ë¼}[http://www.hinet.mydns.jp/~hiraku/]
+  #¤Ë¤Æ¸ø³«¤µ¤ì¤Æ¤¤¤Þ¤¹. »ÈÍÑ¤Ç¤­¤ë TeX ¥³¥Þ¥ó¥É¤Î¾ÜºÙ¤Ë´Ø¤·¤Æ¤â
+  #¤³¤Á¤é¤Î¥µ¥¤¥È¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+  #
+  #ºîÀ®¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤ò±ÜÍ÷¤¹¤ëºÝ¤Ë¤Ï MathML ¤ËÂÐ±þ¤·¤¿
+  #¥Ö¥é¥¦¥¶¤ò»ÈÍÑ¤¹¤ëÉ¬Í×¤¬
+  #¤¢¤ê¤Þ¤¹. {MathML ÆüËÜ¸ì¾ðÊó}[http://washitake.com/MathML/] 
+  #¤ä {MathML Software - Browsers}[http://www.w3.org/Math/Software/mathml_software_cat_browsers.html]
+  #¤Ê¤É¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+  #
+  #
+  #== TeX is converted to MathML
+  #
+  #TeX formula is converted to MathML.
+  #When inline display, TeX formula should be bundled by $ ... $
+  #as follows. 
+  #One or more normal-width blank is necessary before and behind "$".
+  #(The format of CVS keywords, that is "$ID: ... $" or
+  #"$LOG: ... $ etc. is ignored.)
+  #
+  #  Inline formula is $ f(x) = x^2 + 1 $ .
+  #
+  #When block display, TeX formula should be bundled by \[ ... \]
+  #as follows. 
+  #Describe \[ at the head of line.
+  #
+  #  \[
+  #     \sum_{i=1}^nf_n(x)
+  #  \]
+  #
+  #To write equations across multiple lines, describe "\] \["
+  #as follows.
+  #
+  # \[
+  #     d\zeta/dt + J(\psi,\zeta) = Ra \; dT/dx + \nabla\zeta, \] \[
+  #     dT/dt + J(\psi,T) - d\psi/dx = \nabla T,               \] \[
+  #     \nabla\psi = \zeta
+  # \]
+  #
+  #<b>MathML library for Ruby version 0.6b</b> is needed to
+  #convert TeX formula to MathML.
+  #This library is available from {Bottega of Hiraku (JAPANESE only)}[http://www.hinet.mydns.jp/~hiraku/].
+  #See this site about available TeX commands.
+  #
+  #When you browse generated documents, you need to use 
+  #browers that can handle MathML.
+  #See {MathML Software - Browsers}[http://www.w3.org/Math/Software/mathml_software_cat_browsers.html], etc.
+  #
+  #
+  #== \newcommand, \newenvironment ¤Î»ÈÍÑÊýË¡
+  #
+  #\newcommand ¤ä \newenvironment Ì¿Îá¤Ë¤è¤ë¥Þ¥¯¥í¤ò»ÈÍÑ¤¹¤ë¤Ë¤Ï,
+  #Ruby ¤Î¥í¡¼¥É¥Ñ¥¹°Ê²¼¤Ë '<b><tt>mathml/macro</tt></b>' ¥Ç¥£¥ì¥¯¥È¥ê¤ò
+  #ºîÀ®¤·, ¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë¥Þ¥¯¥íÌ¿Îá¤òµ­¤·¤¿¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤¯¤À¤µ¤¤.
+  #¥Õ¥¡¥¤¥ëÌ¾¤ÏÌä¤¤¤Þ¤»¤ó.
+  #
+  #Îã¤¨¤Ð, '<tt>/usr/lib/ruby/1.8</tt>' ¤¬ Ruby ¤Î¥í¡¼¥É¥Ñ¥¹¤Ç¤¢¤ë¾ì¹ç,
+  #'<tt>/usr/lib/ruby/1.8/mathml</tt>' ¤ª¤è¤Ó
+  #'<tt>/usr/lib/ruby/1.8/mathml/macro</tt>' ¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤·,
+  #¤½¤Î¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë, 'D6math.sty' ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤¹
+  #(Á°½Ò¤·¤¿¤è¤¦¤Ë¤³¤Î¥Õ¥¡¥¤¥ëÌ¾¤Ï²¿¤Ç¤â¹½¤¤¤Þ¤»¤ó). ¤½¤Î¥Õ¥¡¥¤¥ëÆâ¤Ë
+  #°Ê²¼¤Î¤è¤¦¤Ê \newcommand Ì¿Îá¤òµ­½Ò¤·¤Æ¤ª¤¯¤³¤È¤Ç, '<b>\DP{}{}</b>'
+  #(ÊÐÈùÊ¬¤ò´ÊÃ±¤Ëµ­½Ò¤¹¤ë¤¿¤á¤Î¥Þ¥¯¥í) ¥³¥Þ¥ó¥É¤¬»ÈÍÑ²ÄÇ½¤Ë¤Ê¤ê¤Þ¤¹.
+  #
+  #    \newcommand{\DP}[2]{\frac{\partial #1}{\partial #2}}
+  #
+  #ÃÏµåÎ®ÂÎÅÅÇ¾¶æ³ÚÉô¤ÇÄó¶¡¤·¤Æ¤¤¤ë {TeX ¥Þ¥¯¥í (ÄÌ¾Î: ÅÅÇ¾¥¹¥¿¥¤¥ë)}[http://www.gfd-dennou.org/library/cc-env/TeXmacro/dennou/SIGEN.htm]
+  #¤Ë´Þ¤Þ¤ì¤ë 'D6math.sty' ¤ò Ruby ÍÑ Mathml ¥é¥¤¥Ö¥é¥ê¤Ç»ÈÍÑ¤Ç¤­¤ë¤è¤¦¤Ë
+  #½¤Àµ¤·¤¿¥Ñ¥Ã¥±¡¼¥¸¤ò libmathml-macro-dennou-ruby[http://www.gfd-dennou.org/library/cc-env/libmathml-macro-dennou-ruby/debian/stable/] ¤È¤·¤Æ
+  #Äó¶¡¤·¤Æ¤¤¤Þ¤¹. ¥µ¥ó¥×¥ë¤È¤·¤ÆÍøÍÑ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤.
+  #
+  #
+  #== Usage of \newcommand and \newenvironment
+  #
+  #If you want to use macros defined by \newcommand and 
+  #\newenvironment commands, make '<b><tt>mathml/macro</tt></b>' directory
+  #under load paths of Ruby, and prepare a file that macro commands are 
+  #described in the directory. A name of the file is free.
+  #
+  #For example, if your load path of Ruby is '<tt>/usr/lib/ruby/1.8</tt>',
+  #you should make '<tt>/usr/lib/ruby/1.8/mathml</tt>' and
+  #'<tt>/usr/lib/ruby/1.8/mathml/macro</tt>' directories,
+  #and make 'D6math.sty' file (already mentioned, the file name is free).
+  #When you describe a following \newcommand command, you can use
+  #'<b>\DP{}{}</b>' (a macro for partial differentiations) command.
+  #
+  #    \newcommand{\DP}[2]{\frac{\partial #1}{\partial #2}}
+  #
+  #As a sample, please use libmathml-macro-dennou-ruby[http://www.gfd-dennou.org/library/cc-env/libmathml-macro-dennou-ruby/debian/stable/].
+  #The original style file is 'D6math.sty' in {TeX macro (Dennou style)}[http://www.gfd-dennou.org/library/cc-env/TeXmacro/dennou/SIGEN.htm].
+  #libmathml-macro-dennou-ruby is a reconfigured package for Mathml library for Ruby.
+  #
+  #
+  class TexParser < HyperlinkHtml
+
+    def initialize(*args)
+      super(*args)
+    end
+
+    def file_location
+      if @context.context.parent
+        class_or_method = @context.context.name
+      end
+      context = @context.context
+      while context.parent
+        context = context.parent
+      end
+      location = context.file_relative_name
+      if class_or_method
+        location += "#"+class_or_method
+      end
+      return location
+    end
+
+    # TEXINLINE pattern $...$ is converted to MathML format
+    # when --mathml option is given.
+    #
+    def handle_special_TEXINLINE(special)
+      text = special.text
+      return text unless Options.instance.mathml
+      raw_text = text.scan(/^.*?\$/).to_s.sub(/\$$/, '')
+      return text if text =~ /^.*?\$[A-Z]\w+:/  # CVS keywords are skipped
+      text.sub!(/^.*?\$/, '')
+      text.sub!(/\$$/, '')
+      tex = MathMLWrapper.new
+      mathml, stat = tex.parse(text)
+      if !stat.zero?
+        $stderr.puts "Warning: in #{file_location}, following TeX commands can not be converted to MathML\n\n",
+        "    #{text}\n\n"
+      end
+      return raw_text + mathml
+    end
+
+    # TEXINLINEDELIMITER pattern "\$" is converted to single dollar "$"
+    # when --mathml option is given.
+    #
+    def handle_special_TEXINLINEDELIMITER(special)
+      text = special.text
+      return text unless Options.instance.mathml
+      return text.gsub(/\\\$/, '$')
+    end
+
+    # TEXBLOCK pattern \[...\] is converted to MathML format
+    # when --mathml option is given.
+    #
+    def handle_special_TEXBLOCK(special)
+      text = special.text
+      return text unless Options.instance.mathml
+      text.sub!(/^\\\[/, '')
+      text.sub!(/\\\]$/, '')
+      tex = MathMLWrapper.new
+      mathml, stat = tex.parse(text, true)
+      if !stat.zero?
+        $stderr.puts "Warning: in #{file_location}, following TeX commands can not be converted to MathML\n\n",
+        "    #{text}\n\n"
+      end
+      return mathml
+    end
+
+  end
+
+  #####################################################################
+  #
+  # Handle common markup tasks for the various Html classes
+  #
+
+  module MarkUp
+
+    # This is almost a copy of the markup method in html_generator.
+    # This method markup $ .... $ and \[ ... \] as tex format.
+
+    def markup(str, remove_para=false)
+      return '' unless str
+      unless defined? @markup
+        @markup = SM::SimpleMarkup.new
+
+        # class names, variable names, or instance variables
+        @markup.add_special(/(
+                               \b\w+(::\w+)*[\.\#]\w+(\([\.\w+\*\/\+\-\=\<\>]+\))?  # A::B.meth(**) (for operator in Fortran95)
+                             | \#\w+(\([.\w\*\/\+\-\=\<\>]+\))?  #  meth(**) (for operator in Fortran95)
+                             | \b([A-Z]\w*(::\w+)*[.\#]\w+)  #    A::B.meth
+                             | \b([A-Z]\w+(::\w+)*)       #    A::B..
+                             | \#\w+[!?=]?                #    #meth_name 
+                             | \b\w+([_\/\.]+\w+)*[!?=]?  #    meth_name
+                             )/x, 
+                            :CROSSREF)
+
+        # file names
+        @markup.add_special(/(
+                               \b(\w[\w\#\/\.\-\~\:]*[!?=]?) # file_name
+                             | \b(\w[\w\#\/\.\-\~\:]*(\([\.\w+\*\/\+\-\=\<\>]+\))?)
+                             )/x, 
+                            :CROSSREFFILE)
+
+        # external hyperlinks
+        @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
+
+        # and links of the form  <text>[<url>]
+        @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)
+#        @markup.add_special(/\b(\S+?\[\S+?\.\S+?\])/, :TIDYLINK)
+
+        if Options.instance.mathml
+          # TeX inline form
+          @markup.add_special(/(\$(.*?)[^\\]\$)/im, :TEXINLINE)
+
+          # TeX inline delimiter
+          @markup.add_special(/(\\\$)/im, :TEXINLINEDELIMITER)
+
+          # TeX block form
+          @markup.add_special(/(\\\[(.+?)\\\])/im, :TEXBLOCK)
+        end
+
+      end
+      unless defined? @html_formatter
+        @html_formatter = TexParser.new(self.path, self)
+      end
+
+      # Convert leading comment markers to spaces, but only
+      # if all non-blank lines have them
+
+      if str =~ /^(?>\s*)[^\#]/
+        content = str
+      else
+        content = str.gsub(/^\s*(#+)/)  { $1.tr('#',' ') }
+      end
+
+      block_exceptions = []
+      if Options.instance.mathml
+        block_exceptions << {
+          'name'     => :texblockform,
+          'start'    => Regexp.new("^\\\\\\["),
+          'end'      => Regexp.new("\\\\\\]$"),
+          'replaces' => []
+        }
+        block_exceptions[0]['replaces'] << {
+          'from' => Regexp.new("\\\\\\\\"),
+          'to'   => "\\\\\\\\\\\\\\\\",
+        }
+      end
+
+      res = @markup.convert(content, @html_formatter, block_exceptions)
+      if remove_para
+        res.sub!(/^<p>/, '')
+        res.sub!(/<\/p>$/, '')
+      end
+      res
+    end
+  end
+
+  class XHTMLGenerator < HTMLGenerator
+
+    def XHTMLGenerator.gen_url(path, target)
+      Generators::HTMLGenerator.gen_url(path, target)
+    end
+    def XHTMLGenerator.for(options)
+      AllReferences::reset
+      HtmlMethod::reset
+
+      if options.all_one_file
+        XHTMLGeneratorInOne.new(options)
+      else
+        XHTMLGenerator.new(options)
+      end
+    end
+
+    def generate(toplevels)
+      super(toplevels)
+      copy_xsls
+    end
+
+    private
+
+    def build_indices
+      @toplevels.each do |toplevel|
+        @files << XHtmlFile.new(toplevel, @options, FILE_DIR)
+      end
+
+      RDoc::TopLevel.all_classes_and_modules.each do |cls|
+        build_class_list(cls, @files[0], CLASS_DIR)
+      end
+    end
+
+    def build_class_list(from, html_file, class_dir)
+      @classes << XHtmlClass.new(from, html_file, class_dir, @options)
+      from.each_classmodule do |mod|
+        build_class_list(mod, html_file, class_dir)
+      end
+    end
+
+    def gen_method_index
+      gen_an_index(XHtmlMethod.all_methods, 'Methods', 
+                   RDoc::Page::METHOD_INDEX,
+                   "fr_method_index.html")
+    end
+
+    def gen_an_index(collection, title, template, filename)
+      template = TemplatePage.new(RDoc::Page::FR_INDEX_BODY, template)
+      res = []
+      collection.sort.each do |f|
+        if f.document_self
+          res << { "href" => f.path, "name" => f.index_name }
+        end
+      end
+
+      values = {
+        "entries"         => res,
+        'list_title'      => CGI.escapeHTML(title),
+        'index_url'       => main_url,
+        'charset'         => @options.charset,
+        'style_url'       => style_url('', @options.css),
+        'mathml_xsl_url'  => style_url('', "mathml.xsl"),
+      }
+
+      File.open(filename, "w") do |f|
+        template.write_html_on(f, values)
+      end
+    end
+
+    def copy_xsls
+      xsl_files = ["mathml.xsl", "pmathmlcss.xsl", "ctop.xsl", "pmathml.xsl"]
+      xsl_dir = "rdoc/generators/template/xhtml"
+      hit = 0
+      $LOAD_PATH.each{ |path|
+        hit = 0
+        xsl_files.each{ |file|
+          hit += 1 if File.exist?(File.join(path, xsl_dir, file))
+        }
+        if hit >= 4
+          xsl_files.each{ |file|
+            File.copy(File.join(path, xsl_dir, file), "./")
+          }
+          break
+        else
+          hit = 0
+        end
+      }
+      if hit < 4
+        $stderr.puts "Couldn't find xsl files (#{xsl_files.join(', ')})\n"
+        exit
+      end
+    end
+
+  end
+
+  class XHTMLGeneratorInOne < HTMLGeneratorInOne
+    def build_class_list(from, html_file, class_dir)
+      @classes << XHtmlClass.new(from, html_file, class_dir, @options)
+      from.each_classmodule do |mod|
+        build_class_list(mod, html_file, class_dir)
+      end
+    end
+
+    def build_indices
+      @toplevels.each do |toplevel|
+        @files << XHtmlFile.new(toplevel, @options, FILE_DIR)
+      end
+
+      RDoc::TopLevel.all_classes_and_modules.each do |cls|
+        build_class_list(cls, @files[0], CLASS_DIR)
+      end
+    end
+
+    def gen_method_index
+      gen_an_index(XHtmlMethod.all_methods, 'Methods')
+    end
+  end
+
+  class XHtmlClass < HtmlClass
+    def value_hash
+      super
+      @values["mathml_xsl_url"] = style_url(path, "mathml.xsl")
+      @values
+    end
+
+    def collect_methods
+      list = @context.method_list
+      unless @options.show_all
+        list = list.find_all {|m| m.visibility == :public || m.visibility == :protected || m.force_documentation }
+      end
+      @methods = list.collect {|m| XHtmlMethod.new(m, self, @options) }
+    end
+
+  end
+
+  class XHtmlFile < HtmlFile
+    def value_hash
+      super
+      @values["mathml_xsl_url"] = style_url(path, "mathml.xsl")
+      @values
+    end
+
+    def collect_methods
+      list = @context.method_list
+      unless @options.show_all
+        list = list.find_all {|m| m.visibility == :public || m.visibility == :protected || m.force_documentation }
+      end
+      @methods = list.collect {|m| XHtmlMethod.new(m, self, @options) }
+    end
+
+  end
+
+  class XHtmlMethod < HtmlMethod
+    def create_source_code_file(code_body)
+      template_regexp = Regexp.new("\\." + @options.template + "$")
+      meth_path = @html_class.path.sub(template_regexp, '.src')
+      File.makedirs(meth_path)
+      file_path = File.join(meth_path, @seq) + '.' + @options.template
+
+      template = TemplatePage.new(RDoc::Page::SRC_PAGE)
+      File.open(file_path, "w") do |f|
+        values = {
+          'title'     => CGI.escapeHTML(index_name),
+          'code'      => code_body,
+          'style_url' => style_url(file_path, @options.css),
+          'mathml_xsl_url'  => style_url('', "mathml.xsl"),
+          'charset'   => @options.charset
+        }
+        template.write_html_on(f, values)
+      end
+      XHTMLGenerator.gen_url(path, file_path)
+    end
+  end
+
+end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/install.rb ../rdoc-f95-20070309/install.rb
--- ruby-1.8.5-p12/lib/rdoc/install.rb	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/install.rb	2006-08-10 17:31:30.000000000 +0900
@@ -0,0 +1,178 @@
+require 'rbconfig'
+require 'find'
+require 'ftools'
+require 'optparse'
+
+include Config
+
+$ruby = CONFIG['ruby_install_name']
+
+##
+# Install a binary file. We patch in on the way through to
+# insert a #! line. If this is a Unix install, we name
+# the command (for example) 'rdoc' and let the shebang line
+# handle running it. Under windows, we add a '.rb' extension
+# and let file associations to their stuff
+#
+
+def installBIN(from, opfile)
+
+  tmp_dir = nil
+  for t in [".", "/tmp", "c:/temp", $bindir]
+    stat = File.stat(t) rescue next
+    if stat.directory? and stat.writable?
+      tmp_dir = t
+      break
+    end
+  end
+
+  fail "Cannot find a temporary directory" unless tmp_dir
+  tmp_file = File.join(tmp_dir, "_tmp")
+    
+    
+  File.open(from) do |ip|
+    File.open(tmp_file, "w") do |op|
+      ruby = File.join($realbindir, $ruby)
+#      op.puts "#!#{ruby}"
+      op.write ip.read
+    end
+  end
+
+  opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
+  File::install(tmp_file, File.join($bindir, opfile), 0755, true)
+  File::unlink(tmp_file)
+end
+
+# Main Program
+
+opt = OptionParser.new
+OPTS = {}
+opt.summary_width = 23
+opt.summary_indent = ''*1
+opt.on('--bindir=VAL',
+       'Directory to which the executable file is installed') \
+      {|v| $bindir = v.to_s}
+opt.on('--binname=VAL',
+       'Name of the executable file (default name is "rdoc")') \
+      {|v| $binname = v.to_s}
+opt.on('--libdir=VAL', 
+       'Directory to which the libraries are installed') \
+       {|v| $libdir = v.to_s}
+opt.on('--help', 'Show help message') {|v| OPTS[:help] = v}
+
+opt.parse!(ARGV)
+
+$bindir = File.expand_path($bindir) if $bindir
+$binname ||= "rdoc"
+$libdir = File.expand_path($libdir) if $libdir
+
+install_opt = ""
+install_opt = "--libdir=#{$libdir}" if $libdir
+
+if $libdir
+  $sitedir = $libdir
+else
+  $sitedir = CONFIG["sitelibdir"]
+  unless $sitedir
+    version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
+    $libdir = File.join(CONFIG["libdir"], "ruby", version)
+    $sitedir = $:.find {|x| x =~ /site_ruby/}
+    if !$sitedir
+      $sitedir = File.join($libdir, "site_ruby")
+    elsif $sitedir !~ Regexp.quote(version)
+      $sitedir = File.join($sitedir, version)
+    end
+  end
+end
+
+$bindir ||= CONFIG["bindir"]
+$realbindir = $bindir
+
+bindir = CONFIG["bindir"]
+
+rdoc_dest = File.join($sitedir, "rdoc")
+dot_dest  = File.join(rdoc_dest, "dot")
+rdoc_generators = File.join(rdoc_dest, "generators")
+rdoc_templates  = File.join(rdoc_generators, "template")
+rdoc_parsers    = File.join(rdoc_dest, "parsers")
+rdoc_ri         = File.join(rdoc_dest, "ri")
+
+# help message
+if ARGV[0] || OPTS[:help]
+  print <<-HELP
+
+  This ruby script installs libraries to \"#{rdoc_dest}\",
+  and executables to \"#{$bindir}/#{$binname}\". (See \"rbconfig.rb\")
+
+  If you want to install other directory, use following options.
+
+  OPTIONS: \n#{opt.to_a[1..-1].join("")}
+
+HELP
+  exit
+end
+
+# make directories
+File::makedirs(rdoc_dest,
+               dot_dest, 
+               rdoc_generators, 
+               rdoc_templates, 
+               rdoc_parsers,
+               rdoc_ri,
+               true)
+
+File::chmod(0755, rdoc_dest)
+
+
+
+# The library files
+files = %w{
+ code_objects.rb
+ generators/*_generator.rb
+ options.rb
+ parsers/parserfactory.rb  
+ parsers/parse_*.rb  
+ template.rb
+ tokenstream.rb
+ diagram.rb
+ rdoc.rb
+ dot/dot.rb
+ ri/ri_*.rb
+}.collect {|f| Dir.glob(f)}.flatten
+
+for template in ["chm", "html", "xml", "xhtml"]
+  File::makedirs(File.join(rdoc_templates, template), true)
+  files.concat Dir.glob("generators/template/#{template}/*.rb")
+  files.concat Dir.glob("generators/template/#{template}/*.xsl")
+end
+
+for aFile in files
+  File::install(aFile, File.join(rdoc_dest, aFile), 0644, true)
+end
+
+# and the executable
+
+installBIN("rdoc", $binname)
+
+# Temporary - we used to install html_generator in the rdoc
+# directory, but now it's moved
+
+File.unlink(File.join(rdoc_dest, "html_generator.rb")) rescue 1;
+
+# and we used to have the templates under html_template
+template = File.join(rdoc_dest, "generators", "html_template")
+File.unlink(File.join(template, "standard.rb")) rescue 1;
+File.unlink(File.join(template, "kilmer.rb")) rescue 1;
+
+# and then they were in template/ ...
+template = File.join(rdoc_dest, "generators", "template")
+File.unlink(File.join(template, "standard.rb")) rescue 1;
+File.unlink(File.join(template, "kilmer.rb")) rescue 1;
+File.unlink(File.join(template, "xml.rb")) rescue 1;
+File.unlink(File.join(template, "rdf.rb")) rescue 1;
+
+
+# 'Markup' will eventually be a separate package, but
+# for now we'll install it automatically 
+
+Dir.chdir("markup") && system("#$ruby install.rb #{install_opt}")
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/markup/.document ../rdoc-f95-20070309/markup/.document
--- ruby-1.8.5-p12/lib/rdoc/markup/.document	2006-08-05 07:00:25.000000000 +0900
+++ ../rdoc-f95-20070309/markup/.document	1970-01-01 09:00:00.000000000 +0900
@@ -1,2 +0,0 @@
-simple_markup
-simple_markup.rb
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/markup/install.rb ../rdoc-f95-20070309/markup/install.rb
--- ruby-1.8.5-p12/lib/rdoc/markup/install.rb	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/markup/install.rb	2005-11-15 19:46:27.000000000 +0900
@@ -0,0 +1,58 @@
+require 'rbconfig'
+require 'find'
+require 'ftools'
+require 'optparse'
+
+include Config
+
+opt = OptionParser.new
+libdir = nil
+opt.on('--libdir=VAL') {|v| libdir  = v}
+opt.parse!(ARGV)
+
+libdir = File.expand_path(libdir) if libdir
+
+if libdir
+  sitedir = libdir
+else
+  sitedir = CONFIG["sitelibdir"]
+  unless sitedir
+    version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
+    libdir = File.join(CONFIG["libdir"], "ruby", version)
+    sitedir = $:.find {|x| x =~ /site_ruby/}
+    if !sitedir
+      sitedir = File.join(libdir, "site_ruby")
+    elsif sitedir !~ Regexp.quote(version)
+      sitedir = File.join(sitedir, version)
+    end
+  end
+end
+
+unless /^\// =~ sitedir.strip
+  sitedir = File.join("..", sitedir)
+end
+
+if !File.directory?(sitedir)
+  $stderr.puts "Cannot find sitedir #{sitedir}"
+  exit 1
+end
+
+rdoc_dest = File.join(sitedir, "rdoc")
+
+dest = File.join(rdoc_dest, "markup")
+
+File.mkpath(dest, true)
+
+Find.find("simple_markup.rb",
+          "simple_markup",
+          "sample",
+          "test") do |fname|
+  if File.directory?(fname)
+    next if fname =~ /CVS/
+    File.mkpath(File.join(dest, fname), true)
+  else
+    next unless fname =~ /\.rb$/
+    next if fname =~ /install.rb$/
+    File.install(fname, File.join(dest, fname), 0444, true)
+  end
+end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/markup/simple_markup/inline.rb ../rdoc-f95-20070309/markup/simple_markup/inline.rb
--- ruby-1.8.5-p12/lib/rdoc/markup/simple_markup/inline.rb	2006-06-27 05:44:13.000000000 +0900
+++ ../rdoc-f95-20070309/markup/simple_markup/inline.rb	2006-11-20 02:56:49.000000000 +0900
@@ -295,7 +295,7 @@
 
       # skip leading invisible text
       i = 0
-      i += 1 while i < str_len and @str[i].zero?
+      i += 1 while i < str_len and @str[i] == "\0"
       start_pos = i
 
       # then scan the string, chunking it on attribute changes
@@ -321,7 +321,7 @@
         # move on, skipping any invisible characters
         begin
           i += 1
-        end while i < str_len and @str[i].zero?
+        end while i < str_len and @str[i] == "\0"
       end
       
       # tidy up trailing text
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/markup/simple_markup/mathml_wrapper.rb ../rdoc-f95-20070309/markup/simple_markup/mathml_wrapper.rb
--- ruby-1.8.5-p12/lib/rdoc/markup/simple_markup/mathml_wrapper.rb	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/markup/simple_markup/mathml_wrapper.rb	2007-01-05 21:02:13.000000000 +0900
@@ -0,0 +1,61 @@
+# This class is MathML module wrapper.
+# If MathML module can not be loaded, methods in this module return
+# raw argument without modification.
+
+class MathMLWrapper
+
+  # Mathml library name
+  MATHML_NAME= "mathml"
+
+  # $LOAD_PATH/MACRO_PATH/* files are parsed as TeX macro
+  MACRO_PATH = "#{MATHML_NAME}/macro"
+
+  @@macro_input_flag = false
+
+  def initialize
+    @load_error_flag = false
+    begin
+      require MATHML_NAME
+      if !@@macro_input_flag
+        @@mathml_formula_macro = MathML::LaTeX::Parser.new
+        @@macro_input_flag = true
+        $LOAD_PATH.each{ |lpath|
+          macro_files = Dir::glob(File.join(lpath, MACRO_PATH, "*"))
+          macro_files.each{ |mfile|
+            if File.file?(mfile)
+              File.open(mfile, "r" ) { |io|
+                io.each{ |line|
+                  begin
+                    @@mathml_formula_macro.macro.parse(line)
+                  rescue MathML::LaTeX::ParseError
+                    macroerrormsg = $!.to_s
+                  rescue
+                    macroerrormsg = $!.to_s
+                  end
+                  if macroerrormsg
+                    $stderr.puts "Warning: in #{mfile}, following TeX macro causes #{macroerrormsg.to_s}\n\n",
+                    "    #{line}\n\n"
+                  end
+                }
+              }
+            end
+          }
+        }
+      end
+    rescue LoadError
+      @load_error_flag = true
+    end
+  end
+  def parse(formula, block=false)
+    return formula if @load_error_flag
+    mathml_formula = @@mathml_formula_macro
+    begin
+      mathml_formula_str = mathml_formula.parse(formula, block).to_s
+    rescue MathML::LaTeX::ParseError
+      return formula, 1
+    rescue
+      return formula, 1
+    end
+    return mathml_formula_str, 0
+  end
+end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/markup/simple_markup.rb ../rdoc-f95-20070309/markup/simple_markup.rb
--- ruby-1.8.5-p12/lib/rdoc/markup/simple_markup.rb	2005-10-25 02:13:42.000000000 +0900
+++ ../rdoc-f95-20070309/markup/simple_markup.rb	2006-08-14 16:13:50.000000000 +0900
@@ -207,6 +207,7 @@
     def initialize
       @am = AttributeManager.new
       @output = nil
+      @block_exceptions = nil
     end
 
     ##
@@ -246,11 +247,12 @@
     # all lines in a paragraph). We then invoke the output formatter
     # using a Visitor to display the result
 
-    def convert(str, op)
+    def convert(str, op, block_exceptions=nil)
       @lines = Lines.new(str.split(/\r?\n/).collect { |aLine| 
                            Line.new(aLine) })
       return "" if @lines.empty?
       @lines.normalize
+      @block_exceptions = block_exceptions
       assign_types_to_lines
       group = group_lines
       # call the output formatter to handle the result
@@ -270,8 +272,9 @@
     #
 
     def assign_types_to_lines(margin = 0, level = 0)
-
+      now_blocking = false
       while line = @lines.next
+
         if line.isBlank?
           line.stamp(Line::BLANK, level)
           next
@@ -291,6 +294,37 @@
 
         active_line = text[margin..-1]
 
+        #
+        # block_exceptions checking
+        #
+        if @block_exceptions
+          if now_blocking
+            line.stamp(Line::PARAGRAPH, level)
+            @block_exceptions.each{ |be|
+              if now_blocking == be['name']
+                be['replaces'].each{ |rep|
+                  line.text.gsub!(rep['from'], rep['to'])
+                }
+              end
+              if now_blocking == be['name'] && line.text =~ be['end']
+                now_blocking = false
+                break
+              end
+            }
+            next
+          else
+            @block_exceptions.each{ |be|
+              if line.text =~ be['start']
+                now_blocking = be['name']
+                line.stamp(Line::PARAGRAPH, level)
+                break
+              end
+            }
+            next if now_blocking
+          end
+        end
+
+
         # Rules (horizontal lines) look like
         #
         #  ---   (three or more hyphens)
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/options.rb ../rdoc-f95-20070309/options.rb
--- ruby-1.8.5-p12/lib/rdoc/options.rb	2004-11-21 00:02:56.000000000 +0900
+++ ../rdoc-f95-20070309/options.rb	2006-11-14 05:27:56.000000000 +0900
@@ -2,6 +2,7 @@
 # object to be queried for option values
 
 require "rdoc/ri/ri_paths"
+require "pathname"
 
 class Options
 
@@ -56,6 +57,9 @@
   # should we draw fileboxes in diagrams
   attr_reader :fileboxes
 
+  # TeX formatted formula is converted to MathML
+  attr_reader :mathml
+
   # include the '#' at the front of hyperlinked instance method names
   attr_reader :show_hash
 
@@ -91,6 +95,12 @@
   # multiple files
   attr_reader :promiscuous
 
+  # scan newer sources than the flag file if true.
+  attr_reader :force_update
+
+  # The case of names of classes or modules or methods are ignored
+  attr_reader :ignore_case
+
   module OptionList
 
     OPTION_LIST = [
@@ -116,6 +126,12 @@
         "option correctly. Dot is available from\n"+
         "http://www.research.att.com/sw/tools/graphviz/" ],
 
+      [ "--mathml",        "-l",   nil,
+        "TeX formatted formula is converted to MathML.\n" +
+        "You need mathml.rb V0.6b to use the --mathml\n" +
+        "option correctly. mathml.rb V0.6b is available from\n"+
+        "http://www.hinet.mydns.jp/~hiraku/data/files/mathml-0.6b.tar.gz" ],
+
       [ "--exclude",       "-x",   "pattern",
         "do not process files or directories matching\n" +
         "pattern. Files given explicitly on the command\n" +
@@ -134,6 +150,10 @@
         "Silently discarded if --diagram is not given\n" +
         "Experimental." ],
 
+      [ "--force-update",  "-U",   nil,
+        "forces to scan all sources even if newer than\n" +
+        "the flag file." ],
+
       [ "--fmt",           "-f",   "format name",
         "set the output formatter (see below)" ],
 
@@ -143,6 +163,10 @@
       [ "--help-output",   "-O",   nil,
         "explain the various output options" ],
 
+      [ "--ignore-case",   "-C",   nil,
+        "The case of names of classes or modules\n" + 
+        "or methods are ignored" ],
+
       [ "--image-format",  "-I",   "gif/png/jpg/jpeg",
         "Sets output image format for diagrams. Can\n" +
         "be png, gif, jpeg, jpg. If this option is\n" +
@@ -320,6 +344,8 @@
         These files will appear in the directory given by the --op
         option (doc/ by default).
 
+      - XHTML output is the same as HTML.
+
       - XML output by default is written to standard output. If a
         --opname option is given, the output will instead be written
         to a file with that name in the output directory.
@@ -354,6 +380,7 @@
       @title = nil
       @template = nil
       @diagram = false
+      @mathml = false
       @fileboxes = false
       @show_hash = false
       @image_format = 'png'
@@ -363,6 +390,8 @@
       @include_line_numbers = false
       @extra_accessor_flags = {}
       @promiscuous = false
+      @force_update = false
+      @ignore_case = false
 
       @css = nil
       @webcvs = nil
@@ -392,17 +421,30 @@
         when "--main"          then @main_page     = arg
         when "--merge"         then @merge         = true
         when "--one-file"      then @all_one_file  = @inline_source = true
-        when "--op"            then @op_dir        = arg
         when "--opname"        then @op_name       = arg
         when "--promiscuous"   then @promiscuous   = true
         when "--quiet"         then @quiet         = true
         when "--show-hash"     then @show_hash     = true
-        when "--style"         then @css           = arg
         when "--template"      then @template      = arg
         when "--title"         then @title         = arg
         when "--webcvs"        then @webcvs        = arg
+        when "--ignore-case"   then @ignore_case   = true
 
-        when "--accessor" 
+        when "--op"
+          if @css && ! (%r{^(https?:/)?/} =~ @css)
+            @css = relative_str(File.join(arg, "."),
+                                relative_str(File.join(@op_dir.split("/").fill(".."), ".."), @css))
+          end
+          @op_dir = arg
+
+        when "--style"
+          if %r{^(https?:/)?/} =~ arg
+            @css = arg
+          else
+            @css = relative_str(File.join(@op_dir, "."), arg)
+          end
+
+        when "--accessor"
           arg.split(/,/).each do |accessor|
             if accessor =~ /^(\w+)(=(.*))?$/
               accessors << $1
@@ -417,6 +459,13 @@
         when "--fileboxes"
           @fileboxes = true if @diagram
 
+        when "--mathml"
+          check_mathml
+          @mathml = true
+          @generator_name = 'xhtml'
+          @template = @generator_name
+          setup_generator(generators)
+
 	when "--fmt"
           @generator_name = arg.downcase
           setup_generator(generators)
@@ -462,6 +511,9 @@
             OptionList.error("Unknown extension .#{old} to -E")
           end
 
+        when "--force-update"
+          @force_update = true
+
 	when "--version"
 	  puts VERSION_STRING
 	  exit
@@ -557,7 +609,49 @@
 #      exit
     end
   end
-  
+
+  # Check that the right version of 'mathml.rb' is available.
+  #
+  def check_mathml
+    not_found = true
+    fpath = ""
+    $LOAD_PATH.each{ |lpath|
+      fpath = File.join(lpath, "mathml.rb")
+      if File.exist?(fpath)
+        not_found = false
+        break
+      end
+    }
+
+    if not_found
+      $stderr.puts <<-"EOT"
+You need the 'mathml.rb' to convert TeX to MathML.
+(see http://www.hinet.mydns.jp/~hiraku/hiki/, but JAPANESE only.
+ You can download 'mathml.rb' directly from 
+ http://www.hinet.mydns.jp/~hiraku/data/files/mathml-0.6b.tar.gz)
+
+EOT
+      exit
+    end
+
+    contents = File.open(fpath, "r") {|f| f.read}
+    num = 1
+    if !(contents =~ /^\s*module\s+MathML/) ||
+        !(contents =~ /^\s*module\s+LaTeX/) ||
+        !(contents =~ /^\s*class\s+Parser/) ||
+        !(contents =~ /^\s*def\s+parse/)
+      $stderr.puts <<-"EOT"
+You need the 'mathml.rb' V0.6b or later to use.
+(see http://www.hinet.mydns.jp/~hiraku/hiki/, but JAPANESE only.
+ You can download 'mathml.rb' directly from 
+ http://www.hinet.mydns.jp/~hiraku/data/files/mathml-0.6b.tar.gz)
+
+EOT
+
+      exit
+    end
+  end
+
   # Check that the files on the command line exist
   
   def check_files
@@ -572,4 +666,19 @@
     exit(1)
   end
 
+  def relative_str(from, target)
+    from_dir     = File.dirname(from)
+    target_dir   = File.dirname(target)
+    target_base  = File.basename(target)
+
+    from_ab_path   = Pathname.new(File.expand_path(from_dir))
+    target_ab_path = Pathname.new(File.expand_path(target_dir))
+
+    target_re_path = target_ab_path.relative_path_from(from_ab_path)
+
+    result = target_re_path.to_s + "/" + target_base
+
+    return result
+  end
+
 end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/parsers/parse_c.rb ../rdoc-f95-20070309/parsers/parse_c.rb
--- ruby-1.8.5-p12/lib/rdoc/parsers/parse_c.rb	2006-08-23 18:23:11.000000000 +0900
+++ ../rdoc-f95-20070309/parsers/parse_c.rb	2006-11-09 02:05:45.000000000 +0900
@@ -167,8 +167,9 @@
 
 
     extend ParserFactory
-    parse_files_matching(/\.(c|cc|cpp|CC)$/)
+    parse_files_matching(/\.(c|cc|cpp|CC|cxx)$/)
 
+    @@enclosure_classes = {}
     @@known_bodies = {}
 
     # prepare to parse a C file
@@ -230,7 +231,7 @@
       parent_name = @known_classes[parent] || parent
 
       if in_module
-        enclosure = @classes[in_module]
+        enclosure = @classes[in_module] || @@enclosure_classes[in_module]
         unless enclosure
           if enclosure = @known_classes[in_module]
             handle_class_module(in_module, (/^rb_m/ =~ in_module ? "module" : "class"),
@@ -258,6 +259,7 @@
 
       find_class_comment(cm.full_name, cm)
       @classes[var_name] = cm
+      @@enclosure_classes[var_name] = cm
       @known_classes[var_name] = cm.full_name
     end
     
@@ -267,7 +269,7 @@
     def find_class_comment(class_name, class_meth)
       comment = nil
       if @body =~ %r{((?>/\*.*?\*/\s+))
-                     (static\s+)?void\s+Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)}xmi
+                     (static\s+)?void\s+Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)\)}xmi
         comment = $1
       elsif @body =~ %r{Document-(class|module):\s#{class_name}\s*?\n((?>.*?\*/))}m
         comment = $2
@@ -554,7 +556,7 @@
     def find_body(meth_name, meth_obj, body, quiet = false)
       case body
       when %r{((?>/\*.*?\*/\s*))(?:static\s+)?VALUE\s+#{meth_name}
-              \s*(\(.*?\)).*?^}xm
+              \s*(\([^)]*\))\s*\{.*?^\}}xm
         comment, params = $1, $2
         body_text = $&
 
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/parsers/parse_f95.rb ../rdoc-f95-20070309/parsers/parse_f95.rb
--- ruby-1.8.5-p12/lib/rdoc/parsers/parse_f95.rb	2006-07-10 10:57:22.000000000 +0900
+++ ../rdoc-f95-20070309/parsers/parse_f95.rb	2007-01-12 18:02:40.000000000 +0900
@@ -1,57 +1,239 @@
-#= parse_f95.rb - Fortran95 Parser
+#= parse_f95.rb - Fortran 90/95 Parser
+#
+#<b>Note that Japanese and English are described in parallel.</b>
+#
+#== ³µÍ×
+#
+#parse_f95.rb ¤Ï³ÈÄ¥»Ò¤¬ f90, F90, f95, F95 ¤Î¥Õ¥¡¥¤¥ë¤ò¹½Ê¸²òÀÏ¤·¤Þ¤¹.
+#¥½¡¼¥¹¥³¡¼¥É¤Ï Fortran 90 ¤â¤·¤¯¤Ï Fortran 95
+#µ¬³Ê¤Ë±è¤Ã¤Æµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤³¤È¤òÁ°Äó¤È¤·¤Æ¤¤¤Þ¤¹.
 #
 #== Overview
 #
-#"parse_f95.rb" parses Fortran95 files with suffixes "f90", "F90", "f95"
-#and "F95". Fortran95 files are expected to be conformed to Fortran95
-#standards.
+#"parse_f95.rb" parses Fortran 90/95 files with suffixes "f90", "F90", "f95"
+#and "F95". These files are expected to conform to Fortran 90 or 
+#Fortran 95 standards.
+#
+#== ½ñË¡
+#
+#´ðËÜÅª¤Ê½ñË¡¤Ï{Ruby ¤Î½ñË¡}[http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html]
+#¤ÈÆ±ÍÍ¤Ç¤¹¤¬, ¥³¥á¥ó¥ÈÉô¤Ï '#' ¤Ç¤Ï¤Ê¤¯ '!' ¤Ç»Ï¤Þ¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤.
 #
 #== Rules
 #
 #Fundamental rules are same as that of the Ruby parser.
 #But comment markers are '!' not '#'.
 #
-#=== Correspondence between RDoc documentation and Fortran95 programs
+#=== RDoc ¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó¤È Fortran 90/95 ¥×¥í¥°¥é¥à¤È¤ÎÂÐ±þ
 #
-#"parse_f95.rb" parses main programs, modules, subroutines, functions,
-#derived-types, public variables, public constants,
-#defined operators and defined assignments.
-#These components are described in items of RDoc documentation, as follows.
+#parse_f95.rb ¤Ï Fortran 90/95 µ¬³Ê¤Ë¤ª¤±¤ë¸À¸ìÍ×ÁÇ, ¤¹¤Ê¤ï¤Á,
+#¼ç¥×¥í¥°¥é¥à, ¥â¥¸¥å¡¼¥ë, ¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô¤ÎÂ¾,
+#PUBLIC Â°À­¤ò»ý¤ÄÊÑ¿ô¤äÄê¿ô, ¤½¤·¤ÆÍøÍÑ¼ÔÄêµÁ±é»»»Ò,
+#ÍøÍÑ¼ÔÄêµÁÂåÆþ¤ò¹½Ê¸²òÀÏ¤·¤Þ¤¹.
+#¤³¤ì¤é¤Î¸À¸ìÍ×ÁÇ¤Ï RDoc ¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó¤Î³Æ¹àÌÜ¤Ë,
+#°Ê²¼¤Î¤è¤¦¤Ëµ­½Ò¤µ¤ì¤Þ¤¹.
+#
+#Files :: ¥Õ¥¡¥¤¥ë (Ruby ¤ÈÆ±ÍÍ¤Ç¤¹)
+#Classes :: ¥â¥¸¥å¡¼¥ë, NAMELIST ÊÑ¿ô·²Ì¾¥ê¥¹¥È
+#Methods :: ¼ç¥×¥í¥°¥é¥à, ¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô, ÊÑ¿ô, Äê¿ô, ¹½Â¤¥Ç¡¼¥¿·¿, 
+#           ÍøÍÑ¼ÔÄêµÁ±é»»»Ò, ÍøÍÑ¼ÔÄêµÁÂåÆþ, NAMELIST ÊÑ¿ô·²Ì¾
+#Required files :: »²¾È¤¹¤ë¥â¥¸¥å¡¼¥ë¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë, 
+#                  µÚ¤Ó»²¾È¤¹¤ë³°Éô´Ø¿ô¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È
+#Included Modules :: »²¾È¤¹¤ë¥â¥¸¥å¡¼¥ë¤Î¥ê¥¹¥È
+#Attributes :: ¹½Â¤¥Ç¡¼¥¿·¿¤Î¥ê¥¹¥È, »²¾È¤·³î¤Ä¤½¤ÎÁ´¤Æ¤Î¸À¸ìÍ×ÁÇ¤ò¸ø³«¤¹¤ë
+#              ¥â¥¸¥å¡¼¥ë¤Î¥ê¥¹¥È
+#
+#'Methods' ¤Ë¥ê¥¹¥È¤µ¤ì¤ë¸À¸ìÍ×ÁÇ (¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô, ¡Ä) ¤Ï,
+#¥â¥¸¥å¡¼¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¤¢¤ì¤Ð, 'Classes' ¤Î¹àÌÜ¤Ëµ­½Ò¤µ¤ì¤Þ¤¹.
+#¼ç¥×¥í¥°¥é¥àÆâ¤ÇÄêµÁ¤µ¤ì¤¿¤ê, ³°Éô¼êÂ³¤­¤È¤·¤ÆÄêµÁ¤µ¤ì¤ë¾ì¹ç¤Ë¤Ï
+#'Files' ¤Î¹àÌÜ¤Ëµ­½Ò¤µ¤ì¤Þ¤¹.
+#¼ç¥×¥í¥°¥é¥à¼«ÂÎ¤â 'Files' ¤Î¹àÌÜ¤Ëµ­½Ò¤µ¤ì¤Þ¤¹.
+#
+#
+#=== Correspondence between RDoc documentation and Fortran 90/95 programs
+#
+#"parse_f95.rb" parses entities of Fortran 90/95 standards, or main programs,
+#modules, subroutines, functions, derived types, public variables,
+#public constants, defined operators and defined assignments.
+#These entities are described in items of RDoc documentation, as follows.
 #
 #Files :: Files (same as Ruby)
-#Classes :: Modules
-#Methods :: Subroutines, functions, variables, constants, derived-types, defined operators, defined assignments
-#Required files :: Files in which imported modules, external subroutines and external functions are defined.
+#Classes :: Modules, list of NAMELIST group names
+#Methods :: Main programs, subroutines, functions, variables, constants, 
+#           derived types, defined operators, defined assignments,
+#           NAMELIST group names
+#Required files :: Files in which imported modules, external subroutines 
+#                  and external functions are defined.
 #Included Modules :: List of imported modules
-#Attributes :: List of derived-types, List of imported modules all of whose components are published again
+#Attributes :: List of derived types, List of imported modules all of 
+#              whose components are published again
 #
-#Components listed in 'Methods' (subroutines, functions, ...)
+#Entities listed in 'Methods' (subroutines, functions, ...)
 #defined in modules are described in the item of 'Classes'.
-#On the other hand, components defined in main programs or
+#On the other hand,  defined in main programs or
 #as external procedures are described in the item of 'Files'.
+#Main programs are described in the item of 'Files', too.
+#
+#=== ¹½Ê¸²òÀÏ¤µ¤ì¤ë¸À¸ìÍ×ÁÇ
 #
-#=== Components parsed by default
+#¼ç¥×¥í¥°¥é¥à¤ª¤è¤Ó, ³°Éô¤«¤é»²¾È¤¬²ÄÇ½¤Ê¥µ¥Ö¥ë¡¼¥Á¥ó,
+#´Ø¿ô, ÊÑ¿ô, Äê¿ô, ¹½Â¤¥Ç¡¼¥¿·¿, ÍøÍÑ¼ÔÄêµÁ±é»»»Ò,
+#ÍøÍÑ¼ÔÄêµÁÂåÆþ, NAMELIST ÊÑ¿ô·²Ì¾¤¬¥É¥­¥å¥á¥ó¥È¤È¤·¤Æ½ÐÎÏ¤µ¤ì¤Þ¤¹. --all
+#¥ª¥×¥·¥ç¥ó¤ò¤Ä¤±¤Æ rdoc ¤ò¼Â¹Ô¤¹¤ë¾ì¹ç¤Ë¤Ï, ³°Éô¤«¤é¤Î»²¾È¤¬µö²Ä¤µ¤ì¤Ê¤¤
+#¸À¸ìÍ×ÁÇ¤â´Þ¤á, Á´¤Æ¤¬½ÐÎÏ¤µ¤ì¤Þ¤¹.
 #
-#By default, documentation on public components (subroutines, functions, 
-#variables, constants, derived-types, defined operators, 
-#defined assignments) are generated. 
-#With "--all" option, documentation on all components
+#
+#=== Parsed entities
+#
+#Documentation on public entities (main programs, 
+#subroutines, functions, variables, constants, 
+#derived types, defined operators, 
+#defined assignments, NAMELIST group names) are generated. 
+#With "--all" option, documentation on all entities
 #are generated (almost same as the Ruby parser).
 #
-#=== Information parsed automatically
+#
+#=== ¹½Ê¸²òÀÏ¤µ¤ì¤ë¾ðÊó
+#
+#°Ê²¼¤Î¾ðÊó¤Ï, ¼«Æ°Åª¤Ë¹½Ê¸²òÀÏ¤µ¤ì¤Æ¥³¥á¥ó¥ÈÉô¤È¤·¤Æ½ÐÎÏ¤µ¤ì¤Þ¤¹.
+#
+#* ¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô¤Î°ú¿ô¤Î¥Ç¡¼¥¿·¿, Â°À­
+#* ¸ø³«ÊÑ¿ô, ¸ø³«Äê¿ô¤Î¥Ç¡¼¥¿·¿, Â°À­
+#* ¹½Â¤¥Ç¡¼¥¿·¿¤ÎÍ×ÁÇ¤Î¥Ç¡¼¥¿·¿, ½é´üÃÍ, Â°À­
+#* NAMELIST Ê¸¤ÇÀë¸À¤µ¤ì¤ëÊÑ¿ôÌ¾ÊÂ¤Ó¤ÎÊÑ¿ô¤Î¥Ç¡¼¥¿·¿, ½é´üÃÍ, Â°À­
+#
+#POINTER, TARGET, ALLOCATE, INTENT, OPTIONAL, SAVE Â°À­¤Ï
+#·¿Àë¸ÀÊ¸¤È¤ÏÊÌ¤Î¹Ô¤Ç»ØÄê¤¹¤ë¤³¤È¤¬²ÄÇ½¤Ç¤¹¤¬,
+#¤½¤ì¤é·¿Àë¸ÀÊ¸¤ÈÊÌ¤Ë»ØÄê¤µ¤ì¤ëÂ°À­¤Ï¹½Ê¸²òÀÏ¤µ¤ì¤Þ¤»¤ó.
+#
+#INTERFACE Ê¸¤Ë¤è¤Ã¤Æ, ¤¢¤ë¼êÂ³¤­¤Ë´Ø¤·¤Æ¸ÄÊÌÌ¾¤È¤ÏÊÌ¤ÎÌ¾Á°¤ò
+#Àë¸À¤¹¤ë¾ì¹ç, ¤½¤ÎÊÌÌ¾¤â 'Methods' ¤ËÄÉ²Ã¤·¤Þ¤¹.
+#
+#»²¾È¤·¤¿ÊÌ¤Î¥â¥¸¥å¡¼¥ëÆâ¤Î¸ø³«¸À¸ìÍ×ÁÇ (¥µ¥Ö¥ë¡¼¥Á¥ó, ´Ø¿ô, ÊÑ¿ô¤Ê¤É)
+#¤ò¼«¿È¤Î¸À¸ìÍ×ÁÇ¤È¤·¤Æ²þ¤á¤Æ¸ø³«¤¹¤ë¾ì¹ç,
+#¤½¤Î¸À¸ìÍ×ÁÇ¤Ï¼«¿È¤Î¸À¸ìÍ×ÁÇ¤È¤·¤Æ¥â¥¸¥å¡¼¥ë¤Î 'Methods' ¥ê¥¹¥È¤ËÄÉ²Ã¤µ¤ì¤Þ¤¹.
+#
+#INTERFACE Ê¸¤Ë¤è¤Ã¤Æ³°ÉôÉû¥×¥í¥°¥é¥à¤ò¼«¿È¤ÎÉû¥×¥í¥°¥é¥à¤È¤·¤Æ¸ø³«¤¹¤ë
+#¾ì¹ç, ¤½¤Î³°ÉôÉû¥×¥í¥°¥é¥à¤â¥â¥¸¥å¡¼¥ë¤Î 'Methods' ¥ê¥¹¥È¤ËÄÉ²Ã¤·¤Þ¤¹.
+#
+#
+#=== Parsed information
 #
 #The following information is automatically parsed.
 #
-#* Types of arguments
-#* Types of variables and constants
-#* Types of variables in the derived types, and initial values
-#* NAMELISTs and types of variables in them, and initial values
+#* Data types and attributes of arguments of functions and subprograms
+#* Data types and attributes of public variables and public constants
+#* Data types, initial values, and attributes of variables in the derived types
+#* Data types, initial values, and attributes of variables declared in NAMELIST statement
+#
+#Only attributes specified in type declaration statements are parsed.
+#Attributes specified in POINTER, TARGET, ALLOCATE, INTENT, OPTIONAL, SAVE
+#statements are not parsed.
 #
-#Aliases by interface statement are described in the item of 'Methods'.
+#Aliases declared by INTERFACE statements are described in the item 
+#of 'Methods'.
 #
-#Components which are imported from other modules and published again 
+#Entities which are imported from other modules and published again 
 #are described in the item of 'Methods'.
 #
+#
+#=== ¥³¥á¥ó¥ÈÉô¤Î½ñ¤­Êý
+#
+#¥³¥á¥ó¥ÈÉô¤Ï°Ê²¼¤Î¤è¤¦¤Ëµ­½Ò¤·¤Þ¤¹. ¸¶Â§Åª¤Ë¹ÔËö¤Þ¤¿¤Ï Fortran
+#¤ÎÊ¸¤Î²¼Éô¤Ë¥³¥á¥ó¥È¤òµ­½Ò¤·¤Þ¤¹. '!' ¤ò´Þ¤Þ¤Ê¤¤¹Ô¤¬¸½¤ì¤¿»þÅÀ¤Ç,
+#¥³¥á¥ó¥ÈÉô¤Ï½ªÎ»¤·¤¿¤È¸«¤Ê¤µ¤ì¤Þ¤¹.
+#Îã¤Ç¤Ï¥³¥á¥ó¥È¹Ô¤â¥¤¥ó¥Ç¥ó¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬, ¥¤¥ó¥Ç¥ó¥È¤¹¤ë¤³¤È¤Ï
+#É¬¿Ü¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó.
+#
+#     ! (¥Õ¥¡¥¤¥ë¤Î¹ÔÆ¬)
+#     !
+#     ! ¥Õ¥¡¥¤¥ë¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È¤Ï¤³¤³¤Ëµ­½Ò¤·¤Þ¤¹
+#     !
+#     !--
+#     ! "!--" ¤È "!++" ¤Ë°Ï¤Þ¤ì¤¿ÉôÊ¬¤Ëµ­½Ò¤µ¤ì¤¿¥³¥á¥ó¥È¤Ï
+#     ! ¥É¥­¥å¥á¥ó¥È¤ËÈ¿±Ç¤µ¤ì¤Þ¤»¤ó.
+#     !++
+#     !
+#     module hogehoge
+#       !
+#       ! ¥â¥¸¥å¡¼¥ë (PROGRAM Ê¸¤Î¾ì¹ç¤Ï¼ç¥×¥í¥°¥é¥à)
+#       ! ¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È¤Ï¤³¤³¤Ëµ­½Ò¤·¤Þ¤¹
+#       !
+#
+#       private
+#
+#       logical            :: a     ! Èó¸ø³«ÊÑ¿ô
+#       real, public       :: b     ! ¸ø³«ÊÑ¿ô
+#       integer, parameter :: c = 0 ! ¸ø³«Äê¿ô
+#
+#       public :: c
+#       public :: MULTI_ARRAY
+#       public :: hoge, foo
+#
+#       type MULTI_ARRAY
+#         !
+#         ! ¹½Â¤¥Ç¡¼¥¿·¿¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È¤Ï¤³¤³¤Ëµ­½Ò¤·¤Þ¤¹.
+#         !
+#         real, pointer :: var(:) =>null() ! ÊÑ¿ô¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È
+#         integer       :: num = 0
+#       end type MULTI_ARRAY
+#
+#     contains
+#
+#       subroutine hoge( in,   &   ! ·ÑÂ³¹ÔÃæ¤Î¥³¥á¥ó¥È¤ÏÌµ»ë¤µ¤ì¤Þ¤¹.
+#         &              out )
+#         !
+#         ! ¥µ¥Ö¥ë¡¼¥Á¥ó¤ä´Ø¿ô¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È¤Ï¤³¤³¤Ëµ­½Ò¤·¤Þ¤¹
+#         !
+#         character(*),intent(in):: in ! °ú¿ô¤ËÂÐ¤¹¤ë¥³¥á¥ó¥È
+#         character(*),intent(out),allocatable,target  :: in
+#                                       ! ²¼¤Î¹Ô¤Ëµ­½Ò¤¹¤ë
+#                                       ! ¤³¤È¤â²ÄÇ½¤Ç¤¹.
+#
+#         character(32) :: file ! NAMELIST Ê¸¤ÎÊÑ¿ô¤È¤·¤Æ¹½Ê¸²òÀÏ¤µ¤ì¤Þ¤¹
+#         integer       :: id
+#
+#         namelist /varinfo_nml/ file, id
+#                 !
+#                 ! NAMELIST Ê¸¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¤³¤³¤Ëµ­½Ò¤·¤Þ¤¹. ÊÑ¿ô¤Ë
+#                 ! ´Ø¤¹¤ë¾ðÊó¤Ï, ÊÑ¿ôÄêµÁÉôÊ¬¤ò»²¾È¤·¤Þ¤¹.
+#                 !
+#
+#       ....
+#
+#       end subroutine hoge
+#
+#       integer function foo( in )
+#         !
+#         ! ¤³¤ÎÉôÊ¬¤Ï¥³¥á¥ó¥È¤È¤·¤Æ¼±ÊÌ¤µ¤ì¤Þ¤¹.
+#
+#         ! '!' ¤Î´Ö³Ö¤ò¶õ¤±¤ë¤È°Ê¹ß¤Ï¥³¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤»¤ó.
+#         ! ¤Ä¤Þ¤ê¤³¤Î 2 ¹Ô¤Ï¥³¥á¥ó¥È¤È¤·¤Æ°·¤ï¤ì¤Þ¤»¤ó.
+#         !
+#         integer, intent(in):: inA ! ¥³¥á¥ó¥È¤È¤·¤Æ¼±ÊÌ¤µ¤ì¤Þ¤¹
+#
+#                                   ! ¥³¥á¥ó¥È¤È¤·¤Æ¼±ÊÌ¤µ¤ì¤Þ¤»¤ó.
+#
+#       end function foo
+#
+#       subroutine hide( in,   &
+#         &              out )      !:nodoc:
+#         !
+#         ! ¾åµ­¤Î¤è¤¦¤Ë, SUBROUTINE Ê¸¤ÎËöÈø¤Ë
+#         ! '!:nodoc:' ¤Èµ­½Ò¤¹¤ë¤³¤È¤Ç, ¤½¤Î¥µ¥Ö¥ë¡¼¥Á¥ó
+#         ! ¤Ï¥É¥­¥å¥á¥ó¥È¤ËÈ¿±Ç¤µ¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹.
+#         ! ¤³¤Î»ØÄê¤Ï, ¼ç¥×¥í¥°¥é¥à, ¥â¥¸¥å¡¼¥ë, ¥µ¥Ö¥ë¡¼¥Á¥ó, 
+#         ! ´Ø¿ô, ÊÑ¿ô, Äê¿ô, ¹½Â¤¥Ç¡¼¥¿·¿, ÍøÍÑ¼ÔÄêµÁ±é»»»Ò, 
+#         ! ÍøÍÑ¼ÔÄêµÁÂåÆþ, »²¾È¤¹¤ë¥â¥¸¥å¡¼¥ë¤Î¥ê¥¹¥È (USE Ê¸) 
+#         ! ¤ËÂÐ¤·¤ÆÍ­¸ú¤Ç¤¹.
+#         !
+#
+#       ....
+#
+#       end subroutine hide
+#
+#     end module hogehoge
+#
 #=== Format of comment blocks
 #
 #Comment blocks should be written as follows.
@@ -70,7 +252,7 @@
 #     !
 #     module hogehoge
 #       !
-#       ! Comment blocks for the modules (or the programs).
+#       ! Comment blocks for the modules (or the main programs).
 #       !
 #
 #       private
@@ -85,7 +267,7 @@
 #
 #       type MULTI_ARRAY
 #         !
-#         ! Comment blocks for the derived-types.
+#         ! Comment blocks for the derived types.
 #         !
 #         real, pointer :: var(:) =>null() ! Comments block for the variables.
 #         integer       :: num = 0
@@ -108,7 +290,7 @@
 #
 #         namelist /varinfo_nml/ file, id
 #                 !
-#                 ! Comment blocks for the NAMELISTs.
+#                 ! Comment blocks for the NAMELIST statement.
 #                 ! Information about variables are described above.
 #                 !
 #
@@ -131,12 +313,12 @@
 #       subroutine hide( in,   &
 #         &              out )      !:nodoc:
 #         !
-#         ! If "!:nodoc:" is described at end-of-line in subroutine
+#         ! If '!:nodoc:' is described at end-of-line in SUBROUTINE
 #         ! statement as above, the subroutine is ignored.
-#         ! This assignment can be used to modules, subroutines,
-#         ! functions, variables, constants, derived-types,
+#         ! This assignment can be used to main programs, modules,
+#         ! subroutines, functions, variables, constants, derived types,
 #         ! defined operators, defined assignments,
-#         ! list of imported modules ("use" statement).
+#         ! list of imported modules (USE statement).
 #         !
 #
 #       ....
@@ -145,7 +327,190 @@
 #
 #     end module hogehoge
 #
-
+#
+#=== ÍøÍÑ¼ÔÄêµÁ±é»»»Ò, ÍøÍÑ¼ÔÄêµÁÂåÆþ¤Î¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹
+#
+#ÍøÍÑ¼ÔÄêµÁ±é»»»Ò¤ÈÍøÍÑ¼ÔÄêµÁÂåÆþ (operator(*), assignment(=) Åù)
+#¤ò¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹¤Ë¤è¤Ã¤Æ¥Ï¥¤¥Ñ¡¼¥ê¥ó¥¯²½¤¹¤ë¾ì¹ç¤Ë¤Ï,
+#'operator' ¤ä 'assignment' ¤ÎÀèÆ¬¤Ë '<b>#</b>' ¤òÉÕµ­¤·¤Æ²¼¤µ¤¤.
+#¶ñÂÎÅª¤Ë¤Ï,
+#
+#     #operator(*)
+#     #assignment(=)
+#
+#¤Î¤è¤¦¤Ëµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤. Â¾¤Î¥â¥¸¥å¡¼¥ëÆâ¤ÎÍøÍÑ¼ÔÄêµÁ±é»»»Ò¤ä
+#ÍøÍÑ¼ÔÄêµÁÂåÆþ¤Î¥¯¥í¥¹¥ê¥Õ¥¡¥ì¥ó¥¹¤Ë´Ø¤·¤Æ¤Ï, ½¾Íè¤ÈÆ±ÍÍ¤Ë
+#
+#     module#operator(*)
+#     module#assignment(=)
+#
+#¤Î¤è¤¦¤Ëµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤.
+#
+#=== Cross-reference of defined operators and defined assignments
+#
+#If you use cross-reference about defined operators and defined
+#assignments (for example, operator(*), assignment(=), etc.),
+#add '<b>#</b>' at the head of 'operator' or 'assignment'.
+#Practically, describe as follows.
+#
+#     #operator(*)
+#     #assignment(=)
+#
+#About defined operators and defined assignments about other modules,
+#describe as in the past.
+#
+#     module#operator(*)
+#     module#assignment(=)
+#
+#
+#
+#=== ¸À¸ìÍ×ÁÇ¤ÎÉ½¼¨½ç½ø
+#
+#'Files' ¤ä 'Classes' ¤Î¹àÌÜ¤ËÉ½¼¨¤µ¤ì¤ë¸À¸ìÍ×ÁÇ¤Ï, ´ðËÜÅª¤Ë
+#ASCII ¥³¡¼¥É½ç¤ËÊÂ¤Ó¤Þ¤¹ (A-Z, a-z ¤Î½çÈÖ).
+#INTERFACE Ê¸¤ÎÍøÍÑ¤Ë¤è¤Ã¤ÆÆ±°ì¤Î 'Files' ¤Þ¤¿¤Ï 'Classes' ¤Ë
+#Æ±Ì¾¤Î°Û¤Ê¤ë¼êÂ³¤­¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ï, °ú¿ô¥­¡¼¥ï¡¼¥É¤ª¤è¤Ó
+#¥³¥á¥ó¥ÈÉô¤ÎÆâÍÆ¤Ë¤è¤Ã¤Æ½ç½ø¤¬·è¤Þ¤ê¤Þ¤¹.
+#
+#¤â¤·¤âÉ½¼¨¤Î½ç½ø¤òÌÀ¼¨Åª¤Ë»ØÄê¤·¤¿¤¤¾ì¹ç¤Ï, ¸À¸ìÍ×ÁÇ¤ÎÄêµÁÊ¸¤Î
+#¹ÔËö¤Ë '<b><tt>!:doc-priority 100:</tt></b>'
+#¤Î¤è¤¦¤Ê¥³¥á¥ó¥È¤òµ­½Ò¤·¤Æ¤¯¤À¤µ¤¤.
+#100 ¤ÎÉôÊ¬¤ÏÍ¥Àè½ç°Ì¤òÉ½¤¹¿ôÃÍ¤Ç¤¹. Í¥Àè½ç°Ì¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹.
+#(¥Ç¥Õ¥©¥ë¥È¤Ï 50 ¤ËÀßÄê¤µ¤ì¤Æ¤¤¤Þ¤¹).
+#
+#0 °Ê²¼¤ÎÀ°¿ô         :: ¸À¸ìÍ×ÁÇ¤ò¾åÉô¤ËÉ½¼¨¤·¤Þ¤¹. ÃÍ¤¬¾®¤µ¤¤¤â¤Î¤Û¤ÉÍ¥ÀèÅª¤Ë¾åÉô¤ËÉ½¼¨¤µ¤ì¤Þ¤¹.
+#1 °Ê¾å 99 °Ê²¼¤ÎÀ°¿ô :: Æ±Ì¾¤Î¸À¸ìÍ×ÁÇ¤ÎÃæ¤Ç¤ÎÍ¥Àè½ç°Ì¤Ç¤¹. ÃÍ¤¬¾®¤µ¤¤¤â¤Î¤Û¤É¾åÉô¤ËÉ½¼¨¤µ¤ì¤Þ¤¹.
+#100 °Ê¾å¤ÎÀ°¿ô       :: ¸À¸ìÍ×ÁÇ¤ò²¼Éô¤ËÉ½¼¨¤·¤Þ¤¹. ÃÍ¤¬Âç¤­¤¤¤â¤Î¤Û¤É²¼Éô¤ËÉ½¼¨¤µ¤ì¤Þ¤¹.
+#
+#°Ê²¼¤ËÎã¤ò¼¨¤·¤Þ¤¹. Îã¤Î¤è¤¦¤Ë 'doc-priority' ¤¬»ÈÍÑ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Î
+#É½¼¨½ç½ø¤Ï
+#
+#* top_display, generic_name_procedures (¼ÂÂÎ: bottom_display),
+#  generic_name_procedures (¼ÂÂÎ: top_display), bottom_display
+#
+#¤È¤Ê¤ê¤Þ¤¹. °ìÊý¤Ç, ¤â¤·¤â 'doc-priority' ¤¬»ÈÍÑ¤µ¤ì¤Æ¤¤¤Ê¤¤
+#¾ì¹ç¤Ë¤ÏÉ½¼¨½ç½ø¤Ï
+#
+#* bottom_display, generic_name_procedures (¼ÂÂÎ: top_display),
+#  generic_name_procedures (¼ÂÂÎ: bottom_display), top_display
+#
+#¤È¤Ê¤ê¤Þ¤¹. ¾Ü¤·¤¤ÍýÍ³¤Ï²¼µ­¤ÎÎã¤ÎÃæ¤Ëµ­½Ò¤µ¤ì¤ë¥³¥á¥ó¥È¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤.
+#
+#   module sample1
+#              :
+#     interface generic_name_procedures
+#       !
+#       ! ¤³¤Î INTERFACE Ê¸¤Ï top_display ¤È bottom_display ¤È¤òÁí¾ÎÌ¾¾Î
+#       ! generic_name_procedures ¤È¤·¤ÆºÆÄêµÁ¤·¤Æ¤¤¤Þ¤¹.
+#       !
+#       ! RDoc ¤Ë¤ª¤Þ¤«¤»¤Ë¤¹¤ë¾ì¹ç, ¤³¤Î 2 ¤Ä¤Î
+#       ! generic_name_procedures ¤ÎÉ½¼¨½ç½ø¤Ï¤Þ¤º°ú¿ô¥­¡¼¥ï¡¼¥É
+#       ! ¤Ë¤è¤Ã¤Æ·è¤Þ¤ê¤Þ¤¹. ½¾¤Ã¤Æ, °ú¿ô¥­¡¼¥ï¡¼¥É¤¬ 'c' ¤Ç
+#       ! »Ï¤Þ¤ë top_display ¤¬¼ÂÂÎ¤Ç¤¢¤ë generic_name_procedures
+#       ! ¤¬¾å¤ËÉ½¼¨¤µ¤ì¤Þ¤¹. (¼ÂÂÎ¤Î¼êÂ³Ì¾¤Ï¹ÍÎ¸¤µ¤ì¤Þ¤»¤ó).
+#       !
+#       ! ²¼µ­¤Ç¤Ï 'doc-priority' ¤¬»ØÄê¤·¤Æ¤¢¤ë¤¿¤á, ¿ôÃÍ¤Î¾®¤µ¤¤
+#       ! bottom_display ¤¬¼ÂÂÎ¤Ç¤¢¤ë generic_name_procedures ¤ÎÊý¤¬
+#       ! ¾å¤ËÉ½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹.
+#       !
+#       module procedure bottom_display !:doc-priority 40:
+#       module procedure top_display    !:doc-priority 60:
+#     end interface
+#              :
+#   contains
+#              :
+#     subroutine top_display(char) !:doc-priority -10:
+#       !
+#       ! ËÜÍè¤Ï²¼µ­¤Î bottom_display ¤è¤ê¤â²¼¤ËÉ½¼¨¤µ¤ì¤Þ¤¹¤¬,
+#       ! Í¥ÀèÅÙ¤ò -10 ¤ËÀßÄê¤·¤Æ¤¤¤ë¤¿¤á, ¾åÉô¤ËÉ½¼¨¤µ¤ì¤Þ¤¹.
+#       !
+#     ....
+#     end subroutine top_display
+#
+#     subroutine bottom_display(real) !:doc-priority 110:
+#       !
+#       ! ËÜÍè¤Ï¾åµ­¤Î top_display ¤è¤ê¤â¾å¤ËÉ½¼¨¤µ¤ì¤Þ¤¹¤¬,
+#       ! Í¥ÀèÅÙ¤ò 110 ¤ËÀßÄê¤·¤Æ¤¤¤ë¤¿¤á, ²¼Éô¤ËÉ½¼¨¤µ¤ì¤Þ¤¹.
+#       !
+#     ....
+#     end subroutine bottom_display
+#              :
+#   end module sample1
+#
+#
+#=== The sequence of displayed entities
+#
+#Entities listed in 'Files' and 'Classes' are displayed in
+#ASCII order usually (in particular, A...Z, a...z, ...).
+#Entities with the same names declared by INTERFACE statements
+#are ordered by argument keywords or contents in comment blocks.
+#
+#If you want to order entities manually, describe a comment
+#like '<b><tt>!:doc-priority 100:</tt></b>' at end-of-line in
+#the statement of the entities.
+#`100` represents priority. Priority level is specified as follows.
+#(Default number is '50').
+#
+#Integer of 0 or less   :: Entities are displayed at the head of the document. Entities with more small number go upstairs.
+#Integer from 1 to 99   :: Priority within entities with the same names. Entities with more small number go upstairs.
+#Integer of 100 or more :: Entities are displayed at the foot of the document. Entities with more large number go downstairs.
+#
+#An example is showed as follows. When 'doc-priority' is written as
+#a following example, a sequence of displayed entities is
+# 
+#* top_display, generic_name_procedures (an original entity: bottom_display),
+#  generic_name_procedures (an original entity: top_display), bottom_display.
+#
+#On the other hand, if 'doc-priority' is not written, the sequence become
+#
+#* bottom_display, generic_name_procedures (an original entity: top_display),
+#  generic_name_procedures (an original entity: bottom_display), top_display.
+#
+#The details are given in the following example.
+#
+#   module sample1
+#              :
+#     interface generic_name_procedures
+#       !
+#       ! This INTERFACE statement redefines "top_display" and 
+#       ! "bottom_display" as an generic name "generic_name_procedures".
+#       !
+#       ! RDoc orders two "generic_name_procedures" by argument keywords
+#       ! essentially. Therefore "generic_name_procedures" that 
+#       ! the original entity is "top_display" is displayed above because
+#       ! an argument keyword of the procedure begins 'c'.
+#       ! (The name of the original entity is ignored).
+#       !
+#       ! In the following example, because 'doc-priority' is written, 
+#       ! "generic_name_procedures" that 
+#       ! the original entity is "bottom_display" is displayed above because 
+#       ! the numerical value is smaller.
+#       !
+#       module procedure bottom_display !:doc-priority 40:
+#       module procedure top_display    !:doc-priority 60:
+#     end interface
+#              :
+#   contains
+#              :
+#     subroutine top_display(arg) !:doc-priority -10:
+#       !
+#       ! In a normal situation, this entity is displayed below 'bottom_display'. 
+#       ! But because priority is -10, this entity is displayed above.
+#       !
+#     ....
+#     end subroutine top_display
+#
+#     subroutine bottom_display(arg) !:doc-priority 110:
+#       !
+#       ! In a normal situation, this entity is displayed above 'top_display'.
+#       ! But because priority is 110, this entity is displayed below.
+#       !
+#     ....
+#     end subroutine bottom_display
+#              :
+#   end module sample1
+#
+#
 
 require "rdoc/code_objects"
 
@@ -171,8 +536,348 @@
 
   end
 
-  # See rdoc/parsers/parse_f95.rb
 
+  # Extend Context class for parse_f95.rb
+  # Original class is defined in code_objects.rb.
+  # * The case of names of classes or modules or methods are ignored
+  # * Includes modules can be refered.
+
+  class Context
+
+    def add_method(a_method)
+      if !(a_method.visibility == :public)      &&
+           !(a_method.visibility == :private)   &&
+           !(a_method.visibility == :protected)
+        a_method.visibility = @visibility
+      end
+      puts "Adding #{a_method.visibility} method #{a_method.name} to #@name" if $DEBUG
+      add_to(@method_list, a_method)
+    end
+
+    def add_alias(an_alias, ignore_case=nil)
+      meth = find_instance_method_named(an_alias.old_name, ignore_case)
+      if meth
+        new_meth = AnyMethod.new(an_alias.text, an_alias.new_name)
+        new_meth.is_alias_for = meth
+        new_meth.singleton    = meth.singleton
+        new_meth.params       = meth.params
+        new_meth.comment = "Alias for \##{meth.name}"
+        meth.add_alias(new_meth)
+        add_method(new_meth)
+      else
+        add_to(@aliases, an_alias)
+      end
+    end
+
+    # Find a named module
+    def find_module_named(name, ignore_case=nil)
+      res = nil
+      if !ignore_case
+        return self if self.name == name
+      else
+        return self if self.name.upcase == name.upcase
+      end
+      if !ignore_case
+        res = @modules[name] || @classes[name]
+      else
+        @modules.each{ |n, v|
+          if n.upcase == name.upcase
+            res = v ; break
+          end
+        }
+        @classes.each{ |n, v|
+          if n.upcase == name.upcase
+            res = v ; break
+          end
+        } if !res
+      end
+      return res if res
+      find_enclosing_module_named(name, ignore_case)
+    end
+
+    # find a module at a higher scope
+    def find_enclosing_module_named(name, ignore_case=nil)
+      parent && parent.find_module_named(name, ignore_case)
+    end
+
+    def each_includes
+      @includes.each {|i| yield i}
+    end
+
+    # Look up the given filename.
+    def find_file(file, method=nil, ignore_case=nil)
+      find_file_named(file, method, ignore_case)
+    end
+
+    # Look up the given symbol. If method is non-nil, then
+    # we assume the symbol references a module that
+    # contains that method
+    def find_symbol(symbol, method=nil, ignore_case=nil)
+      result = nil
+      case symbol
+      when /^::(.*)/
+        result = toplevel.find_symbol($1, nil, ignore_case)
+      when /::/
+        modules = symbol.split(/::/)
+        unless modules.empty?
+          module_name = modules.shift
+          result = find_module_named(module_name, ignore_case)
+          if result
+            modules.each do |module_name|
+              result = result.find_module_named(module_name, ignore_case)
+              break unless result
+            end
+          end
+        end
+      else
+        # if a method is specified, then we're definitely looking for
+        # a module, otherwise it could be any symbol
+        if method
+          result = find_module_named(symbol, ignore_case)
+        else
+          result = find_local_symbol(symbol, ignore_case)
+          if result.nil?
+            if symbol =~ /^[A-Z]/ ||
+                       symbol =~ /^[A-Za-z]/ && ignore_case
+              result = parent
+              while result && result.name != symbol
+                result = result.parent
+              end
+            end
+          end
+        end
+      end
+      if result && method
+        if !result.respond_to?(:find_local_symbol)
+          p result.name
+          p method
+          fail
+        end
+        result = result.find_local_symbol(method, ignore_case)
+      end
+      result
+    end
+
+    def find_local_symbol(symbol, ignore_case=nil)
+      res = find_method_named(symbol, ignore_case) ||
+            find_constant_named(symbol, ignore_case) ||
+            find_attribute_named(symbol, ignore_case) ||
+            find_module_named(symbol, ignore_case) 
+    end
+
+    def include_requires?(name, ignore_case=nil)
+      if self.kind_of? TopLevel
+        self.requires.each{|r|
+          if r.name == name ||
+              r.name.upcase == name.upcase && ignore_case
+            return true
+          end
+        }
+        return false
+      else
+        parent.include_requires?(name)
+      end
+    end
+
+    def include_includes?(name, ignore_case=nil)
+      self.includes.each{|i|
+        if i.name == name ||
+            i.name.upcase == name.upcase && ignore_case
+          return true
+        end
+      }
+      return false
+    end
+
+    # Find a named method, or return nil
+    def find_method_named(name, ignore_case=nil)
+      if !ignore_case
+        @method_list.find {|meth| meth.name == name}
+      else
+        @method_list.find {|meth| meth.name.upcase == name.upcase}
+      end
+    end
+
+    # Find a named instance method, or return nil
+    def find_instance_method_named(name, ignore_case=nil)
+      if !ignore_case
+        @method_list.find {|meth| meth.name == name && !meth.singleton}
+      else
+        @method_list.find {|meth| 
+          meth.name.upcase == name.upcase && !meth.singleton
+        } 
+      end
+    end
+
+    # Find a named constant, or return nil
+    def find_constant_named(name, ignore_case=nil)
+      if !ignore_case
+        @constants.find {|m| m.name == name}
+      else
+        @constants.find {|m| m.name.upcase == name.upcase}
+      end
+    end
+
+    # Find a named attribute, or return nil
+    def find_attribute_named(name, ignore_case=nil)
+      if !ignore_case
+        @attributes.find {|m| m.name == name}
+      else
+        @attributes.find {|m| m.name.upcase == name.upcase}
+      end
+    end
+
+  end
+
+
+
+  # Extend TopLevel class for parse_f95.rb.
+  # Original class is defined in code_objects.rb.
+  # * Cross-reference of files are enabled
+  # * The case of names of classes or modules or methods are ignored
+
+  class TopLevel
+    @@all_files   = {}
+
+    def TopLevel::reset
+      @@all_classes = {}
+      @@all_modules = {}
+      @@all_files   = {}
+    end
+
+    def initialize(file_name)
+      super()
+      @name = "TopLevel"
+      @file_relative_name = file_name
+      @file_absolute_name = file_name
+      @file_stat          = File.stat(file_name)
+      @diagram            = nil
+      @@all_files[file_name] = self
+    end
+
+    def TopLevel.all_files
+      @@all_files
+    end
+
+    def find_local_symbol(symbol, ignore_case=nil)
+      find_class_or_module_named(symbol, ignore_case) || super
+    end
+
+    def find_class_or_module_named(symbol, ignore_case=nil)
+      if !ignore_case
+        @@all_classes.each_value {|c| return c if c.name == symbol}
+        @@all_modules.each_value {|m| return m if m.name == symbol}
+      else
+        @@all_classes.each_value {|c| return c if c.name.upcase == symbol.upcase}
+        @@all_modules.each_value {|m| return m if m.name.upcase == symbol.upcase}
+      end
+      nil
+    end
+
+    # Find a named module
+    def find_module_named(name, ignore_case=nil)
+      find_class_or_module_named(name, ignore_case) || find_enclosing_module_named(name, ignore_case)
+    end
+
+    # Find a named file
+    def find_file_named(name, method=nil, ignore_case=nil)
+      return nil unless name
+      result = nil
+      @@all_files.each{|file_name, toplevel|
+        result = toplevel if file_name == name
+      }
+      dir = File.dirname(@file_relative_name)
+      @@all_files.each{|file_name, toplevel|
+        if /^#{dir}\/(.*)/ =~ file_name
+          result = toplevel if $1 == name
+        end
+      }
+      if result
+        if method
+          result_method = result.find_local_symbol(method, ignore_case)
+          return result_method
+        else
+          return result
+        end
+      else
+        return nil
+      end
+    end
+
+  end
+
+
+  # Extend ClassModule class for parse_f95.rb
+  # Original class is defined in code_objects.rb.
+  # * The case of names of classes or modules or methods are ignored
+
+  class ClassModule
+    def find_file_named(name, method=nil, ignore_case=nil)
+      parent.find_file_named(name, method, ignore_case)
+    end
+  end
+
+  # Extend AnyMethod class for parse_f95.rb
+  # Original class is defined in code_objects.rb.
+  # * A method "<=>" is modified.
+
+  class AnyMethod < CodeObject
+
+    attr_reader :doc_priority
+
+    def initialize(text, name)
+      super()
+      @text = text
+      @name = name
+      @token_stream  = nil
+      @visibility    = :public
+      @dont_rename_initialize = false
+      @block_params  = nil
+      @aliases       = []
+      @is_alias_for  = nil
+      @comment = ""
+      @call_seq = nil
+      @doc_priority = 50
+    end
+
+    def set_priority(doc_priority)
+      if doc_priority.class.to_s == 'Fixnum'
+        @doc_priority = doc_priority
+      end
+    end
+
+    def <=>(other)
+      if @doc_priority < 1 && other.doc_priority < 1
+        t = @doc_priority <=> other.doc_priority
+        return t if t != 0
+      elsif @doc_priority < 1 && other.doc_priority >= 1
+        return -1
+      elsif @doc_priority >= 1 && other.doc_priority < 1
+        return 1
+      end
+
+      if @doc_priority > 99 && other.doc_priority > 99
+        t = @doc_priority <=> other.doc_priority
+        return t if t != 0
+      elsif @doc_priority > 99 && other.doc_priority <= 99
+        return 1
+      elsif @doc_priority <= 99 && other.doc_priority > 99
+        return -1
+      end
+
+      t = @name <=> other.name
+      return t if t != 0
+      t = @doc_priority <=> other.doc_priority
+      return t if t != 0
+      t = @params <=> other.params
+      return t if t != 0
+      t = @comment <=> other.comment
+    end
+  end
+
+
+  #See rdoc/parsers/parse_f95.rb
+  #
   class Fortran95parser
 
     extend ParserFactory
@@ -189,7 +894,19 @@
     INTERNAL_ALIAS_MES = "Alias for"
 
     # External alias message
-    EXTERNAL_ALIAS_MES = "The entity is"
+    EXTERNAL_ALIAS_MES = "Original external subprogram is"
+
+    # Provided modules message
+    PROVIDED_MODULES_MES = "This file provides following module"
+
+    # Repository of NAMELIST statements
+    NAMELIST_REPOSITORY_NAME = "NAMELIST"
+
+    # Ignored marker
+    IGNORED_MARKER_REGEXP = /^:nodoc:/
+
+    # Document priority marker
+    DOC_PRIORITY_REGEXP = /^:doc\-priority\s+([\-\+]?\d+):\s*/
 
     # prepare to parse a Fortran 95 file
     def initialize(top_level, file_name, body, options, stats)
@@ -199,6 +916,13 @@
       @options = options
       @top_level = top_level
       @progress = $stderr unless options.quiet
+
+      begin
+        @options_ignore_case = options.ignore_case
+      rescue
+        @options_ignore_case = true
+      end
+
     end
 
     # devine code constructs
@@ -279,7 +1003,7 @@
         #
         module_program_code = block_searching_lines.join("\n")
         module_program_code = remove_empty_head_lines(module_program_code)
-        if module_program_trailing =~ /^:nodoc:/
+        if module_program_trailing =~ IGNORED_MARKER_REGEXP
           # next loop to search next block
           level_depth = 0
           block_searching_flag = false
@@ -299,38 +1023,109 @@
           f9x_module = @top_level.add_module NormalClass, module_name
           f9x_module.record_location @top_level
 
-          f9x_comment = COMMENTS_ARE_UPPER ? 
-            find_comments(pre_comment.join("\n"))  + "\n" + module_trailing :
-              module_trailing + "\n" + find_comments(module_code.sub(/^.*$\n/i, ''))
+          #
+          # Add provided modules information to @top_level comment
+          #
+          provided_modules = []
+          provided_mes_line_num = nil
+          top_level_comment_lines = []
+          line_num = 0
+          @top_level.comment.split("\n").each{|line|
+            top_level_comment_lines << line
+            line_num += 1
+            next if line.empty?
+            if !provided_mes_line_num && /^\s?#{PROVIDED_MODULES_MES}/ =~ line
+              provided_mes_line_num = line_num
+              next
+            end
+            if provided_mes_line_num
+              if /^\s?\*\s+<b>(\w+)<\/b>/ =~ line
+                provided_modules << $1
+              else
+                provided_mes_line_num = nil
+              end
+            end
+          }
+          line_num = 0
+          if provided_mes_line_num
+            top_level_comment_lines.collect!{ |line|
+              line_num += 1
+              if line_num < provided_mes_line_num
+                line
+              else
+                nil
+              end
+            }
+            top_level_comment_lines.delete_if{|line| !line }
+          end
+          top_level_comment_lines << "\n" + PROVIDED_MODULES_MES + "."
+          if provided_mes_line_num
+            top_level_comment_lines[-1].sub!(/\.$/, '')
+            top_level_comment_lines[-1] << "s."
+          end
+          provided_modules.each{ |mod|
+            top_level_comment_lines << "* <b>" + mod + "</b>"
+          }
+          top_level_comment_lines << "* <b>" + module_name + "</b>"
+          @top_level.comment = top_level_comment_lines.join("\n")
+
+          #
+          # Information about the module is parsed
+          #
+          f9x_comment = COMMENTS_ARE_UPPER ? find_comments(pre_comment.join("\n")) +
+            "\n" + module_trailing : module_trailing + "\n" +
+            find_comments(module_code.sub(/^.*$\n/i, ''))
           f9x_module.comment = f9x_comment
           parse_program_or_module(f9x_module, module_code)
 
           TopLevel.all_files.each do |name, toplevel|
-            if toplevel.include_includes?(module_name, @options.ignore_case)
-              if !toplevel.include_requires?(@file_name, @options.ignore_case)
+            if toplevel.include_includes?(module_name, @options_ignore_case)
+              if !toplevel.include_requires?(@file_name, @options_ignore_case)
                 toplevel.add_require(Require.new(@file_name, ""))
               end
             end
             toplevel.each_classmodule{|m|
-              if m.include_includes?(module_name, @options.ignore_case)
-                if !m.include_requires?(@file_name, @options.ignore_case)
+              if m.include_includes?(module_name, @options_ignore_case)
+                if !m.include_requires?(@file_name, @options_ignore_case)
                   m.add_require(Require.new(@file_name, ""))
                 end
               end
             }
           end
+
+          namelist_comment = 
+            find_namelists(f9x_module, before_contains(module_code))
+          f9x_module.comment << namelist_comment if namelist_comment
+
         elsif block_searching_flag == :program
           program_name = module_program_name
+          program_name = "main_program" if program_name.empty?
           program_code = module_program_code
           program_trailing = module_program_trailing
+          program_priority, program_trailing = doc_priority_from_trailing(program_trailing)
+
+          program_comment = COMMENTS_ARE_UPPER ? find_comments(pre_comment.join("\n")) + 
+            "\n" + program_trailing : program_trailing + "\n" + 
+            find_comments(program_code.sub(/^.*$\n/i, ''))
+
           progress "p"
-          program_comment = COMMENTS_ARE_UPPER ? 
-            find_comments(pre_comment.join("\n")) + "\n" + program_trailing : 
-              program_trailing + "\n" + find_comments(program_code.sub(/^.*$\n/i, ''))
-          program_comment = "\n\n= <i>Program</i> <tt>#{program_name}</tt>\n\n" \
-                            + program_comment
-          @top_level.comment << program_comment
+          @stats.num_methods += 1
+          f9x_mainprogram = AnyMethod.new("main_program", program_name)
+          f9x_mainprogram.singleton = false
+          f9x_mainprogram.comment = "<b><em> Main Program </em></b> :: <tt></tt>\n"
+          f9x_mainprogram.comment << program_comment
+          f9x_mainprogram.params = ""
+          f9x_mainprogram.set_priority(program_priority) if program_priority
+
+          # For output source code
+          f9x_mainprogram.start_collecting_tokens
+          f9x_mainprogram.add_token Token.new(1,1).set_text(program_code)
+
+          @top_level.add_method f9x_mainprogram
           parse_program_or_module(@top_level, program_code, :private)
+
+          namelist_comment = find_namelists(f9x_mainprogram, program_code)
+          f9x_mainprogram.comment << namelist_comment if namelist_comment
         end
 
         # next loop to search next block
@@ -347,6 +1142,9 @@
 
       # External subprograms and functions are parsed
       #
+      # Ã±°ì¤Î¥Õ¥¡¥¤¥ëÆâ¤Ë¤ª¤¤¤Æ program ¤ä module ¤Ë³ÊÇ¼¤µ¤ì¤Ê¤¤,
+      # ³°Éô¥µ¥Ö¥ë¡¼¥Á¥ó, ³°Éô´Ø¿ôÉôÊ¬¤Î²òÀÏ.
+      #
       parse_program_or_module(@top_level, remaining_lines.join("\n"),
                               :public, true)
 
@@ -365,28 +1163,11 @@
       #
       # Parse variables before "contains" in module
       #
-      level_depth = 0
-      before_contains_lines = []
-      before_contains_code = nil
-      before_contains_flag = nil
-      remaining_lines.each{ |line|
-        if !before_contains_flag
-          if line =~ /^\s*?module\s+\w+\s*?(!.*?)?$/i
-            before_contains_flag = true
-          end
-        else
-          break if line =~ /^\s*?contains\s*?(!.*?)?$/i
-          level_depth += 1 if block_start?(line)
-          level_depth -= 1 if block_end?(line)
-          break if level_depth < 0
-          before_contains_lines << line
-        end
-      }
-      before_contains_code = before_contains_lines.join("\n")
-      if before_contains_code
-        before_contains_code.gsub!(/^\s*?interface\s+.*?\s+end\s+interface.*?$/im, "")
-        before_contains_code.gsub!(/^\s*?type[\s\,]+.*?\s+end\s+type.*?$/im, "")
-      end
+      # namelist ÊÑ¿ô¤ÎÄêµÁ¤Ë»È¤ï¤ì¤¿¤ê, ¤³¤ì¼«ÂÎ¤¬Äê¿ô, ÊÑ¿ô
+      # Äó¶¡¤µ¤ì¤ë¤Î¤ËÍøÍÑ¤µ¤ì¤ë. (ÊÑ¿ô¤äÄê¿ô¤È¤·¤ÆÍøÍÑ¤µ¤ì¤ë¾ì¹ç,
+      # ¤³¤ì¤â¥á¥½¥Ã¥É¤È¤·¤ÆÄó¶¡¤¹¤ë.
+      #
+      before_contains_code = before_contains(remaining_code)
 
       #
       # Parse global "use"
@@ -399,8 +1180,8 @@
         used_mod_name = $1.strip.chomp
         used_list = $2 || ""
         used_trailing = $3 || ""
-        next if used_trailing =~ /!:nodoc:/
-        if !container.include_includes?(used_mod_name, @options.ignore_case)
+        next if used_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
+        if !container.include_includes?(used_mod_name, @options_ignore_case)
           progress "."
           container.add_include Include.new(used_mod_name, "")
         end
@@ -444,7 +1225,7 @@
             @@public_methods.collect!{ |pub_meth|
               if local == pub_meth["name"] ||
                   local.upcase == pub_meth["name"].upcase &&
-                  @options.ignore_case
+                  @options_ignore_case
                 pub_meth["name"] = org
                 pub_meth["local_name"] = local
               end
@@ -463,8 +1244,8 @@
         use_check_code << $~.post_match
         used_mod_name = $1.strip.chomp
         used_trailing = $3 || ""
-        next if used_trailing =~ /!:nodoc:/
-        if !container.include_includes?(used_mod_name, @options.ignore_case)
+        next if used_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
+        if !container.include_includes?(used_mod_name, @options_ignore_case)
           progress "."
           container.add_include Include.new(used_mod_name, "")
         end
@@ -473,10 +1254,10 @@
       container.each_includes{ |inc|
         TopLevel.all_files.each do |name, toplevel|
           indicated_mod = toplevel.find_symbol(inc.name,
-                                               nil, @options.ignore_case)
+                                               nil, @options_ignore_case)
           if indicated_mod
             indicated_name = indicated_mod.parent.file_relative_name
-            if !container.include_requires?(indicated_name, @options.ignore_case)
+            if !container.include_requires?(indicated_name, @options_ignore_case)
               container.add_require(Require.new(indicated_name, ""))
             end
             break
@@ -485,7 +1266,7 @@
       }
 
       #
-      # Parse derived-types definitions
+      # Parse derived types definitions
       #
       derived_types_comment = ""
       remaining_code = remaining_lines.join("\n")
@@ -501,10 +1282,12 @@
         type_elements = $5 || ""
         type_code = remove_empty_head_lines($&)
         type_trailing = find_comments($4)
-        next if type_trailing =~ /^:nodoc:/
         type_visibility = $1
+        pre_match = $~.pre_match
+        next if type_trailing =~ IGNORED_MARKER_REGEXP
+        type_priority, type_trailing = doc_priority_from_trailing(type_trailing)
         type_comment = COMMENTS_ARE_UPPER ? 
-          find_comments($~.pre_match) + "\n" + type_trailing :
+          find_comments(pre_match) + "\n" + type_trailing :
             type_trailing + "\n" + find_comments(type_code.sub(/^.*$\n/i, ''))
         type_element_visibility_public = true
         type_code.split("\n").each{ |line|
@@ -537,6 +1320,7 @@
         type.comment = "<b><em> Derived Type </em></b> :: <tt></tt>\n"
         type.comment << args_comment if args_comment
         type.comment << type_comment if type_comment
+        type.set_priority(type_priority) if type_priority
         progress "t"
         @stats.num_methods += 1
         container.add_method type
@@ -607,6 +1391,7 @@
           const_or_var_progress = "c"
         end
         const_or_var = AnyMethod.new(const_or_var_type, defitem.varname)
+        const_or_var.set_priority(defitem.doc_priority) if defitem.doc_priority
         const_or_var.singleton = false
         const_or_var.params = ""
         self_comment = find_arguments([defitem.varname], before_contains_code)
@@ -708,7 +1493,7 @@
         #
         procedure_code = block_searching_lines.join("\n")
         procedure_code = remove_empty_head_lines(procedure_code)
-        if procedure_trailing =~ /^!:nodoc:/
+        if procedure_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
           # next loop to search next block
           level_depth = 0
           block_searching_flag = nil
@@ -734,6 +1519,7 @@
           subroutine_params   = procedure_params
           subroutine_trailing = procedure_trailing
           subroutine_code     = procedure_code
+          subroutine_priority, subroutine_trailing = doc_priority_from_trailing(subroutine_trailing)
 
           subroutine_comment = COMMENTS_ARE_UPPER ? 
             pre_comment.join("\n") + "\n" + subroutine_trailing : 
@@ -742,11 +1528,16 @@
           parse_subprogram(subroutine, subroutine_params,
                            subroutine_comment, subroutine_code,
                            before_contains_code, nil, subroutine_prefix)
+          subroutine.set_priority(subroutine_priority) if subroutine_priority
           progress "s"
           @stats.num_methods += 1
           container.add_method subroutine
           subroutine_function = subroutine
 
+          namelist_comment = 
+            find_namelists(subroutine, subroutine_code, before_contains_code)
+          subroutine.comment << namelist_comment if namelist_comment
+
         elsif block_searching_flag == :function
           function_prefix     = procedure_prefix
           function_type       = procedure_type
@@ -755,6 +1546,7 @@
           function_result_arg = procedure_result_arg
           function_trailing   = procedure_trailing
           function_code_org   = procedure_code
+          function_priority, function_trailing = doc_priority_from_trailing(function_trailing)
 
           function_comment = COMMENTS_ARE_UPPER ?
             pre_comment.join("\n") + "\n" + function_trailing :
@@ -765,16 +1557,22 @@
             function_code << "\n" + function_type + " :: " + function_result_arg
           end
 
-          function_params =
-            function_params_org.sub(/^\(/, "\(#{function_result_arg}, ")
+          if function_params_org =~ /^\s*\(\s*\)\s*$/
+            function_params =
+              function_params_org.sub(/^\(/, "\(#{function_result_arg}")
+          else
+            function_params =
+              function_params_org.sub(/^\(/, "\(#{function_result_arg}, ")
+          end
 
           function = AnyMethod.new("function", function_name)
           parse_subprogram(function, function_params,
                            function_comment, function_code,
                            before_contains_code, true, function_prefix)
+          function.set_priority(function_priority) if function_priority
 
           # Specific modification due to function
-          function.params.sub!(/\(\s*?#{function_result_arg}\s*?,\s*?/, "\( ")
+          function.params.sub!(/\(\s*?#{function_result_arg}\s*?,?\s*?/, "\( ")
           function.params << " result(" + function_result_arg + ")"
           function.start_collecting_tokens
           function.add_token Token.new(1,1).set_text(function_code_org)
@@ -784,6 +1582,10 @@
           container.add_method function
           subroutine_function = function
 
+          namelist_comment = 
+            find_namelists(function, function_code, before_contains_code)
+          function.comment << namelist_comment if namelist_comment
+
         end
 
         # The visibility of procedure is specified
@@ -841,7 +1643,7 @@
           generic_name = $1 ? $1.strip.chomp : nil
           interface_trailing = $2 || "!"
           interface_scope = true
-          interface_scope = false if interface_trailing =~ /!:nodoc:/
+          interface_scope = false if interface_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
 #          if generic_name =~ /operator\s*?\((.*?)\)/i
 #            operator_name = $1
 #            if operator_name && !operator_name.empty?
@@ -863,12 +1665,14 @@
         if interface_scope && /^\s*?module\s+procedure\s+(.*?)(!.*?)?$/i =~ line
           procedures = $1.strip.chomp
           procedures_trailing = $2 || "!"
-          next if procedures_trailing =~ /!:nodoc:/
+          next if procedures_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
+          procedures_priority, procedures_trailing = doc_priority_from_trailing(procedures_trailing)
+
           procedures.split(",").each{ |proc|
             proc.strip!
             proc.chomp!
             next if generic_name == proc || !generic_name
-            old_meth = container.find_symbol(proc, nil, @options.ignore_case)
+            old_meth = container.find_symbol(proc, nil, @options_ignore_case)
             next if !old_meth
             nolink = old_meth.visibility == :private ? true : nil
             nolink = nil if @options.show_all
@@ -879,6 +1683,7 @@
                                           old_meth.clone.token_stream[0].text, 
                                           true, nolink)
             new_meth.singleton = old_meth.singleton
+            new_meth.set_priority(procedures_priority) if procedures_priority
 
             progress "i"
             @stats.num_methods += 1
@@ -902,7 +1707,7 @@
                            subroutine\s+(\w+)\s*?(\(.*?\))?\s*?(!.*?)?$
                      /ix
             proc = $2.chomp.strip
-            generic_name = proc unless generic_name
+            proc_name = generic_name || proc
             params = $3 || ""
             procedures_trailing = $4 || "!"
 
@@ -922,43 +1727,46 @@
                          (\(.*?\))?(\s+result\((.*?)\))?\s*?(!.*?)?$
                         /ix
             proc = $8.chomp.strip
-            generic_name = proc unless generic_name
+            proc_name = generic_name || proc
             params = $9 || ""
             procedures_trailing = $12 || "!"
           else
             next
           end
-          next if procedures_trailing =~ /!:nodoc:/
+          next if procedures_trailing.sub(/^!/, '') =~ IGNORED_MARKER_REGEXP
+          procedures_priority, procedures_trailing = doc_priority_from_trailing(procedures_trailing)
           indicated_method = nil
           indicated_file   = nil
           TopLevel.all_files.each do |name, toplevel|
-            indicated_method = toplevel.find_local_symbol(proc, @options.ignore_case)
+            indicated_method = toplevel.find_local_symbol(proc, @options_ignore_case)
             indicated_file = name
             break if indicated_method
           end
 
           if indicated_method
             external_method = 
-              initialize_external_method(generic_name, proc, 
+              initialize_external_method(proc_name, proc, 
                                          indicated_method.params, 
                                          indicated_file, 
                                          indicated_method.comment)
+            external_method.set_priority(procedures_priority) if procedures_priority
 
             progress "e"
             @stats.num_methods += 1
             container.add_method external_method
-            set_visibility(container, generic_name, visibility_default, @@public_methods)
-            if !container.include_requires?(indicated_file, @options.ignore_case)
+            set_visibility(container, proc_name, visibility_default, @@public_methods)
+            if !container.include_requires?(indicated_file, @options_ignore_case)
               container.add_require(Require.new(indicated_file, ""))
             end
             check_public_methods(external_method, container.name)
 
           else
             @@external_aliases << {
-              "new_name"  => generic_name,
+              "new_name"  => proc_name,
               "old_name"  => proc,
               "file_or_module" => container,
-              "visibility" => find_visibility(container, generic_name, @@public_methods) || visibility_default
+              "visibility" => find_visibility(container, proc_name, @@public_methods) || visibility_default,
+              "doc_priority" => procedures_priority
             }
           end
         end
@@ -969,6 +1777,9 @@
       # Already imported methods are removed from @@public_methods.
       # Remainders are assumed to be imported from other modules.
       #
+      # ´û¤Ë»²¾ÈºÑ¤ß¤Î¥á¥½¥Ã¥É¤Ï @@public_methods ¤«¤é¼è¤ê½ü¤¯.
+      # »Ä¤ê¤Ï³°Éô¥â¥¸¥å¡¼¥ë¤«¤é¤Î»²¾È¤È²¾Äê¤¹¤ë.
+      #
       @@public_methods.delete_if{ |method| method["entity_is_discovered"]}
 
       @@public_methods.each{ |pub_meth|
@@ -977,11 +1788,11 @@
           TopLevel.all_classes_and_modules.each{ |modules|
             if modules.name == used_mod ||
                 modules.name.upcase == used_mod.upcase &&
-                @options.ignore_case
+                @options_ignore_case
               modules.method_list.each{ |meth|
                 if meth.name == pub_meth["name"] ||
                     meth.name.upcase == pub_meth["name"].upcase &&
-                    @options.ignore_case
+                    @options_ignore_case
                   new_meth = initialize_public_method(meth,
                                                       modules.name)
                   if pub_meth["local_name"]
@@ -1014,7 +1825,6 @@
                        nil, nil, true)
       params_opt = "( " + params_opt + " ) " if params_opt
       subprogram.params = params_opt || ""
-      namelist_comment = find_namelists(code, before_contains)
 
       block_comment = find_comments comment
       if function
@@ -1024,7 +1834,6 @@
       end
       subprogram.comment << args_comment if args_comment
       subprogram.comment << block_comment if block_comment
-      subprogram.comment << namelist_comment if namelist_comment
 
       # For output source code
       subprogram.start_collecting_tokens
@@ -1033,6 +1842,54 @@
       subprogram
     end
 
+    def doc_priority_from_trailing(trailing)
+      prefix = ''
+      if trailing =~ /^(\s*!)(.*)$/
+        prefix = $1
+        trailing = $2
+      end
+      if trailing =~ DOC_PRIORITY_REGEXP
+        priority = $1.to_i
+        trailing.sub!(DOC_PRIORITY_REGEXP, '')
+      else
+        priority = false
+      end
+      trailing = prefix + trailing
+      return priority, trailing
+    end
+
+    #
+    # Return lines before "contains" statement in modules.
+    # "interface", "type" statements are removed.
+    #
+    def before_contains(code)
+      level_depth = 0
+      before_contains_lines = []
+      before_contains_code = nil
+      before_contains_flag = nil
+      code.split("\n").each{ |line|
+        if !before_contains_flag
+          if line =~ /^\s*?module\s+\w+\s*?(!.*?)?$/i
+            before_contains_flag = true
+          end
+        else
+          break if line =~ /^\s*?contains\s*?(!.*?)?$/i
+          level_depth += 1 if block_start?(line)
+          level_depth -= 1 if block_end?(line)
+          break if level_depth < 0
+          before_contains_lines << line
+        end
+
+      }
+      before_contains_code = before_contains_lines.join("\n")
+      if before_contains_code
+        before_contains_code.gsub!(/^\s*?interface\s+.*?\s+end\s+interface.*?$/im, "")
+        before_contains_code.gsub!(/^\s*?type[\s\,]+.*?\s+end\s+type.*?$/im, "")
+      end
+
+      before_contains_code
+    end
+
     #
     # Collect comment for file entity
     #
@@ -1084,7 +1941,7 @@
           if arg == defitem.varname.strip.chomp || all
             args_rdocforms << <<-"EOF"
 
-#{indent}<tt><b>#{defitem.varname.chomp.strip}#{defitem.arraysuffix}</b> #{defitem.inivalue}</tt> :: 
+#{indent}<b><tt>#{defitem.varname.chomp.strip}#{defitem.arraysuffix}  </tt></b>  <tt> #{defitem.inivalue}</tt> :: 
 #{indent}   <tt>#{defitem.types.chomp.strip}</tt>
 EOF
             if !defitem.comment.chomp.strip.empty?
@@ -1118,27 +1975,88 @@
       end
     end
 
-    # Return comments of definitions of namelists
     #
-    def find_namelists(text, before_contains=nil)
+    # Add namelist information to Repository (dummy module of each
+    # @top_level) of NAMELIST statements.
+    # And return comments about namelist group names
+    #
+    def find_namelists(container, text, before_contains=nil)
       return nil if !text
-      result = ""
+      top_level = find_toplevel(container)
+
+      if text =~ /^\s*?namelist\s+\/\s*?(\w+)\s*?\/([\s\w\,]+)(!.*?)?$/i
+        if top_level.include_includes?(NAMELIST_REPOSITORY_NAME)
+          namelist_module = 
+            top_level.find_module_named(NAMELIST_REPOSITORY_NAME)
+        else
+          namelist_module = 
+            top_level.add_module NormalClass, NAMELIST_REPOSITORY_NAME
+          namelist_module.record_location top_level
+          namelist_module.comment = <<-"EOF"
+This is not a module but a repository of NAMELIST group names declared
+in all Fortran 90/95 files
+EOF
+        end
+      else
+        return ""
+      end
+
+      nml_group_name_lists = []
       lines = "#{text}"
       before_contains = "" if !before_contains
-      while lines =~ /^\s*?namelist\s+\/\s*?(\w+)\s*?\/([\s\w\,]+)$/i
+      while lines =~ /^\s*?namelist\s+\/\s*?(\w+)\s*?\/([\s\w\,]+)(!.*?)?$/i
         lines = $~.post_match
+        pre_match = $~.pre_match ; post_match = $~.post_match
+        nml_group_name = $1
+        trailing_comment = $3 || ""
+        nml_vars_list  = $2.split(",")
         nml_comment = COMMENTS_ARE_UPPER ? 
-            find_comments($~.pre_match) : find_comments($~.post_match)
-        nml_name = $1
-        nml_args = $2.split(",")
-        result << "\n\n=== NAMELIST <tt><b>" + nml_name + "</tt></b>\n\n"
-        result << nml_comment + "\n" if nml_comment
+            find_comments(pre_match.sub(/\n$/, '')) :
+            find_comments(trailing_comment + post_match)
         if lines.split("\n")[0] =~ /^\//i
           lines = "namelist " + lines
         end
-        result << find_arguments(nml_args, "#{text}" + "\n" + before_contains)
+
+        nml_meth = AnyMethod.new("NAMELIST", nml_group_name)
+        nml_meth.singleton = false
+        nml_meth.params    = "( " + nml_vars_list.join(", ") + " )"
+        nml_meth.comment   = "<b><em> NAMELIST </em></b> :: <tt></tt>\n"
+        nml_meth.comment   << find_arguments(nml_vars_list, "#{text}" + "\n" + before_contains)
+        nml_meth.comment   << "\n" + nml_comment if nml_comment
+        if container.parent.parent
+          parent_object = container.parent.name
+        else
+          parent_object = container.parent.file_relative_name
+        end
+        nml_meth.comment   << "\n\nThis namelist group name is input/output in "
+        nml_meth.comment   << parent_object + "#" + container.name
+
+        progress "n"
+        @stats.num_methods += 1
+        namelist_module.add_method nml_meth
+
+        nml_group_name_lists << NAMELIST_REPOSITORY_NAME + "#" + nml_group_name
+      end
+
+      if !nml_group_name_lists.empty?
+        comments_in_procedures = "\n\nThis procedure input/output "
+        comments_in_procedures << nml_group_name_lists.join(", ") + " . "
+      else
+        comments_in_procedures = ""
+      end
+
+      comments_in_procedures
+    end
+
+    #
+    # Return toplevel class of container
+    #
+    def find_toplevel(container)
+      top_level = container
+      while top_level.parent
+        top_level = top_level.parent
       end
-      return result
+      top_level
     end
 
     #
@@ -1290,7 +2208,7 @@
       not_found = true
       visibility_info.collect!{ |info|
         if info["name"] == subname ||
-            @options.ignore_case && info["name"].upcase == subname.upcase
+            @options_ignore_case && info["name"].upcase == subname.upcase
           if info["file_or_module"].name == container.name
             container.set_visibility_for([subname], info["visibility"])
             info["entity_is_discovered"] = true
@@ -1313,7 +2231,7 @@
       return nil if !subname || !visibility_info
       visibility_info.each{ |info|
         if info["name"] == subname ||
-            @options.ignore_case && info["name"].upcase == subname.upcase
+            @options_ignore_case && info["name"].upcase == subname.upcase
           if info["parent"] == container.name
             return info["visibility"]
           end
@@ -1325,22 +2243,26 @@
     #
     # Check external aliases
     #
+    # subname ¤È¤¤¤¦¥µ¥Ö¥ë¡¼¥Á¥óÌ¾, ¤Þ¤¿¤Ï´Ø¿ôÌ¾¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤ò
+    # Ãµºº¤·, Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¤½¤Î¥Õ¥¡¥¤¥ëÆâ¤Ø¥á¥½¥Ã¥É¤òÄÉ²Ã¤¹¤ë.
+    #
     def check_external_aliases(subname, params, comment, test=nil)
       @@external_aliases.each{ |alias_item|
         if subname == alias_item["old_name"] ||
                     subname.upcase == alias_item["old_name"].upcase &&
-                            @options.ignore_case
+                            @options_ignore_case
 
           new_meth = initialize_external_method(alias_item["new_name"], 
                                                 subname, params, @file_name, 
                                                 comment)
           new_meth.visibility = alias_item["visibility"]
+          new_meth.set_priority(alias_item["doc_priority"]) if alias_item["doc_priority"]
 
           progress "e"
           @stats.num_methods += 1
           alias_item["file_or_module"].add_method(new_meth)
 
-          if !alias_item["file_or_module"].include_requires?(@file_name, @options.ignore_case)
+          if !alias_item["file_or_module"].include_requires?(@file_name, @options_ignore_case)
             alias_item["file_or_module"].add_require(Require.new(@file_name, ""))
           end
         end
@@ -1350,6 +2272,11 @@
     #
     # Check public_methods
     #
+    # use ¤·¤¿¥â¥¸¥å¡¼¥ë¤«¤é¤½¤Î¤Þ¤Þ°ú¤­·Ñ¤¤¤Ç public ¤È¤·¤Æ
+    # ¸ø³«¤¹¤ë¾ì¹ç¤Î¥Á¥§¥Ã¥¯¤ò¹Ô¤¦. 
+    # subname ¤È¤¤¤¦¥µ¥Ö¥ë¡¼¥Á¥óÌ¾, ¤Þ¤¿¤Ï´Ø¿ôÌ¾¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤ò
+    # Ãµºº¤·, Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¤½¤Î¥Õ¥¡¥¤¥ëÆâ¤Ø¥á¥½¥Ã¥É¤òÄÉ²Ã¤¹¤ë.
+    #
     def check_public_methods(method, parent)
       return if !method || !parent
       @@public_methods.each{ |alias_item|
@@ -1357,7 +2284,7 @@
         alias_item["used_modules"].each{ |used_module|
           if used_module == parent ||
               used_module.upcase == parent.upcase &&
-              @options.ignore_case
+              @options_ignore_case
             parent_is_used_module = true
           end
         }
@@ -1365,7 +2292,7 @@
 
         if method.name == alias_item["name"] ||
             method.name.upcase == alias_item["name"].upcase &&
-            @options.ignore_case
+            @options_ignore_case
 
           new_meth = initialize_public_method(method, parent)
           if alias_item["local_name"]
@@ -1383,19 +2310,31 @@
     # Continuous lines are united.
     #
     # Comments in continuous lines are removed.
+    # If delete_space=false, spaces around "&" are not deleted.
+    #
+    # Example
+    #
+    # before
     #
-    def united_to_one_line(f90src)
+    #    subroutine func(a, b, c, d, e, & ! ignored comments
+    #      &             f, g, h)         ! valid comments
+    #
+    # after
+    #
+    #    subroutine func(a, b, c, d, e, f, g, h)         ! valid comments
+    #
+    def united_to_one_line(f90src, delete_space=true)
       return "" unless f90src
       lines = f90src.split("\n")
       previous_continuing = false
       now_continuing = false
       body = ""
+      squote = false ; dquote = false
       lines.each{ |line|
         words = line.split("")
         next if words.empty? && previous_continuing
         commentout = false
         brank_flag = true ; brank_char = ""
-        squote = false    ; dquote = false
         ignore = false
         words.collect! { |char|
           if previous_continuing && brank_flag
@@ -1417,7 +2356,7 @@
           end
           ignore = false
 
-          if now_continuing
+          if now_continuing && !(squote) && !(dquote)
             next ""
           elsif !(squote) && !(dquote) && !(commentout)
             case char
@@ -1431,25 +2370,32 @@
             next char
           elsif squote
             case char
-            when "\'"; squote = false ; next char
+            when "\'"; squote = false ; now_continuing = false ; next char
+            when "&" ; now_continuing = true ; next ""
             else next char
             end
           elsif dquote
             case char
-            when "\""; dquote = false ; next char
+            when "\""; dquote = false ; now_continuing = false ; next char
+            when "&" ; now_continuing = true ; next ""
             else next char
             end
           end
         }
         if !ignore && !previous_continuing || !brank_flag
           if previous_continuing
-            body << words.join("")
+            if delete_space
+              joined_words = words.join("")
+              body = body.rstrip + " " + joined_words.lstrip
+            else
+              body << words.join("")
+            end
           else
             body << "\n" + words.join("")
           end
         end
-        previous_continuing = now_continuing ? true : nil
-        now_continuing = nil
+        previous_continuing = now_continuing ? true : false
+        now_continuing = false
       }
       return body
     end
@@ -1506,6 +2452,10 @@
       return "" unless text
       lines = text.split("\n")
       lines.collect!{ |line|
+        indent_space = ""
+        if line =~ /^(\s+)/
+          indent_space = $1
+        end
         words = line.split("")
         commentout = false
         squote = false ; dquote = false
@@ -1515,7 +2465,7 @@
             when "!" ; commentout = true ; next char
             when "\""; dquote = true     ; next char
             when "\'"; squote = true     ; next char
-            when ";" ;                     "\n"
+            when ";" ;                     "\n"+indent_space
             else next char
             end
           elsif commentout
@@ -1634,7 +2584,7 @@
     end
 
     def remove_private_comments(body)
-      body.gsub!(/^\s*!--\s*?$.*?^\s*!\+\+\s*?$/m, '')
+      body.gsub!(/^(\s*)!--\s*?$.*?^\s*!\+\+\s*?$/m, '\\1!')
       return body
     end
 
@@ -1646,36 +2596,48 @@
 
       # Name of variable
       #
+      # ÊÑ¿ôÌ¾
       attr_reader   :varname
 
       # Types of variable
       #
+      # ¥Ç¡¼¥¿·¿¾ðÊó
       attr_reader   :types
 
       # Initial Value
       #
+      # ½é´üÃÍ
       attr_reader   :inivalue
 
       # Suffix of array
       #
+      # ÇÛÎóÀÜÈø»ì
       attr_reader   :arraysuffix
 
       # Comments
       #
+      # ¹Ô¤ÎËöÈø¤Ë¤«¤«¤ì¤ë¥³¥á¥ó¥È
       attr_accessor   :comment
 
       # Flag of non documentation
       #
+      # ¥É¥­¥å¥á¥ó¥È½ÐÎÏ¤·¤Ê¤¤¥Õ¥é¥°
       attr_accessor   :nodoc
 
+      # Priority of documentation
+      #
+      # ¥É¥­¥å¥á¥ó¥È¤ÎÍ¥ÀèÅÙ
+      attr_accessor   :doc_priority
+
       def initialize(varname, types, inivalue, arraysuffix, comment,
-                     nodoc=false)
+                     nodoc=false, doc_priority=50)
         @varname = varname
         @types = types
         @inivalue = inivalue
         @arraysuffix = arraysuffix
         @comment = comment
         @nodoc = nodoc
+        @doc_priority = doc_priority
       end
 
       def to_s
@@ -1822,11 +2784,18 @@
           end
         }
         defs << Fortran95Definition.new(varname, type, inivalue, arraysuffix, comment)
-        if trailing_comment =~ /^:nodoc:/
+        if trailing_comment =~ IGNORED_MARKER_REGEXP
           defs[start_pos..-1].collect!{ |defitem|
             defitem.nodoc = true
           }
         end
+        if trailing_comment =~ DOC_PRIORITY_REGEXP
+          doc_priority = $1.to_i
+          defs[start_pos..-1].collect!{ |defitem|
+            defitem.doc_priority = doc_priority
+            defitem.comment.sub!(DOC_PRIORITY_REGEXP, '')
+          }
+        end
         varname = "" ; arraysuffix = "" ; inivalue = ""
         comment = ""
         under_comment_valid = true
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/parsers/parse_rb.rb ../rdoc-f95-20070309/parsers/parse_rb.rb
--- ruby-1.8.5-p12/lib/rdoc/parsers/parse_rb.rb	2006-06-15 07:19:36.000000000 +0900
+++ ../rdoc-f95-20070309/parsers/parse_rb.rb	2006-11-09 02:07:16.000000000 +0900
@@ -435,7 +435,7 @@
   def_exception(:SyntaxError, "%s")
   
   include RubyToken
-  include IRB
+#  include IRB # 1.8.2 doesn't support #IRB::SLex
 
   attr_reader :continue
   attr_reader :lex_state
@@ -466,11 +466,10 @@
     @exception_on_syntax_error = true
   end
 
-  attr :skip_space, true
-  attr :read_auto_clean_up, true
-  attr :exception_on_syntax_error, true
-
-  attr :indent
+  attr_accessor :skip_space
+  attr_accessor :read_auto_clean_up
+  attr_accessor :exception_on_syntax_error
+  attr_reader :indent
 
   # io functions
   def line_no
@@ -588,6 +587,7 @@
 
   def lex_init()
     @OP = SLex.new
+#    @OP = IRB::SLex.new # 1.8.2 doesn't support #IRB::SLex
     @OP.def_rules("\0", "\004", "\032") do |chars, io|
       Token(TkEND_OF_SCRIPT).set_text(chars)
     end
@@ -1477,15 +1477,19 @@
       if tk.kind_of?(TkSYMBEG)
         set_token_position(tk.line_no, tk.char_no)
         tk1 = get_tk
-        if tk1.kind_of?(TkId) || tk1.kind_of?(TkOp)
-          tk = Token(TkSYMBOL).set_text(":" + tk1.name)
+        if tk1.kind_of?(TkId) || tk1.kind_of?(TkOp) || tk1.kind_of?(TkSTRING)
+          if tk1.respond_to?(:name)
+            tk = Token(TkSYMBOL).set_text(":" + tk1.name)
+          else
+            tk = Token(TkSYMBOL).set_text(":" + tk1.text)
+          end
           # remove the identifier we just read (we're about to
           # replace it with a symbol)
           @token_listeners.each do |obj|
             obj.pop_token
           end if @token_listeners
         else
-          warn("':' not followed by identified or operator")
+          warn("':' not followed by identifier or operator")
           tk = tk1
         end
       end
@@ -2334,6 +2338,7 @@
 
         when "section"
           context.set_current_section(param, comment)
+#          comment.clear # ruby 1.9 feature
           comment.replace("") # 1.8 doesn't support #clear
           break 
         else
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/rdoc ../rdoc-f95-20070309/rdoc
--- ruby-1.8.5-p12/lib/rdoc/rdoc	1970-01-01 09:00:00.000000000 +0900
+++ ../rdoc-f95-20070309/rdoc	2005-09-22 18:40:11.000000000 +0900
@@ -0,0 +1,67 @@
+#!/usr/bin/env ruby
+#
+#  RDoc: Documentation tool for source code
+#        (see lib/rdoc/rdoc.rb for more information)
+#
+#  Copyright (c) 2003 Dave Thomas
+#  Released under the same terms as Ruby
+#
+#  $Revision: 1.1 $
+
+## Transitional Hack ####
+#
+#  RDoc was initially distributed independently, and installed
+#  itself into <prefix>/lib/ruby/site_ruby/<ver>/rdoc...
+#
+#  Now that RDoc is part of the distribution, it's installed into
+#  <prefix>/lib/ruby/<ver>, which unfortunately appears later in the
+#  search path. This means that if you have previously installed RDoc,
+#  and then install from ruby-lang, you'll pick up the old one by
+#  default. This hack checks for the condition, and readjusts the
+#  search path if necessary.
+
+#def adjust_for_existing_rdoc(path)
+#  
+#  $stderr.puts %{
+#  It seems as if you have a previously-installed RDoc in
+#  the directory #{path}.
+#
+#  Because this is now out-of-date, you might want to consider
+#  removing the directories:
+#
+#    #{File.join(path, "rdoc")}
+#
+#  and
+#
+#    #{File.join(path, "markup")}
+#
+#  }
+#
+#  # Move all the site_ruby directories to the end
+#  p $:
+#  $:.replace($:.partition {|path| /site_ruby/ !~ path}.flatten)
+#  p $:
+#end
+#
+# $:.each do |path|
+#  if /site_ruby/ =~ path 
+#    rdoc_path = File.join(path, 'rdoc', 'rdoc.rb')
+#    if File.exists?(rdoc_path)
+#      adjust_for_existing_rdoc(path)
+#      break
+#    end
+#  end
+#end
+
+## End of Transitional Hack ##
+
+
+require 'rdoc/rdoc'
+
+begin
+  r = RDoc::RDoc.new
+  r.document(ARGV)
+rescue RDoc::RDocError => e
+  $stderr.puts e.message
+  exit(1)
+end
¥Ð¥¤¥Ê¥ê¡¼¡¦¥Õ¥¡¥¤¥ëruby-1.8.5-p12/lib/rdoc/rdoc-f95-mailto-13.png¤È../rdoc-f95-20070309/rdoc-f95-mailto-13.png¤Ï°ã¤¤¤Þ¤¹
¥Ð¥¤¥Ê¥ê¡¼¡¦¥Õ¥¡¥¤¥ëruby-1.8.5-p12/lib/rdoc/rdoc-f95-mailto.png¤È../rdoc-f95-20070309/rdoc-f95-mailto.png¤Ï°ã¤¤¤Þ¤¹
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/rdoc.rb ../rdoc-f95-20070309/rdoc.rb
--- ruby-1.8.5-p12/lib/rdoc/rdoc.rb	2006-08-05 07:00:25.000000000 +0900
+++ ../rdoc-f95-20070309/rdoc.rb	2006-11-09 00:02:43.000000000 +0900
@@ -2,7 +2,10 @@
 #
  
 
-VERSION_STRING = %{RDoc V1.0.1 - 20041108}
+VERSION_STRING = <<-"EOF"
+RDoc modified by GFD Dennou Club: Version $Name: rdoc-f95-20070309 $
+     See http://www.gfd-dennou.org/library/dcmodel
+EOF
 
 
 require 'rdoc/parsers/parse_rb.rb'
@@ -16,6 +19,7 @@
 
 require 'find'
 require 'ftools'
+require 'time'
 
 # We put rdoc stuff in the RDoc module to avoid namespace
 # clutter.
@@ -106,25 +110,38 @@
     # then we refuse to use it, as we may clobber some
     # manually generated documentation
     
-    def setup_output_dir(op_dir)
-      flag_file = File.join(op_dir, "created.rid")
+    def setup_output_dir(op_dir, force)
+      flag_file = output_flag_file(op_dir)
       if File.exist?(op_dir)
         unless File.directory?(op_dir)
           error "'#{op_dir}' exists, and is not a directory" 
         end
-        unless File.file?(flag_file)
+        begin
+          created = File.read(flag_file)
+        rescue SystemCallError
           error "\nDirectory #{op_dir} already exists, but it looks like it\n" +
             "isn't an RDoc directory. Because RDoc doesn't want to risk\n" +
             "destroying any of your existing files, you'll need to\n" +
             "specify a different output directory name (using the\n" +
             "--op <dir> option).\n\n"
+        else
+          last = (Time.parse(created) unless force rescue nil)
         end
       else
         File.makedirs(op_dir)
       end
-      File.open(flag_file, "w") {|f| f.puts Time.now }
+      last
+    end
+
+    # Update the flag file in an output directory.
+    def update_output_dir(op_dir, time)
+      File.open(output_flag_file(op_dir), "w") {|f| f.puts time.rfc2822 }
+    end
+
+    # Return the path name of the flag file in an output directory.
+    def output_flag_file(op_dir)
+      File.join(op_dir, "created.rid")
     end
-    
 
     # The .document file contains a list of file and directory name
     # patterns, representing candidates for documentation. It may
@@ -160,8 +177,10 @@
 
       relative_files.each do |rel_file_name|
         next if exclude_pattern && exclude_pattern =~ rel_file_name
-        case type = File.stat(rel_file_name).ftype
+        stat = File.stat(rel_file_name)
+        case type = stat.ftype
         when "file"
+          next if @last_created and stat.mtime < @last_created
           file_list << rel_file_name.sub(/^\.\//, '') if force_doc || ParserFactory.can_parse(rel_file_name)
         when "directory"
           next if rel_file_name == "CVS" || rel_file_name == ".svn"
@@ -238,22 +257,25 @@
 
       options = Options.instance
       options.parse(argv, GENERATORS)
-    
+
+      @last_created = nil
       unless options.all_one_file
-        setup_output_dir(options.op_dir)
+        @last_created = setup_output_dir(options.op_dir, options.force_update)
       end
+      start_time = Time.now
 
       file_info = parse_files(options)
 
-      gen = options.generator
-      
-      $stderr.puts "\nGenerating #{gen.key.upcase}..." unless options.quiet
-      
-      require gen.file_name
-      
-      gen_class = Generators.const_get(gen.class_name)
-      
-      unless file_info.empty?
+      if file_info.empty?
+        $stderr.puts "\nNo newer files." unless options.quiet
+      else
+        gen = options.generator
+
+        $stderr.puts "\nGenerating #{gen.key.upcase}..." unless options.quiet
+
+        require gen.file_name
+
+        gen_class = Generators.const_get(gen.class_name)
         gen = gen_class.for(options)
 
         pwd = Dir.pwd
@@ -263,6 +285,7 @@
         begin
           Diagram.new(file_info, options).draw if options.diagram
           gen.generate(file_info)
+          update_output_dir(".", start_time)
         ensure
           Dir.chdir(pwd)
         end
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/ri/ri_display.rb ../rdoc-f95-20070309/ri/ri_display.rb
--- ruby-1.8.5-p12/lib/rdoc/ri/ri_display.rb	2006-06-27 05:44:14.000000000 +0900
+++ ../rdoc-f95-20070309/ri/ri_display.rb	2005-09-22 16:49:20.000000000 +0900
@@ -236,6 +236,7 @@
       @formatter.break_to_newline
     end
   end
+
   ######################################################################
   
   def display_flow(flow)
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/ri/ri_formatter.rb ../rdoc-f95-20070309/ri/ri_formatter.rb
--- ruby-1.8.5-p12/lib/rdoc/ri/ri_formatter.rb	2006-06-27 05:44:14.000000000 +0900
+++ ../rdoc-f95-20070309/ri/ri_formatter.rb	2006-11-20 05:35:28.000000000 +0900
@@ -554,9 +554,7 @@
 
     def display_verbatim_flow_item(item, prefix=@indent)
         print("<pre>")
-        item.body.split(/\n/).each do |line|
-          puts conv_html(line)
-        end
+        puts item.body
         puts("</pre>")
     end
 
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/ri/ri_paths.rb ../rdoc-f95-20070309/ri/ri_paths.rb
--- ruby-1.8.5-p12/lib/rdoc/ri/ri_paths.rb	2006-06-27 05:44:14.000000000 +0900
+++ ../rdoc-f95-20070309/ri/ri_paths.rb	2006-11-20 05:35:56.000000000 +0900
@@ -27,8 +27,10 @@
     DOC_DIR  = "doc/rdoc"
 
     version = Config::CONFIG['ruby_version']
+#    version = RbConfig::CONFIG['ruby_version']  # RbConfig is invalid in Ruby 1.8.2
 
     base    = File.join(Config::CONFIG['datadir'], "ri", version)
+#    base    = File.join(RbConfig::CONFIG['datadir'], "ri", version)  # RbConfig is invalid in Ruby 1.8.2
     SYSDIR  = File.join(base, "system")
     SITEDIR = File.join(base, "site")
     homedir = ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
diff -Nur --exclude=doc ruby-1.8.5-p12/lib/rdoc/usage.rb ../rdoc-f95-20070309/usage.rb
--- ruby-1.8.5-p12/lib/rdoc/usage.rb	2006-01-28 07:58:07.000000000 +0900
+++ ../rdoc-f95-20070309/usage.rb	2005-09-22 16:49:18.000000000 +0900
@@ -96,7 +96,7 @@
 
   # Display usage
   def RDoc.usage_no_exit(*args)
-    main_program_file = caller[-1].sub(/:\d+$/, '')
+    main_program_file, = caller[-1].split(/:\d+/, 2)
     comment = File.open(main_program_file) do |file|
       find_comment(file)
     end
