papyrus 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1,186 @@
1
+ \documentclass[a4paper,11pt]{article}
2
+
3
+ % This file is part of RDoc PDF LaTeX.
4
+ %
5
+ % RDoc PDF LaTeX is a RDoc plugin for generating PDF files.
6
+ % Copyright © 2011 Pegasus Alpha
7
+ %
8
+ % RDoc PDF LaTeX is free software; you can redistribute it and/or modify
9
+ % it under the terms of the GNU General Public License as published by
10
+ % the Free Software Foundation; either version 2 of the License, or
11
+ % (at your option) any later version.
12
+ %
13
+ % RDoc PDF LaTeX is distributed in the hope that it will be useful,
14
+ % but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ % GNU General Public License for more details.
17
+ %
18
+ % You should have received a copy of the GNU General Public License
19
+ % along with RDoc PDF LaTeX; if not, write to the Free Software
20
+ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+
22
+ % Variables used for the ERB template:
23
+ %
24
+ % babel_lang: Something like "ngerman", determines the babel language
25
+ % to load.
26
+ % doc_title: Title of the documentation.
27
+ % @rdoc_files: List of RDoc::TopLevel objects for all found files
28
+ % (first one will become the title file).
29
+ % @classes_and_modules: List of RDoc::ClassModule objects for all found classes
30
+ % and modules.
31
+
32
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33
+ % Packages
34
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35
+
36
+ \usepackage[<%= babel_lang %>]{babel} %Hyphenation, etc.
37
+ \usepackage[utf8]{inputenc} %Input encoding: UTF-8
38
+ \usepackage[T1]{fontenc} %Output encoding: T1
39
+ \usepackage{lmodern} %Pretty fonts for T1
40
+ \usepackage{textcomp} %Useful things like \textdegree
41
+ \usepackage[official]{eurosym} %Official \euro symbol
42
+ \usepackage{lastpage} %Get a reference on the last page
43
+ \usepackage[lmargin=3cm,rmargin=3cm,bmargin=2cm]{geometry}
44
+ \usepackage{fancyhdr} %Headers and footers
45
+ \usepackage{fancyvrb} %Better verbatim text
46
+ \usepackage{longtable}
47
+ %\usepackage{amsmath} %For math
48
+ %\usepackage{amsfonts} %Math fonts
49
+ %\usepackage[retainorgcmds]{IEEEtrantools} %For equations
50
+ %\usepackage{listings} %Syntax hightlighting
51
+ \usepackage{xcolor} %Colored text
52
+ %\usepackage{graphicx} %Graphics
53
+ \usepackage{titlesec} %Easily define new heading styles
54
+ \usepackage{titletoc} %For telling LaTeX where to put the new headings in the TOC
55
+ \usepackage[unicode=true,pdftex]{hyperref} %For hyperlinks
56
+
57
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58
+ % General information
59
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
60
+
61
+ \author{\LaTeX PDF generator for RDoc}
62
+ \title{<%= doc_title %>}
63
+ \date{\today}
64
+
65
+ %Generate TOC only till level 2
66
+ \setcounter{tocdepth}{2}
67
+ %Disable section numbering
68
+ \setcounter{secnumdepth}{-2}
69
+
70
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71
+ % New commands and environments
72
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
73
+ % TODO: Make this a LaTeX package?
74
+
75
+ \titleclass{\subsubsubsection}{straight}[\subsubsection]
76
+ \titleformat{\subsubsubsection}[hang]{\raggedleft\sffamily\bfseries}{%
77
+ \thesubsubsubsection}{1em}{}[\vspace{-3mm}\rule{\textwidth}{1pt}]
78
+ \titlespacing{\subsubsubsection}{0pt}{*1}{\baselineskip}
79
+ \newcounter{subsubsubsection}
80
+ \renewcommand{\thesubsubsubsection}{\thesubsubsection.\arabic{subsubsubsection}}
81
+ \titlecontents{subsubsubsection}[0pt]{}{\thecontentslabel}{}{\titlerule*[8pt]{.}\contentspage}
82
+
83
+ \titleclass{\microsection}{straight}[\subsubsubsection]
84
+ \titleformat{\microsection}[hang]{\vspace{\baselineskip}\sffamily\small\bfseries\slshape}{%
85
+ \themicrosection}{1em}{}
86
+ \titlespacing{\microsection}{0pt}{*1}{\baselineskip}
87
+ \newcounter{microsection}
88
+ \renewcommand{\themicrosection}{\thesubsubsubsection.\arabic{microsection}}
89
+ \titlecontents{microsection}[0pt]{}{\thecontentslabel}{}{\titlerule*[8pt]{.}\contentspage}
90
+
91
+ \titleformat{\part}[hang]{\normalfont\LARGE\scshape\color{blue}}{\thepart}{1em}{}[\vspace{-3mm}\rule{0.6\textwidth}{1mm}]
92
+ \titlespacing{\part}{-1cm}{0pt}{\baselineskip}
93
+
94
+ \newcommand{\class}[2]{\subsection[#1]{{\normalfont\textsc{Class}} {#1}}\vspace{-3mm}{\footnotesize Parent: \texttt{#2}\par\vspace{\baselineskip}}}
95
+ \newcommand{\module}[1]{\subsection[#1]{{\normalfont\textsc{Module}} {#1}}}
96
+ \newcommand{\method}[1]{\subsubsubsection*{#1}}
97
+
98
+
99
+ %Code without specification
100
+ \newcommand{\code}[1]{\texttt{#1}}
101
+
102
+ %Environments for RDoc’s lists
103
+ %1. Completely lower-alpha list
104
+ \newenvironment{lalphaenum}{
105
+ \renewcommand{\theenumi}{\alph{enumi}}
106
+ \renewcommand{\theenumii}{\alph{enumii}}
107
+ \renewcommand{\theenumiii}{\alph{enumiii}}
108
+ \renewcommand{\theenumiv}{\alph{enumiv}}
109
+ \begin{enumerate}}{
110
+ \end{enumerate}
111
+ }
112
+
113
+ %2. Completely upper-alpha list
114
+ \newenvironment{ualphaenum}{
115
+ \renewcommand{\theenumi}{\Alph{enumi}}
116
+ \renewcommand{\theenumii}{\Alph{enumii}}
117
+ \renewcommand{\theenumiii}{\Alph{enumiii}}
118
+ \renewcommand{\theenumiv}{\Alph{enumiv}}
119
+ \begin{enumerate}}{
120
+ \end{enumerate}
121
+ }
122
+
123
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124
+ % Package-specific settings
125
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
126
+
127
+ % fancyvrb
128
+ \fvset{fontsize=\scriptsize}
129
+
130
+ % hyperref
131
+ \hypersetup{colorlinks=true,urlcolor=blue}
132
+ \hypersetup{pdfauthor={Papyrus generator for RDoc},pdftitle={<%= doc_title %>}}
133
+
134
+ % fancyhdr
135
+ \pagestyle{fancy}
136
+ \fancyhf{} %Delete everything
137
+ \fancyhead[L]{\rightmark}
138
+ \fancyhead[R]{\thepage{} / \pageref*{LastPage}}
139
+ \setlength{\headheight}{14.5pt} %Otherwise LaTeX complains
140
+ \renewcommand{\headrulewidth}{0.4pt}
141
+
142
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143
+ % Document start
144
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
145
+
146
+ \begin{document}
147
+
148
+ \begin{titlepage}
149
+ \begin{center}
150
+ \Huge <%= doc_title %>
151
+ \end{center}
152
+ \begin{flushright}
153
+ \rule{4.5cm}{0.1cm}\\
154
+ \normalsize Generated \today\\
155
+ \tiny by the Papyrus generator for RDoc
156
+ \end{flushright}
157
+ \end{titlepage}
158
+
159
+ % Typeset the title page (if any) before the TOC
160
+ %<% if (title_file = @rdoc_files.shift) %>
161
+ \input{<%= render_rdoc_file(title_file) %>}
162
+ %<% end %>
163
+
164
+ \hypersetup{linkcolor=black} %Red TOC looks absolutely awful
165
+ \tableofcontents
166
+ \hypersetup{linkcolor=red} %Restore original link color
167
+ \clearpage
168
+ %
169
+ %Typeset the other RDOc files after the TOC
170
+ %<% @rdoc_files.each do |file| %>
171
+ \input{<%= render_rdoc_file(file) %>}
172
+ %<% end %>
173
+
174
+ \part{Generated Documentation}
175
+
176
+ \section{Methods overview}
177
+ <%= generate_method_toc_table %>
178
+
179
+ \clearpage
180
+
181
+ \section{Class and module reference}
182
+ <% @classes_and_modules.each do |mod| %>
183
+ \input{<%= render_module(mod) %>}\clearpage %Always start a new page for a new class/module
184
+ <% end %>
185
+
186
+ \end{document}
@@ -0,0 +1,110 @@
1
+ % This file is part of RDoc PDF LaTeX.
2
+ %
3
+ % RDoc PDF LaTeX is a RDoc plugin for generating PDF files.
4
+ % Copyright © 2011 Pegasus Alpha
5
+ %
6
+ % RDoc PDF LaTeX is free software; you can redistribute it and/or modify
7
+ % it under the terms of the GNU General Public License as published by
8
+ % the Free Software Foundation; either version 2 of the License, or
9
+ % (at your option) any later version.
10
+ %
11
+ % RDoc PDF LaTeX is distributed in the hope that it will be useful,
12
+ % but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ % GNU General Public License for more details.
15
+ %
16
+ % You should have received a copy of the GNU General Public License
17
+ % along with RDoc PDF LaTeX; if not, write to the Free Software
18
+ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+
20
+ % This ERB template takes the following variables:
21
+ % mod: The module or class (RDoc::ClassModule) to document
22
+ %
23
+ %<% if mod.module? %>
24
+ \module{<%= mod.latexized :full_name %>}\label{<%= mod.latex_label %>}
25
+ % <% else %>
26
+ \class{<%= mod.latexized :full_name %>}{<%= superclass_string(mod.superclass) %>}\label{<%= mod.latex_label %>}
27
+ %<% end %>
28
+
29
+ <%= mod.description %>
30
+
31
+ %<% unless mod.method_list.empty? %>
32
+ \subsubsection*{Method list}
33
+ <%= generate_method_table(mod.method_list) %>
34
+ %<% end %>
35
+
36
+ %<% unless mod.includes.empty? %>
37
+ \subsubsection*{Included Modules}
38
+ \begin{itemize}
39
+ % <% mod.includes.sort_by{|i| i.name}.each do |inc| %>
40
+ \item \texttt{<%= inc.latexized :full_name %>}
41
+ % <% end %>
42
+ \end{itemize}
43
+ %<% end %>
44
+
45
+ %<% consts = mod.constants.sort_by{|c| c.name} %>
46
+ %<% unless consts.empty? %>
47
+ \subsubsection*{Constants}
48
+
49
+ \begin{longtable}{p{0.3\textwidth}|p{0.2\textwidth}|p{0.4\textwidth}}
50
+ \bfseries Name & \bfseries Value & \bfseries Description \\
51
+ \hline
52
+ \endhead
53
+ % <% consts.each do |const| %>
54
+ \label{<%= const.latex_label %>}%
55
+ \small{\code{<%= const.latexized :name %>}} & %
56
+ \small{\code{<%= const.latexized_value %>}} & %
57
+ <%= const.description %> \\
58
+ & & \\ %Empty row for readability
59
+ % <% end %>
60
+ \end{longtable}
61
+ %<% end %>
62
+
63
+ %<% unless mod.attributes.empty? %>
64
+ \subsubsection*{Attributes}
65
+ \begin{description}
66
+ % <% mod.attributes.sort_by{|a| a.name}.each do |att| %>
67
+ \item[\texttt{<%= att.latexized :name %>}]
68
+ \textsf{[<%= att.rw %>]} \label{<%= att.latex_label %>}<%= att.description %>
69
+ % <% end %>
70
+ \end{description}
71
+ %<% end %>
72
+
73
+ %<% unless mod.aliases.empty? %>
74
+ \subsubsection*{Aliases}
75
+ \begin{itemize}
76
+ % <% mod.aliases.sort_by{|a| a.name}.each do |al| %>
77
+ \item \texttt{<%= al.latexized :old_name %>} $\to$ \texttt{<%= al.latexized :new_name %>}
78
+ % <% end %>
79
+ \end{itemize}
80
+ %<% end %>
81
+
82
+ %<% [["Public class methods", true, :public],
83
+ ["Protected class methods", true, :protected],
84
+ ["Private class methods", true, :private],
85
+ ["Public instance methods", false, :public],
86
+ ["Protected instance methods", false, :protected],
87
+ ["Private instance methods", false, :private]].each do |caption, is_singleton, visibility| %>
88
+ % <% meths = mod.method_list.select{|m|m.singleton == is_singleton && m.visibility == visibility}.sort_by{|m| m.name}%>
89
+ %
90
+ % <% unless meths.empty? %>
91
+ \subsubsection*{<%= caption %>}
92
+ % <% meths.each do |meth| %>
93
+ \method{<%= meth.latexized :pretty_name %>}
94
+ \label{<%= meth.latex_label %>}
95
+
96
+ \begin{Verbatim}
97
+ <%= meth.arglists %>
98
+ \end{Verbatim}
99
+
100
+ % <% unless meth.aliases.empty? %>
101
+ \marginpar{\footnotesize\emph{Aliases: <%= meth.aliases.map{|m| hyperref_method(m, false)}.join(", ") %>}}
102
+ % <% end %>
103
+ % <% if meth.is_alias_for %>
104
+ \noindent \emph{Alias for <%= hyperref(meth.latex_label, meth.is_alias_for.latexized(:pretty_name)) %>}
105
+ % <% else %>
106
+ \noindent <%= meth.description %>
107
+ % <% end %>
108
+ % <% end %>
109
+ % <% end %>
110
+ %<% end %>
@@ -0,0 +1,26 @@
1
+ % This file is part of RDoc PDF LaTeX.
2
+ %
3
+ % RDoc PDF LaTeX is a RDoc plugin for generating PDF files.
4
+ % Copyright © 2011 Pegasus Alpha
5
+ %
6
+ % RDoc PDF LaTeX is free software; you can redistribute it and/or modify
7
+ % it under the terms of the GNU General Public License as published by
8
+ % the Free Software Foundation; either version 2 of the License, or
9
+ % (at your option) any later version.
10
+ %
11
+ % RDoc PDF LaTeX is distributed in the hope that it will be useful,
12
+ % but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ % GNU General Public License for more details.
15
+ %
16
+ % You should have received a copy of the GNU General Public License
17
+ % along with RDoc PDF LaTeX; if not, write to the Free Software
18
+ % Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
+
20
+ % This ERB template takes the following variables:
21
+ % rdoc_file: The RDoc::TopLevel do document
22
+ %
23
+ \part{<%= rdoc_file.latexized :name %>}
24
+
25
+ <%= rdoc_file.description %>
26
+ \clearpage
@@ -0,0 +1,22 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file is part of Papyrus.
4
+ #
5
+ # Papyrus is a RDoc plugin for generating PDF files.
6
+ # Copyright © 2011 Pegasus Alpha
7
+ #
8
+ # Papyrus is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Papyrus is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Papyrus; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+
22
+ require_relative "generator/papyrus"
@@ -0,0 +1,174 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # This file is part of Papyrus.
4
+ #
5
+ # Papyrus is a RDoc plugin for generating PDF files.
6
+ # Copyright © 2011 Pegasus Alpha
7
+ #
8
+ # Papyrus is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # Papyrus is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with Papyrus; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+
22
+ #Mixin module mixed into RDoc::CodeObject subclasses in order
23
+ #to overwrite RDoc’s standard RDoc::Generator::Markup mixin module that
24
+ #forces RDoc to HTML output. This module forces RDoc to LaTeX output ;-).
25
+ #
26
+ #Note that just mixing this into RDoc::CodeObject isn’t enough as the
27
+ #RDoc::Generator::Markup module is mixed into the subclasses and
28
+ #would therefore take precedence during method lookup.
29
+ module RDoc::Generator::LaTeX_Markup
30
+
31
+ #Create an unique label for this CodeObject.
32
+ #==Return value
33
+ #A string (hopefully) uniquely identifying this CodeObject. Intended for
34
+ #use as the reference in a <tt>\href</tt> command.
35
+ #==Raises
36
+ #[PapyrusError] +self+ isn’t a CodeObject (→ Context::Section).
37
+ def latex_label
38
+ case self
39
+ when RDoc::Context then "class-module-#{full_name}"
40
+ when RDoc::MethodAttr then "method-attr-#{full_name.gsub('#', '+')}" # '#' doesn’t work in references
41
+ when RDoc::Constant then "const-#{parent.full_name}::#{name}"
42
+ else
43
+ raise(RDoc::Generator::Papyrus::PapyrusError, "Unrecognized token: #{self.inspect}!")
44
+ end
45
+ end
46
+
47
+ #Calls a method of this CodeObject and passes the return value
48
+ #to RDoc::Markup::ToLaTeX#escape.
49
+ #==Parameter
50
+ #[symbol] The symbol of the method (or attribute getter, same in Ruby) to call.
51
+ #[*args] Any arguments to pass to the method.
52
+ #[&block] A block to pass to the method.
53
+ #==Return value
54
+ #A string from which everything LaTeXnically dangerous has been escaped.
55
+ #==Raises
56
+ #[NoMethodError] You passed a +symbol+ of an undefined method.
57
+ def latexized(symbol, *args, &block)
58
+ if respond_to?(symbol)
59
+ formatter.escape(send(symbol, *args, &block).to_s) #formatter method defined below
60
+ else
61
+ raise(NoMethodError, "Requested call to unknown method #{self.class}##{symbol} to be latexized!")
62
+ end
63
+ end
64
+
65
+ #Instanciates the LaTeX formatter if it is necessary and stores it
66
+ #in an instance variable @formatter. This method is automatically
67
+ #called by RDoc to obtain the formatter this generator wants
68
+ #to use.
69
+ #==Return value
70
+ #Returns the newly instanciated or already stored LaTeX formatter.
71
+ def formatter
72
+ return @formatter if defined?(@formatter)
73
+
74
+ @formatter = RDoc::Markup::ToLaTeX_Crossref.new(self.kind_of?(RDoc::Context) ? self : @parent, #Thanks to RDoc for this
75
+ current_heading_level,
76
+ RDoc::RDoc.current.options.show_hash,
77
+ RDoc::RDoc.current.options.show_pages,
78
+ RDoc::RDoc.current.options.hyperlink_all)
79
+ end
80
+
81
+ #Heading depth the formatter is currently in. This is added to
82
+ #any heading request the processed markup mades in order to ensure
83
+ #that the correct LaTeX heading order is always preserved. For example,
84
+ #if the user orders a level 2 heading in a file (the README for instance),
85
+ #he gets a larger heading as if he had ordered a level 2 heading inside a
86
+ #method description.
87
+ def current_heading_level
88
+ case self
89
+ when RDoc::TopLevel then 0
90
+ when RDoc::ClassModule then 1 #Never-ever use level 1 headings apart from TopLevels...
91
+ when RDoc::MethodAttr, RDoc::Alias, RDoc::Constant, RDoc::Include then 3
92
+ else
93
+ 0
94
+ end
95
+ end
96
+ end
97
+
98
+ #FIXME:
99
+ #This *doesn't* overwrite the inclusion in the subclasses that
100
+ #RDoc::Generator::Markup does!! Therefore I need to monkeypatch
101
+ #the subclasses affected by the monkeypatch in markup.rb (RDoc::
102
+ #Generator::Markup) as well! YEAH, workarounds for the workarounds!
103
+
104
+ #class RDoc::CodeObject
105
+ # include RDoc::Generator::LaTeX_Markup
106
+ #end
107
+
108
+ #Note that RDoc::Context::Section is special, as it doesn't inherit
109
+ #from RDoc::CodeObject. For the rest, refer to the comment above.
110
+ [RDoc::Context::Section, RDoc::AnyMethod, RDoc::Attr, RDoc::Include, RDoc::Alias, RDoc::Constant, RDoc::Context].each do |klass|
111
+ klass.send(:include, RDoc::Generator::LaTeX_Markup) #private method
112
+ end
113
+
114
+ class RDoc::Constant
115
+
116
+ #No more characters than specified here will be shown
117
+ #as a constant’s value. If the content is longer, an
118
+ #ellipsis will be put at the end of the value.
119
+ LATEX_VALUE_LENGTH = 10
120
+
121
+ #Shortens the value to LATEX_VALUE_LENGTH characters (plus ellipsis ...)
122
+ #and escapes all LaTeX control characters.
123
+ def latexized_value
124
+ if value.chars.count > LATEX_VALUE_LENGTH
125
+ str = formatter.escape(value.chars.first(LATEX_VALUE_LENGTH).join) + "\\ldots"
126
+ else
127
+ str = formatter.escape(value)
128
+ end
129
+ str
130
+ end
131
+ end
132
+
133
+ class RDoc::AnyMethod
134
+ include Comparable
135
+
136
+ #Compares two methods with each other. A method is considered smaller
137
+ #than another if it is a class method. If +self+ and +other+ are both
138
+ #of the same type (either "class" or "instance"), they’re compared
139
+ #alphabetically.
140
+ #==Parameter
141
+ #[other] The other method to compare with.
142
+ #==Return value
143
+ #-1 if +self+ is smaller than +other+, 0 if they’re equal and
144
+ #+1 if +self+ is bigger than +other+. +nil+ if +other+ isn’t
145
+ #a RDoc::AnyMethod.
146
+ #==Example
147
+ # m1.name #=> foo
148
+ # m1.type #=> instance
149
+ # m2.name #=> bar
150
+ # m2.type #=> instance
151
+ # m3.name #=> foo
152
+ # m3.type #=> class
153
+ #
154
+ # m1 <=> m2 #=> 1
155
+ # m2 <=> m1 #=> -1
156
+ # m1 <=> m3 #=> 1
157
+ # m3 <=> m1 #=> -1
158
+ # m2 <=> m2 #=> 0
159
+ def <=>(other)
160
+ return nil unless other.kind_of?(RDoc::AnyMethod)
161
+
162
+ if type == "class" and other.type == "class" #RDoc uses strings, not symbols?
163
+ name <=> other.name
164
+ elsif type == "class" and other.type == "instance"
165
+ -1
166
+ elsif type == "instance" and other.type == "class"
167
+ 1
168
+ elsif type == "instance" and other.type == "instance"
169
+ name <=> other.name
170
+ else #Shouldn’t be
171
+ nil
172
+ end
173
+ end
174
+ end