emerald 0.0.1.alpha4 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,140 +0,0 @@
1
- = Legal stuff
2
-
3
- Emerald uses some code from RDoc (currently maintained by Eric Hodel)
4
- and it’s Darkfish generator (written by Michael Granger) as well as
5
- some of Darkfish’s iconset, which in turn was taken from the Silk
6
- iconset by Mark James. See below for all those copying conditions.
7
-
8
- For Emerald’s own licensing conditions, see the file COPYING.rdoc.
9
-
10
- == RDoc license
11
-
12
- RDoc is copyrighted free software.
13
-
14
- You can redistribute it and/or modify it under either the terms of the GPL
15
- version 2 (see the file GPL), or the conditions below:
16
-
17
- 1. You may make and give away verbatim copies of the source form of the
18
- software without restriction, provided that you duplicate all of the
19
- original copyright notices and associated disclaimers.
20
-
21
- 2. You may modify your copy of the software in any way, provided that
22
- you do at least ONE of the following:
23
-
24
- a. place your modifications in the Public Domain or otherwise
25
- make them Freely Available, such as by posting said
26
- modifications to Usenet or an equivalent medium, or by allowing
27
- the author to include your modifications in the software.
28
-
29
- b. use the modified software only within your corporation or
30
- organization.
31
-
32
- c. give non-standard binaries non-standard names, with
33
- instructions on where to get the original software distribution.
34
-
35
- d. make other distribution arrangements with the author.
36
-
37
- 3. You may distribute the software in object code or binary form,
38
- provided that you do at least ONE of the following:
39
-
40
- a. distribute the binaries and library files of the software,
41
- together with instructions (in the manual page or equivalent)
42
- on where to get the original distribution.
43
-
44
- b. accompany the distribution with the machine-readable source of
45
- the software.
46
-
47
- c. give non-standard binaries non-standard names, with
48
- instructions on where to get the original software distribution.
49
-
50
- d. make other distribution arrangements with the author.
51
-
52
- 4. You may modify and include the part of the software into any other
53
- software (possibly commercial). But some files in the distribution
54
- are not written by the author, so that they are not under these terms.
55
-
56
- For the list of those files and their copying conditions, see the
57
- file LEGAL[http://rdoc.rubyforge.org/LEGAL_rdoc.html].
58
-
59
- 5. The scripts and library files supplied as input to or produced as
60
- output from the software do not automatically fall under the
61
- copyright of the software, but belong to whomever generated them,
62
- and may be sold commercially, and may be aggregated with this
63
- software.
64
-
65
- 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
66
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
67
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
68
- PURPOSE.
69
-
70
- == Darkfish license
71
-
72
- Darkfish was written by Michael Granger and is included under the MIT
73
- license. Darkfish contains images from the Silk Icons set by Mark
74
- James.
75
-
76
- === Author/s
77
- * Michael Granger (ged@FaerieMUD.org)
78
-
79
- === Contributors
80
- * Mahlon E. Smith (mahlon@martini.nu)
81
- * Eric Hodel (drbrain@segment7.net)
82
-
83
- === License
84
-
85
- Copyright (c) 2007, 2008, Michael Granger. All rights reserved.
86
-
87
- Redistribution and use in source and binary forms, with or without
88
- modification, are permitted provided that the following conditions are met:
89
-
90
- * Redistributions of source code must retain the above copyright notice,
91
- this list of conditions and the following disclaimer.
92
-
93
- * Redistributions in binary form must reproduce the above copyright notice,
94
- this list of conditions and the following disclaimer in the documentation
95
- and/or other materials provided with the distribution.
96
-
97
- * Neither the name of the author/s, nor the names of the project's
98
- contributors may be used to endorse or promote products derived from this
99
- software without specific prior written permission.
100
-
101
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
102
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
103
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
104
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
105
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
106
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
107
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
108
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
109
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
110
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
111
-
112
- === Attributions
113
-
114
- Darkfish uses the {Silk Icons}[http://www.famfamfam.com/lab/icons/silk/] set
115
- by Mark James.
116
-
117
- == jQuery license
118
-
119
- Copyright 2012 jQuery Foundation and other contributors
120
-
121
- http://jquery.com/
122
-
123
- Permission is hereby granted, free of charge, to any person obtaining
124
- a copy of this software and associated documentation files (the
125
- "Software"), to deal in the Software without restriction, including
126
- without limitation the rights to use, copy, modify, merge, publish,
127
- distribute, sublicense, and/or sell copies of the Software, and to
128
- permit persons to whom the Software is furnished to do so, subject to
129
- the following conditions:
130
-
131
- The above copyright notice and this permission notice shall be
132
- included in all copies or substantial portions of the Software.
133
-
134
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
135
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
136
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
137
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
138
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
139
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
140
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,119 +0,0 @@
1
- = Emerald -- Make your Ruby documentation a jewel, too
2
-
3
- You think Darkfish is the worst RDoc generator ever? Got lost in SDoc
4
- and Horo documentations? Found Hanna buggy and dislike frames? Then
5
- this is for you: Emerald, the only RDoc template which makes your Ruby
6
- docs a jewel, too.
7
-
8
- Emerald is a generator for RDoc[http://rdoc.rubyforge.org], i.e. a
9
- plugin that replaces RDoc’s standard _Darkfish_ generator from which
10
- many people (myself included) think it’s the ugliest RDoc layouting
11
- engine that ever was around. If you want nice and modern documentation
12
- that allows you to retain overview over a library, Emerald is the
13
- generator you want to use.
14
-
15
- == Installation
16
-
17
- Emerald is currently Alpha software. Use it at your own risk.
18
-
19
- Get the current development release via RubyGems:
20
-
21
- # gem install emerald --pre
22
-
23
- If you want the latest version, check out the Git repisitory and build
24
- the gem yourself:
25
-
26
- $ git clone git://github.com/Quintus/emerald
27
- $ cd emarald
28
- $ rake gem
29
- $ gem install pkg/emerald-x.x.x.gem
30
-
31
- == Usage
32
-
33
- From the commandline:
34
-
35
- $ rdoc -f emerald YOURFILESHERE
36
-
37
- From a rake RDoc::Task:
38
-
39
- require "rdoc/task"
40
- require "rdoc/generator/emerald"
41
-
42
- RDoc::Task.new do |rt|
43
- # Your option stuff...
44
- rt.generator = "emerald"
45
- end
46
-
47
- == Features
48
-
49
- * Default theme has is centered around light blue/grey, just as Hanna was.
50
- * No frames.
51
- * Uses jQuery[http://jquery.com].
52
- * Generates a Table of Contents (ToC) for toplevel file docs (so yes,
53
- your README will have a ToC).
54
- * Classical file/class/method indices for best overview.
55
- * Regular-Expression-powered JavaScript search.
56
- * Darkfish-link compatible, i.e. if you switch to Emerald from Darkfish,
57
- the old links to your documentation will still work.
58
- * But note this is not the case for the other way round, as Emerald
59
- allows you linking to more stuff.
60
- * GPL’ed. Free software.
61
- * And more...
62
-
63
- == Weblinks
64
-
65
- * Sourcecode: https://github.com/Quintus/emerald
66
- * Bugtracker: https://github.com/Quintus/emerald/issues
67
-
68
- == Caveats
69
-
70
- * ToC generation only works for proper heading nestings, especially it
71
- assumes your page to have <b>exactly one</b> level-1 heading. Having more
72
- of these is bad style, and Emerald wants to encourage good
73
- documentation/markup style.
74
- * The search uses JavaScript’s regular expressions, so the quite
75
- advanced constructs you can create with Ruby’s Regular Expressions
76
- won’t work with all cases. But don’t tell me you search your API
77
- documentation with constructs like <tt>\A(?>[^ab]q)\s*%.*stuff(?<!badstuff)\w{2,4}(?:$|\\\\)</tt>.
78
- * Emerald is a bit slow at the moment. However, I did not optimise it
79
- for speed. This may or may not change in the future.
80
-
81
- == Thanks
82
-
83
- Thanks to Eric Hodel keeping RDoc in an active and alive
84
- state. Without this, there would be no point in developing
85
- Emerald. Next my gratitude is dedicated at {Mislav
86
- Marohnić}[https://github.com/mislav] for creating the {Hanna RDoc
87
- template}[https://github.com/mislav/hanna], which sadly is not
88
- maintained anymore, but was a big inspiration for Emerald and its
89
- default theme, and to everyone on the web who posted something on
90
- RDoc’s internals. Without you, it wouldn’t have been possible to get
91
- Emerald to where it currently is.
92
-
93
- == License
94
-
95
- Emerald is an RDoc HTML generator.
96
-
97
- Copyright © 2012 Marvin Gülker
98
-
99
- This program is free software: you can redistribute it and/or modify
100
- it under the terms of the GNU General Public License as published by
101
- the Free Software Foundation, either version 3 of the License, or
102
- (at your option) any later version.
103
-
104
- This program is distributed in the hope that it will be useful,
105
- but WITHOUT ANY WARRANTY; without even the implied warranty of
106
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
107
- GNU General Public License for more details.
108
-
109
- You should have received a copy of the GNU General Public License
110
- along with this program. If not, see <http://www.gnu.org/licenses/>.
111
-
112
- === Additional notes
113
-
114
- * You can find the GNU GPL in the file COPYING.rdoc.
115
- * This project incorporates some code and data (mainly images) from
116
- RDoc and the projects RDoc in turn uses stuff from. See the file
117
- LEGAL.rdoc for more information. Same goes for the jQuery licensing
118
- conditions.
119
- * You can contact me at quintus ÄT quintilianus DÖT eu.
@@ -1,4 +0,0 @@
1
- # Discovery file for RDoc to recognise this
2
- # generator.
3
-
4
- require_relative "generator/emerald"
@@ -1,304 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- gem "rdoc"
3
-
4
- require "pathname"
5
- require "fileutils"
6
- require "erb"
7
- require "rdoc/rdoc"
8
- require "rdoc/generator"
9
-
10
- # This is the main generator class that is instanciated by RDoc when
11
- # you order it to use the _emerald_ generator. It mainly works on
12
- # ERB template files you can find in the <b>data/templates</b> directory,
13
- # where each major component (read: classes and toplevel files) has a
14
- # template file that is evaluated for it. The result is then injected
15
- # into the layout template, <b>data/templates/layout.html.erb</b>, which
16
- # is then evaluated as well.
17
- #
18
- # == About relative paths
19
- # As the output generated by RDoc is supposed to be viewable by both
20
- # visiting the doc/ directory with a browser and providing the doc/
21
- # directory to an HTTP server, effectively making it the root directory,
22
- # care has been taken to only use relative links in all the static HTML
23
- # files. The key component for this to work is the #root_path method,
24
- # which is called to set the relative path to the root directory (i.e.
25
- # the output directory). When called without an argument, #root_path
26
- # returns the value previously remembered (usually it contains a good
27
- # number of <b>../</b> entries). This way, the root directory can be
28
- # set whenever a new HTML file is going to be outputted and can then
29
- # be referenced from the ERB template.
30
- #
31
- # == Darkfish compatibility
32
- # RDoc’s HTML formatter has a good number of helper methods that
33
- # have a strong hint regarding "where what belongs". By using these
34
- # helper methods itself when creating cross-references, the HTML
35
- # formatter enforces both the directory structure of the output
36
- # directory and the anchor names used for references inside a single
37
- # HTML file. The only way to circumvent this is to write another
38
- # formatter, which I don’t intend to as the standard HTML formatter
39
- # does a good job for HTML stuff. A nice side effect is that Emerald’s
40
- # documentation is compatible with Darkfish’s one when it comes to links
41
- # to specific elements. For example, you can create a link to a method
42
- # called Foo::Bar#baz somewhere on the web, and if the destinatinon
43
- # website chooses to switch from Darkfish output to Emerald (which I
44
- # hope!), the link will continue to work.
45
- class RDoc::Generator::Emerald
46
- include FileUtils
47
-
48
- # Generic exception class for this generator.
49
- class EmeraldError < StandardError
50
- end
51
-
52
- # Minimal RDoc::Toplevel-alike object (i.e. it responds to the
53
- # two methods required for rendering it, +full_name+ and
54
- # +description+) that is used to create the index page if
55
- # none was set. I really recommend to manually set a
56
- # useful index page!
57
- DummyStartPage = Struct.new(:full_name, :description) do
58
- def initialize
59
- super()
60
- self.full_name = "Start page"
61
- self.description =<<-DESC
62
- <h1>RDoc documentation</h1>
63
- <p>This is a dummy start page for the RDoc documentation of this project.</p>
64
- <p>You’re seeing it, because the original author didn’t specify a real start
65
- page for this project’s documentation, so you may want to contact him and
66
- make him aware of this.</p>
67
- <p>If you <em>are</em> the original author, try one or both of the following
68
- code snippets to make your <strong>README.rdoc</strong> file the start
69
- page of your documentation:</p>
70
- <pre>
71
- # In your gemspec:
72
- Gem::Specification.new do |spec|
73
- # ...
74
- # "-m" sets the start ("main") page. "-t" specifies
75
- # the title to display in the window title bar.
76
- spec.rdoc_options << "-m" << "README.rdoc" << "-t" "Docs for YourProject"
77
- end
78
-
79
- # In your Rakefile:
80
- RDoc::Task.new do |rt|
81
- # ...
82
- # Sets the start ("main") page and specifies the
83
- # title to display in the window title bar:
84
- rt.main = "README.rdoc"
85
- rt.title = "Docs for YourProject"
86
- end
87
- </pre>
88
- <p>For the time being, use the navigation sidebar to the left
89
- in order to read this documentation.</p>
90
- DESC
91
- end
92
- end
93
-
94
- # Tell RDoc about the new generator
95
- RDoc::RDoc.add_generator(self)
96
-
97
- # Description displayed in RDoc’s help.
98
- DESCRIPTION = "The only RDoc generator that makes your Ruby documentation a jewel, too"
99
-
100
- # Root directory of this project.
101
- ROOT_DIR = Pathname.new(__FILE__).dirname.parent.parent.parent
102
-
103
- # Where to find the non-code stuff.
104
- DATA_DIR = ROOT_DIR + "data"
105
-
106
- # Main template used as the general layout.
107
- LAYOUT_TEMPLATE = ERB.new(File.read(DATA_DIR + "templates" + "layout.html.erb"))
108
-
109
- # Subtemplates injected into the main template.
110
- TEMPLATES = {
111
- :toplevel => ERB.new(File.read(DATA_DIR + "templates" + "toplevel.html.erb")),
112
- :classmodule => ERB.new(File.read(DATA_DIR + "templates" + "classmodule.html.erb"))
113
- }
114
-
115
- # The version number.
116
- VERSION = File.read(ROOT_DIR + "VERSION").chomp.freeze
117
-
118
- # Add additional options to RDoc (see the
119
- # RDoc::Generator::Emerald::Options module).
120
- def self.setup_options(options)
121
- options.extend(RDoc::Generator::Emerald::Options)
122
- end
123
-
124
- # Instanciates this generator. Automatically called
125
- # by RDoc.
126
- # ==Parameter
127
- # [options]
128
- # RDoc passed the current RDoc::Options instance.
129
- def initialize(options)
130
- @options = options
131
- @op_dir = Pathname.pwd.expand_path + @options.op_dir
132
- end
133
-
134
- # Outputs a string on standard output, but only if RDoc
135
- # was invoked with the <tt>--debug</tt> switch.
136
- def debug(str)
137
- puts(str) if $DEBUG_RDOC
138
- end
139
-
140
- # Main hook method called by RDoc, triggers the generation process.
141
- def generate(top_levels)
142
- debug "Sorting classes, modules, and methods..."
143
- @toplevels = top_levels
144
- @classes_and_modules = RDoc::TopLevel.all_classes_and_modules.sort_by{|klass| klass.full_name}
145
- @methods = @classes_and_modules.map{|mod| mod.method_list}.flatten.sort
146
-
147
- # Create the output directory
148
- mkdir @op_dir unless @op_dir.exist?
149
-
150
- copy_base_files
151
- evaluate_toplevels
152
- evaluate_classes_and_modules
153
-
154
- unless @options.main_page # If set, #evaluate_toplevels creates the index.html for us
155
- toplevel = DummyStartPage.new
156
- root_path "./" # This *is* in the toplevel
157
- File.open(@op_dir + "index.html", "w") do |file|
158
- file.write(render(:toplevel, binding))
159
- end
160
- end
161
- end
162
-
163
- # Darkfish returns +nil+, hence we do this as well.
164
- def file_dir
165
- nil
166
- end
167
-
168
- # Darkfish returns +nil+, hence we do this as well.
169
- def class_dir
170
- nil
171
- end
172
-
173
- protected
174
-
175
- # Set/get the root directory.
176
- # == Parameter
177
- # [set_to (nil)]
178
- # If passed, this method _sets_ the root directory rather
179
- # than returning it.
180
- # == Return value
181
- # The current relative path to the root directory.
182
- # == Remarks
183
- # See the class’ introductory text for more information
184
- # on this.
185
- def root_path(set_to = nil)
186
- if set_to
187
- @root_path = Pathname.new(set_to)
188
- else
189
- @root_path ||= Pathname.new("./")
190
- end
191
- end
192
-
193
- # Set/get the page title.
194
- # == Parameter
195
- # [set_to (nil)]
196
- # If passed, this method _sets_ the title rather
197
- # than returning it.
198
- # == Return value
199
- # The current page title.
200
- # == Remarks
201
- # Works the same way as #root_path.
202
- def title(set_to = nil)
203
- if set_to
204
- @title = set_to
205
- else
206
- @title ||= ""
207
- end
208
- end
209
-
210
- # Takes a RDoc::TopLevel and transforms it into a complete pathname
211
- # relative to the output directory. Filename alterations
212
- # done by RDoc’s crossref-HTML formatter are honoured. Note you
213
- # have to prepend #root_path to get a complete href.
214
- def rdocize_toplevel(toplevel)
215
- Pathname.new("#{toplevel.relative_name.gsub(".", "_")}.html")
216
- end
217
-
218
- # Takes a RDoc::ClassModule and transforms it into a complete pathname
219
- # relative to the output directory. Filename alterations
220
- # done by RDoc’s crossref-HTML formatter are honoured. Note you
221
- # have to prepend #root_path to get a complete href.
222
- def rdocize_classmod(classmod)
223
- Pathname.new("#{classmod.full_name.split("::").join("/")}.html")
224
- end
225
-
226
- private
227
-
228
- def copy_base_files
229
- debug "Copying base base files..."
230
- mkdir @op_dir + "stylesheets" unless File.directory?(@op_dir + "stylesheets")
231
-
232
- cp Dir[DATA_DIR + "stylesheets" + "*.css"], @op_dir + "stylesheets"
233
- cp_r DATA_DIR + "javascripts", @op_dir
234
- cp_r DATA_DIR + "images", @op_dir
235
- end
236
-
237
- def evaluate_toplevels
238
- @toplevels.each do |toplevel|
239
- debug "Processing toplevel #{toplevel.name}..."
240
-
241
- root_path("../" * (toplevel.relative_name.split("/").count - 1)) # Last component is a filename
242
- title toplevel.relative_name
243
-
244
- # Create the path to the file if necessary
245
- path = @op_dir + rdocize_toplevel(toplevel)
246
- mkdir_p path.parent unless path.parent.exist?
247
-
248
- # Evaluate the actual file documentation
249
- File.open(path, "w") do |file|
250
- debug " => #{path}"
251
- file.write(render(:toplevel, binding))
252
- end
253
-
254
- # If this toplevel is supposed to be the main file,
255
- # copy it’s content to the index.html file.
256
- if toplevel.relative_name == @options.main_page
257
- debug " => This is the main page. Writing index.html."
258
-
259
- root_path "./" # We *are* at the top here
260
-
261
- File.open(@op_dir + "index.html", "w") do |file|
262
- file.write(render(:toplevel, binding))
263
- end
264
- end
265
- end
266
- end
267
-
268
- def evaluate_classes_and_modules
269
- @classes_and_modules.each do |classmod|
270
- debug "Processing class/module #{classmod.full_name} (#{classmod.method_list.count} methods)..."
271
-
272
- path = @op_dir + rdocize_classmod(classmod)
273
-
274
- mkdir_p path.parent unless path.parent.directory?
275
- title classmod.full_name
276
- root_path "../" * (classmod.full_name.split("::").count - 1) # Last element is a file
277
-
278
-
279
- File.open(path, "w") do |file|
280
- debug " => #{path}"
281
- file.write(render(:classmodule, binding))
282
- end
283
- end
284
- end
285
-
286
- # Renders the subtemplate +template_name+ in the +context+ of the
287
- # given binding, then injects it into the main template (which is
288
- # evaluated in the same +context+).
289
- #
290
- # Returns the resulting string.
291
- def render(template_name, context)
292
- render_into_layout{TEMPLATES[template_name].result(context)}
293
- end
294
-
295
- # Renders into the main layout. The return value of the block
296
- # passed to this method will be placed in the layout in place
297
- # of the +yield+ expression.
298
- def render_into_layout
299
- LAYOUT_TEMPLATE.result(binding)
300
- end
301
-
302
- end
303
-
304
- require_relative "emerald/options"