ctioga2 0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +339 -0
- data/Changelog +6 -0
- data/bin/ctioga2 +26 -0
- data/lib/ctioga2/commands/arguments.rb +58 -0
- data/lib/ctioga2/commands/commands.rb +258 -0
- data/lib/ctioga2/commands/doc/doc.rb +118 -0
- data/lib/ctioga2/commands/doc/documentation-commands.rb +119 -0
- data/lib/ctioga2/commands/doc/help.rb +95 -0
- data/lib/ctioga2/commands/doc/html.rb +230 -0
- data/lib/ctioga2/commands/doc/introspection.rb +211 -0
- data/lib/ctioga2/commands/doc/man.rb +279 -0
- data/lib/ctioga2/commands/doc/markup.rb +359 -0
- data/lib/ctioga2/commands/general-commands.rb +119 -0
- data/lib/ctioga2/commands/general-types.rb +118 -0
- data/lib/ctioga2/commands/groups.rb +73 -0
- data/lib/ctioga2/commands/interpreter.rb +257 -0
- data/lib/ctioga2/commands/parsers/command-line.rb +187 -0
- data/lib/ctioga2/commands/parsers/file.rb +186 -0
- data/lib/ctioga2/commands/strings.rb +303 -0
- data/lib/ctioga2/commands/type.rb +100 -0
- data/lib/ctioga2/commands/variables.rb +101 -0
- data/lib/ctioga2/data/backends/backend.rb +260 -0
- data/lib/ctioga2/data/backends/backends.rb +39 -0
- data/lib/ctioga2/data/backends/backends/gnuplot.rb +140 -0
- data/lib/ctioga2/data/backends/backends/math.rb +121 -0
- data/lib/ctioga2/data/backends/backends/text.rb +335 -0
- data/lib/ctioga2/data/backends/description.rb +405 -0
- data/lib/ctioga2/data/backends/factory.rb +73 -0
- data/lib/ctioga2/data/backends/parameter.rb +109 -0
- data/lib/ctioga2/data/datacolumn.rb +245 -0
- data/lib/ctioga2/data/dataset.rb +233 -0
- data/lib/ctioga2/data/filters.rb +131 -0
- data/lib/ctioga2/data/merge.rb +43 -0
- data/lib/ctioga2/data/point.rb +72 -0
- data/lib/ctioga2/data/stack.rb +294 -0
- data/lib/ctioga2/graphics/coordinates.rb +73 -0
- data/lib/ctioga2/graphics/elements.rb +111 -0
- data/lib/ctioga2/graphics/elements/containers.rb +111 -0
- data/lib/ctioga2/graphics/elements/curve2d.rb +155 -0
- data/lib/ctioga2/graphics/elements/element.rb +90 -0
- data/lib/ctioga2/graphics/elements/primitive.rb +256 -0
- data/lib/ctioga2/graphics/elements/subplot.rb +140 -0
- data/lib/ctioga2/graphics/generator.rb +68 -0
- data/lib/ctioga2/graphics/legends.rb +108 -0
- data/lib/ctioga2/graphics/legends/area.rb +199 -0
- data/lib/ctioga2/graphics/legends/items.rb +183 -0
- data/lib/ctioga2/graphics/legends/provider.rb +58 -0
- data/lib/ctioga2/graphics/legends/storage.rb +65 -0
- data/lib/ctioga2/graphics/root.rb +209 -0
- data/lib/ctioga2/graphics/styles.rb +30 -0
- data/lib/ctioga2/graphics/styles/axes.rb +247 -0
- data/lib/ctioga2/graphics/styles/background.rb +122 -0
- data/lib/ctioga2/graphics/styles/base.rb +115 -0
- data/lib/ctioga2/graphics/styles/carrays.rb +53 -0
- data/lib/ctioga2/graphics/styles/curve.rb +101 -0
- data/lib/ctioga2/graphics/styles/drawable.rb +87 -0
- data/lib/ctioga2/graphics/styles/factory.rb +351 -0
- data/lib/ctioga2/graphics/styles/legend.rb +63 -0
- data/lib/ctioga2/graphics/styles/plot.rb +410 -0
- data/lib/ctioga2/graphics/styles/sets.rb +64 -0
- data/lib/ctioga2/graphics/styles/texts.rb +277 -0
- data/lib/ctioga2/graphics/subplot-commands.rb +141 -0
- data/lib/ctioga2/graphics/types.rb +188 -0
- data/lib/ctioga2/graphics/types/bijection.rb +79 -0
- data/lib/ctioga2/graphics/types/boundaries.rb +170 -0
- data/lib/ctioga2/graphics/types/boxes.rb +157 -0
- data/lib/ctioga2/graphics/types/dimensions.rb +157 -0
- data/lib/ctioga2/graphics/types/point.rb +247 -0
- data/lib/ctioga2/log.rb +97 -0
- data/lib/ctioga2/metabuilder/type.rb +316 -0
- data/lib/ctioga2/metabuilder/types.rb +39 -0
- data/lib/ctioga2/metabuilder/types/coordinates.rb +124 -0
- data/lib/ctioga2/metabuilder/types/dates.rb +43 -0
- data/lib/ctioga2/metabuilder/types/lists.rb +188 -0
- data/lib/ctioga2/metabuilder/types/numbers.rb +97 -0
- data/lib/ctioga2/metabuilder/types/strings.rb +93 -0
- data/lib/ctioga2/metabuilder/types/styles.rb +178 -0
- data/lib/ctioga2/plotmaker.rb +677 -0
- data/lib/ctioga2/postprocess.rb +115 -0
- data/lib/ctioga2/utils.rb +120 -0
- data/setup.rb +1586 -0
- metadata +144 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
# doc.rb: a class holding all informations
|
2
|
+
# copyright (c) 2009 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
require 'ctioga2/utils'
|
15
|
+
require 'ctioga2/commands/commands'
|
16
|
+
require 'ctioga2/commands/doc/markup'
|
17
|
+
|
18
|
+
module CTioga2
|
19
|
+
|
20
|
+
Version::register_svn_info('$Revision: 61 $', '$Date: 2009-05-29 01:00:56 +0200 (Fri, 29 May 2009) $')
|
21
|
+
|
22
|
+
module Commands
|
23
|
+
|
24
|
+
# The base of the 'self-documentation' of CTioga2
|
25
|
+
module Documentation
|
26
|
+
|
27
|
+
# The base class for all documentation.
|
28
|
+
#
|
29
|
+
# TODO: create a class that would parse a description from a
|
30
|
+
# group/command/type and understand some 'markup': lists, links
|
31
|
+
# to other commands/groups/types, and maybe bold or things of
|
32
|
+
# this kind. Then the various outputs should have a means to
|
33
|
+
# parse this.
|
34
|
+
class Doc
|
35
|
+
|
36
|
+
# The hash containing all the commands, as returned
|
37
|
+
# by Interpreter::commands.
|
38
|
+
attr_accessor :commands
|
39
|
+
|
40
|
+
# The hash containing all the groups, as returned
|
41
|
+
# by Interpreter::commands.
|
42
|
+
attr_accessor :groups
|
43
|
+
|
44
|
+
# The hash containing all the types, as returned
|
45
|
+
# by Interpreter::commands.
|
46
|
+
attr_accessor :types
|
47
|
+
|
48
|
+
# Wether or not to ignore blacklisted commands
|
49
|
+
attr_accessor :ignore_blacklisted
|
50
|
+
|
51
|
+
# The CommandLineHelp object in charge of displaying
|
52
|
+
# information about command-line
|
53
|
+
attr_accessor :command_line_help
|
54
|
+
|
55
|
+
|
56
|
+
# Create a Doc object caring about the current state of
|
57
|
+
# registered commands and such.
|
58
|
+
def initialize
|
59
|
+
@commands = Interpreter::commands
|
60
|
+
@groups = Interpreter::groups
|
61
|
+
@types = Interpreter::types
|
62
|
+
|
63
|
+
@ignore_blacklisted = ! (ENV.key?("CT2_DEV") &&
|
64
|
+
! ENV["CT2_DEV"].empty?)
|
65
|
+
|
66
|
+
@command_line_help = CommandLineHelp.new
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns a [ cmds, groups ] hash containing the list of
|
70
|
+
# commands, and the groups to be documented.
|
71
|
+
def documented_commands
|
72
|
+
cmds = group_commands
|
73
|
+
|
74
|
+
groups = cmds.keys.sort do |a,b|
|
75
|
+
if ! a
|
76
|
+
1
|
77
|
+
elsif ! b
|
78
|
+
-1
|
79
|
+
else
|
80
|
+
a.priority <=> b.priority
|
81
|
+
end
|
82
|
+
end
|
83
|
+
if @ignore_blacklisted
|
84
|
+
groups.delete_if {|g| g && g.blacklisted }
|
85
|
+
end
|
86
|
+
return [cmds, groups]
|
87
|
+
end
|
88
|
+
|
89
|
+
# Display command-line help.
|
90
|
+
def display_command_line_help
|
91
|
+
@command_line_help.
|
92
|
+
print_commandline_options(*self.documented_commands)
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
|
97
|
+
|
98
|
+
# Groups Command by CommandGroup, _nil_ being a proper value,
|
99
|
+
# and return the corresponding hash.
|
100
|
+
def group_commands
|
101
|
+
ret_val = {}
|
102
|
+
for name, cmd in @commands
|
103
|
+
group = cmd.group
|
104
|
+
if ret_val.key?(group)
|
105
|
+
ret_val[group] << cmd
|
106
|
+
else
|
107
|
+
ret_val[group] = [cmd]
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
return ret_val
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# doc.rb: a class holding all informations
|
2
|
+
# copyright (c) 2009 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
require 'ctioga2/utils'
|
15
|
+
require 'ctioga2/commands/commands'
|
16
|
+
require 'ctioga2/commands/doc/help'
|
17
|
+
require 'ctioga2/commands/doc/man'
|
18
|
+
require 'ctioga2/commands/doc/html'
|
19
|
+
require 'ctioga2/commands/doc/markup'
|
20
|
+
|
21
|
+
module CTioga2
|
22
|
+
|
23
|
+
Version::register_svn_info('$Revision: 77 $', '$Date: 2009-06-05 00:20:49 +0200 (Fri, 05 Jun 2009) $')
|
24
|
+
|
25
|
+
module Commands
|
26
|
+
|
27
|
+
# The base of the 'self-documentation' of CTioga2
|
28
|
+
module Documentation
|
29
|
+
|
30
|
+
|
31
|
+
# Documentation generation
|
32
|
+
DocumentationGenerationGroup =
|
33
|
+
CmdGroup.new('doc', "Documentation generation",
|
34
|
+
"Automatic documentation generation.",
|
35
|
+
1000, true)
|
36
|
+
|
37
|
+
|
38
|
+
# Display help on the command-line
|
39
|
+
WriteManualPage =
|
40
|
+
Cmd.new("write-manual-page", nil, "--write-man",
|
41
|
+
[
|
42
|
+
CmdArg.new('text', 'version'),
|
43
|
+
CmdArg.new('file'),
|
44
|
+
]) do |plotmaker, version, file|
|
45
|
+
m = Man.new(plotmaker.interpreter.doc)
|
46
|
+
m.write_manual_page(version, file)
|
47
|
+
end
|
48
|
+
|
49
|
+
WriteManualPage.describe("Writes a manual page based on a template",
|
50
|
+
<<EOH, DocumentationGenerationGroup)
|
51
|
+
Writes a manual page based on a template
|
52
|
+
EOH
|
53
|
+
|
54
|
+
|
55
|
+
WriteHTMLCommands =
|
56
|
+
Cmd.new("write-html-commands", nil, "--write-html-commands",
|
57
|
+
[]) do |plotmaker|
|
58
|
+
html = HTML.new(plotmaker.interpreter.doc)
|
59
|
+
html.write_commands()
|
60
|
+
end
|
61
|
+
|
62
|
+
WriteHTMLCommands.describe("HTML documentation for group and commands",
|
63
|
+
<<EOH, DocumentationGenerationGroup)
|
64
|
+
Prints the HTML documentation for group and commands to standard output.
|
65
|
+
EOH
|
66
|
+
|
67
|
+
WriteHTMLTypes =
|
68
|
+
Cmd.new("write-html-types", nil, "--write-html-types",
|
69
|
+
[]) do |plotmaker|
|
70
|
+
html = HTML.new(plotmaker.interpreter.doc)
|
71
|
+
html.write_types()
|
72
|
+
end
|
73
|
+
|
74
|
+
WriteHTMLTypes.describe("HTML documentation for types",
|
75
|
+
<<EOH, DocumentationGenerationGroup)
|
76
|
+
Prints the HTML documentation for all types.
|
77
|
+
EOH
|
78
|
+
|
79
|
+
WriteHTMLCommandLineOptions =
|
80
|
+
Cmd.new("write-html-commandline", nil, "--write-html-commandline",
|
81
|
+
[]) do |plotmaker|
|
82
|
+
html = HTML.new(plotmaker.interpreter.doc)
|
83
|
+
html.write_command_line_options()
|
84
|
+
end
|
85
|
+
|
86
|
+
WriteHTMLCommandLineOptions.describe("HTML documentation for types",
|
87
|
+
<<EOH, DocumentationGenerationGroup)
|
88
|
+
Prints a table summary of command-line options.
|
89
|
+
EOH
|
90
|
+
|
91
|
+
DumpCommandMarkup =
|
92
|
+
Cmd.new("dump-command-markup", nil, "--dump-command-markup",
|
93
|
+
[]) do |plotmaker|
|
94
|
+
markup = Markup.new(plotmaker.interpreter.doc)
|
95
|
+
markup.write_commands()
|
96
|
+
end
|
97
|
+
|
98
|
+
DumpCommandMarkup.describe("Dump markup for commands and groups",
|
99
|
+
<<EOH, DocumentationGenerationGroup)
|
100
|
+
Dumps the parsed markup for commands and groups. Used for debugging
|
101
|
+
purposes.
|
102
|
+
EOH
|
103
|
+
|
104
|
+
DumpTypesMarkup =
|
105
|
+
Cmd.new("dump-types-markup", nil, "--dump-types-markup",
|
106
|
+
[]) do |plotmaker|
|
107
|
+
markup = Markup.new(plotmaker.interpreter.doc)
|
108
|
+
markup.write_types()
|
109
|
+
end
|
110
|
+
|
111
|
+
DumpTypesMarkup.describe("Dump markup for types and groups",
|
112
|
+
<<EOH, DocumentationGenerationGroup)
|
113
|
+
Dumps the parsed markup for types and groups. Used for debugging
|
114
|
+
purposes.
|
115
|
+
EOH
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# help.rb: displaying the documentation of commands
|
2
|
+
# copyright (c) 2009 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
require 'ctioga2/utils'
|
15
|
+
require 'ctioga2/commands/commands'
|
16
|
+
require 'ctioga2/commands/parsers/command-line'
|
17
|
+
|
18
|
+
module CTioga2
|
19
|
+
|
20
|
+
Version::register_svn_info('$Revision: 34 $', '$Date: 2009-05-03 20:22:29 +0200 (Sun, 03 May 2009) $')
|
21
|
+
|
22
|
+
module Commands
|
23
|
+
|
24
|
+
module Documentation
|
25
|
+
|
26
|
+
# Displays help about command-line options and such.
|
27
|
+
class CommandLineHelp
|
28
|
+
|
29
|
+
# How much space to leave for the options ?
|
30
|
+
attr_accessor :options_column_width
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@options_column_width = 20
|
34
|
+
end
|
35
|
+
|
36
|
+
# Prints short help text suitable for a --help option about
|
37
|
+
# available commands, by groups (ungrouped last). It takes a
|
38
|
+
# list of all commands (_cmds_) and the list of _groups_ to
|
39
|
+
# display.
|
40
|
+
#
|
41
|
+
# TODO: word splitting.
|
42
|
+
#
|
43
|
+
# TODO: why not try color, too ;-) ???
|
44
|
+
def print_commandline_options(cmds, groups)
|
45
|
+
for group in groups
|
46
|
+
puts unless group == groups[0]
|
47
|
+
name = (group && group.name) || "Ungrouped commands"
|
48
|
+
if group && group.blacklisted
|
49
|
+
name << " (blacklisted)"
|
50
|
+
end
|
51
|
+
puts name
|
52
|
+
for cmd in cmds[group].sort {|a,b|
|
53
|
+
a.long_option <=> b.long_option
|
54
|
+
}
|
55
|
+
|
56
|
+
strings = cmd.option_strings
|
57
|
+
puts "#{leading_spaces}%2s%1s %-#{@options_column_width}s%s" %
|
58
|
+
[
|
59
|
+
strings[0], (strings[0] ? "," : " "),
|
60
|
+
strings[1],
|
61
|
+
if strings[1].size >= @options_column_width
|
62
|
+
"\n#{total_leading_spaces}#{strings[2]}"
|
63
|
+
else
|
64
|
+
strings[2]
|
65
|
+
end
|
66
|
+
]
|
67
|
+
if cmd.has_options?
|
68
|
+
puts "#{total_leading_spaces} options: %s" %
|
69
|
+
cmd.optional_arguments.keys.sort.map {|x| "/#{x}"}.join(' ')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
# Leading spaces to align a string with the other option texts
|
79
|
+
def total_leading_spaces
|
80
|
+
return "#{leading_spaces}#{" " *(@options_column_width + 4)}"
|
81
|
+
# 4: '-o, '
|
82
|
+
end
|
83
|
+
|
84
|
+
# Spaces before any 'short' option appears
|
85
|
+
def leading_spaces
|
86
|
+
return " "
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,230 @@
|
|
1
|
+
# html.rb: html output for internal documentation
|
2
|
+
# copyright (c) 2009 by Vincent Fourmond
|
3
|
+
|
4
|
+
# This program is free software; you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation; either version 2 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
|
9
|
+
# This program is distributed in the hope that it will be useful, but
|
10
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12
|
+
# General Public License for more details (in the COPYING file).
|
13
|
+
|
14
|
+
require 'ctioga2/utils'
|
15
|
+
require 'ctioga2/commands/commands'
|
16
|
+
|
17
|
+
module CTioga2
|
18
|
+
|
19
|
+
Version::register_svn_info('$Revision: 77 $', '$Date: 2009-06-05 00:20:49 +0200 (Fri, 05 Jun 2009) $')
|
20
|
+
|
21
|
+
module Commands
|
22
|
+
|
23
|
+
module Documentation
|
24
|
+
|
25
|
+
# Generation of XHTML snippets (not full pages) that document
|
26
|
+
# the commands/groups and types known to CTioga2.
|
27
|
+
class HTML
|
28
|
+
|
29
|
+
# The Doc object the HTML class should document
|
30
|
+
attr_accessor :doc
|
31
|
+
|
32
|
+
# The base URL for file where types are documented.
|
33
|
+
attr_accessor :types_url
|
34
|
+
|
35
|
+
# The base URL for file where commands and groups are
|
36
|
+
# documented.
|
37
|
+
attr_accessor :commands_url
|
38
|
+
|
39
|
+
def initialize(doc)
|
40
|
+
@doc = doc
|
41
|
+
@types_url = "types.html"
|
42
|
+
@commands_url = "commands.html"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Ouputs HTML code to document all groups and commands
|
46
|
+
def write_commands(out = STDOUT)
|
47
|
+
cmds, groups = @doc.documented_commands
|
48
|
+
|
49
|
+
out.puts "<div class='quick-jump'>"
|
50
|
+
out.puts "Quick jump to a specific group of commands:\n"
|
51
|
+
out.puts "<ul>\n"
|
52
|
+
for g in groups
|
53
|
+
out.puts "<li><a href='#group-#{g.id}'>#{g.name}</a></li>\n"
|
54
|
+
end
|
55
|
+
out.puts "</ul>\n"
|
56
|
+
out.puts "</div>"
|
57
|
+
|
58
|
+
for g in groups
|
59
|
+
out.puts
|
60
|
+
out.puts "<h3 class='group' id='group-#{g.id}'>#{g.name}</h3>"
|
61
|
+
out.puts markup_to_html(g.description)
|
62
|
+
|
63
|
+
commands = cmds[g].sort {|a,b|
|
64
|
+
a.name <=> b.name
|
65
|
+
}
|
66
|
+
|
67
|
+
out.puts "<p>"
|
68
|
+
out.puts "<span class='bold'>Available commands:</span>\n"
|
69
|
+
out.puts commands.map {|c|
|
70
|
+
"<a href='#command-#{c.name}'><code>#{c.name}</code></a>"
|
71
|
+
}.join(' ')
|
72
|
+
out.puts "</p>"
|
73
|
+
|
74
|
+
for cmd in commands
|
75
|
+
out.puts
|
76
|
+
out.puts command_documentation(cmd)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Write a HTML table documenting all command-line options.
|
82
|
+
def write_command_line_options(out = STDOUT)
|
83
|
+
cmds, groups = @doc.documented_commands
|
84
|
+
|
85
|
+
out.puts "<table>"
|
86
|
+
for g in groups
|
87
|
+
out.puts "<tr><th colspan='3'>#{g.name}</th></tr>"
|
88
|
+
commands = cmds[g].sort {|a,b|
|
89
|
+
a.long_option <=> b.long_option
|
90
|
+
}
|
91
|
+
for cmd in commands
|
92
|
+
opts = cmd.option_strings
|
93
|
+
link = "<a href='#{@commands_url}#command-#{cmd.name}'>"
|
94
|
+
out.puts "<tr><td><code>#{link}#{opts[0]}</a></code></td>"
|
95
|
+
out.puts "<td><code>#{link}#{opts[1]}</a></code></td>"
|
96
|
+
out.puts "<td>#{opts[2]}</td></tr>"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
out.puts "</table>"
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
# Ouputs HTML code to document all types
|
105
|
+
def write_types(out = STDOUT)
|
106
|
+
types = @doc.types.sort.map { |d| d[1]}
|
107
|
+
|
108
|
+
|
109
|
+
out.puts "<div class='quick-jump'>"
|
110
|
+
out.puts "Quick jump to a specific type:\n"
|
111
|
+
out.puts "<ul>\n"
|
112
|
+
for t in types
|
113
|
+
out.puts "<li><a href='#type-#{t.name}'>#{t.name}</a></li>\n"
|
114
|
+
end
|
115
|
+
out.puts "</ul>\n"
|
116
|
+
out.puts "</div>"
|
117
|
+
|
118
|
+
for t in types
|
119
|
+
out.puts
|
120
|
+
out.puts "<h4 id='type-#{t.name}' class='type'>#{t.name}</h4>\n"
|
121
|
+
out.puts markup_to_html(t.description)
|
122
|
+
out.puts # There is no need to wrap the markup
|
123
|
+
# in a paragraph.
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
|
128
|
+
protected
|
129
|
+
|
130
|
+
# The string that represents a full command
|
131
|
+
def command_documentation(cmd)
|
132
|
+
str = "<h4 class='command' id='command-#{cmd.name}'>Command: <code>#{cmd.name}</code></h4>\n"
|
133
|
+
str << "<p class='synopsis'>\n<span class='bold'>Synopsis (file)</span>\n"
|
134
|
+
|
135
|
+
str << "</p>\n<pre class='examples-cmdfile'>"
|
136
|
+
str << "<span class='cmd'>#{cmd.name}("
|
137
|
+
str << cmd.arguments.map { |arg|
|
138
|
+
"<a class='argument' href='#{@types_url}#type-#{arg.type.name}'>#{arg.displayed_name}</a>"
|
139
|
+
}.join(',')
|
140
|
+
if cmd.has_options?
|
141
|
+
if(cmd.arguments.size > 0)
|
142
|
+
str << ", "
|
143
|
+
end
|
144
|
+
str << "option=..."
|
145
|
+
end
|
146
|
+
str << ")</span>\n"
|
147
|
+
str << "</pre>\n"
|
148
|
+
|
149
|
+
# Command-line file synopsis
|
150
|
+
str << "<p class='synopsis'>\n<span class='bold'>Synopsis (command-line)</span>\n"
|
151
|
+
args = cmd.arguments.map { |arg|
|
152
|
+
"<a class='argument' href='#{@types_url}#type-#{arg.type.name}'>#{arg.displayed_name.upcase}</a>"
|
153
|
+
}.join(' ')
|
154
|
+
if cmd.has_options?
|
155
|
+
args << " /option=..."
|
156
|
+
end
|
157
|
+
str << "</p>\n<pre class='examples-cmdline'>"
|
158
|
+
if cmd.short_option
|
159
|
+
str << "<span class='cmdline'>-#{cmd.short_option} "
|
160
|
+
str << args
|
161
|
+
str << "</span>\n"
|
162
|
+
end
|
163
|
+
str << "<span class='cmdline'>--#{cmd.long_option} "
|
164
|
+
str << args
|
165
|
+
str << "</span>\n"
|
166
|
+
str << "</pre>"
|
167
|
+
|
168
|
+
if cmd.has_options?
|
169
|
+
str << "<p class='synopsis'><span class='bold'>Available options</span>:\n"
|
170
|
+
opts = cmd.optional_arguments.sort.map do |k,arg|
|
171
|
+
"<a href='#{@types_url}#type-#{arg.type.name}'><code>#{k}</code></a>\n"
|
172
|
+
end
|
173
|
+
str << opts.join(' ')
|
174
|
+
str << "</p>"
|
175
|
+
end
|
176
|
+
# Now, the description:
|
177
|
+
str << markup_to_html(cmd.long_description)
|
178
|
+
return str
|
179
|
+
end
|
180
|
+
|
181
|
+
# Takes up an array of MarkupItem objects and returns its
|
182
|
+
# equivalent in HTML format. Alternativelely, it can take a
|
183
|
+
# String and feed it to MarkedUpText.
|
184
|
+
#
|
185
|
+
# TODO: escape correctly the produced HTML code...
|
186
|
+
def markup_to_html(items)
|
187
|
+
if items.is_a? String
|
188
|
+
mup = MarkedUpText.new(@doc, items)
|
189
|
+
return markup_to_html(mup.elements)
|
190
|
+
end
|
191
|
+
str = ""
|
192
|
+
for it in items
|
193
|
+
case it
|
194
|
+
when MarkedUpText::MarkupText
|
195
|
+
str << it.to_s
|
196
|
+
when MarkedUpText::MarkupLink
|
197
|
+
case it.target
|
198
|
+
when Command
|
199
|
+
link = "#{@commands_url}#command-#{it.target.name}"
|
200
|
+
when CommandGroup
|
201
|
+
link = "#{@commands_url}#group-#{it.target.id}"
|
202
|
+
when CommandType
|
203
|
+
link = "#{@types_url}#type-#{it.target.name}"
|
204
|
+
else
|
205
|
+
raise "The link target should be either a group, a command or a type, but is a #{it.target.class}"
|
206
|
+
end
|
207
|
+
str << "<a href='#{link}'>#{it.to_s}</a>"
|
208
|
+
when MarkedUpText::MarkupItemize
|
209
|
+
str << "<ul>\n"
|
210
|
+
for x in it.items
|
211
|
+
str << "<li>#{markup_to_html(x)}</li>\n"
|
212
|
+
end
|
213
|
+
str << "</ul>\n"
|
214
|
+
when MarkedUpText::MarkupParagraph
|
215
|
+
str << "<p>\n#{markup_to_html(it.elements)}\n</p>\n"
|
216
|
+
when MarkedUpText::MarkupVerbatim
|
217
|
+
str << "<pre class='#{it.cls}'>#{it.text}</pre>\n"
|
218
|
+
else
|
219
|
+
raise "Markup #{it.class} isn't implemented yet for HTML"
|
220
|
+
end
|
221
|
+
end
|
222
|
+
return str
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|